El premio Turing 1983 de la ACM (Association for Computing Machinery) fué otorgado conjuntamente a Ken Thompson y Dennis Ritchie, los dos hombres quienes primero diseñaron y desarrollaron el Sistema Operativo UNIX. Parte de la nota que acompaña el premio, dice.
"El éxito del Sistema UNIX estriba en la selección de unas pocas ideas clave y su elegante implementación. El modelo del Sistema UNIX ha dirigido una generación de diseñadores de software hacia nuevas formas de pensar acerca de la programación. La genialidad del Sistema UNIX está en su ambiente de trabajo, el cual, permite a los programadores basarse en el trabajo de otros."
Como programadores que trabajan en un ambiente del Sistema UNIX ¿Por qué hemos de prestar atención a lo que hicieron Thompson y Ritchie? ¿Tendrá alguna relevancia para nosotros en éstos días?
Sí, será de relevancia debido a que si comprendemos la mentalidad que originó el diseño del sistema y la atmósfera en el cual floreció, podrá así ayudarnos a ser programadores productivos en Sistemas UNIX más rápidamente.
Los Días Más Tempranos.
Puede que ustedes ya hayan leído acerca de cómo Ken Thompson hizo todo através de un equipo DEC PDP-7 que se encontraba sin utilizar en una sala de los Laboratorios de ATT/Bell, y cómo él, Dennis Ritchie y unos cuantos colegas utilizaron aquella como el equipo original para desarrollo de un nuevo sistema operativo que vino a llamarse UNIX. El aspecto más importante para hacer notar, es lo que aquél grupo estaba tratando de hacer: era modélar un ambiente de computación placentero para ellos mismos. Ello no resultó de una idea parecida a está "Vamos a unirnos y construyamos un sistema operativo que atraiga la atención del mundo entero."
La secuencia en la cual fueron concebidos y puestos los elementos del sistema es interesante. La primer pieza fué el sistema de archivo, seguida rápidamente por su organización en una jerarquía de directorios y archivos. El panorama de todo: datos almacenados, programas, comandos, directorios, aún dispositivos como archivos de un tipo u otro fué critico, como fue la idea de un archivo como un arreglo unidimensional de bytes sin alguna otra estructura implícita. La claridad y simplicidad de esta manera de mirar los archivos ha sido uno de los principales factores que han contribuido a que el ambiente de computación para programadores y otros usuarios haya logrado ser confortable.
El próximo elemento fué la idea de procesos, haciendo a un proceso capaz de crear otro y cpmunícarse con él. Esta forma innovadora de mirar a los programas ejecutándose como procesos, llevará fácilmente a la práctica de la reutilización de código por la invocación de éste desde otro proceso. Con la adición decomandos para manipular archivos y un ensamblador para producir programas ejecutables, el sistema fué esencialmente capaz de funcionar por si mismo.
El próximo paso principal del desarrollo fue la adquisición de una DEC PDP-1l y la instalación del nuevo sistema en él. Esté ha sido descrito por Ritchie como un golpe de buena suerte, en el que la PDP-11 resultó ser una máquina descomunalmente exitosa, su éxito para algo extiende el momentum de la aceptación del sistema que empezó a ser conocido como el Sistema UNIX.
Por allá de 1972 la idea innovadora de las tuberías o "pipes" (conectando ligas entre procesos donde la salida de uno sirve de entrada al próximo) fue incorporado dentro del sistema, el sistema operativo fue recodificado en lenguajes de alto nivel (primero en B y luego en C) y bautizado con el nombre de Sistema UNIX (forjado por Brian Kerninghan). Por este punto, el "ambiente de computación cómodo" buscado por Thompson y Ritchie fue una realidad; pero algunos otros aspectos fueron los que influenciaron fuertemente sobre el carácter del producto de ese entonces y el de nuestros días.
Es un mérito apuntar que el sistema UNIX vino de una atmósfera que fue totalmente diferente de aquellos que son producidos comercialmente. La atmósfera más típica es la que fué descrita por Tracy Kidder en "El Alma de una Nueva Máquina". En este caso, docenas de talentosos programadores trabajaron hasta fundirse, en una atmósfera de seguridad extremadamente rígida, contra castrantes lineas-muertas. En contraste, el Sistema UNIX se dijo que tuvo que tener al menos un período de diez años de gestación. Desde el inicio atrajo el interés de un número creciente de brillantes especialistas, muchos de esos que encontraron en el Sistema UNIX un ambiente que les permitió poner en práctica investigación y desarrollo de interés para ellos, pero quienes a su vez, sumaron valiosas contribuciones al cuerpo de herramientas disponibles para las líneas sucesoras de programadores en el Sistema UNIX.
Iniciando el año 1971, el sistema empezó a ser usado para aplicaciones dentro de los Laboratorios AT&T Bell, y en un plazo muy corto (1974) estaba disponible a un bajo costo y sin soporte para colegas y universidades. Esas versiones, llamadas versiones para la investigación y que fueron identificadas con números Arábigos hasta el 7, ocasionalmente crecieron en su lugar propietario y regresaban al sistema principal herramientas innovadoras. El ampliamente usado editor de pantalla vi(1), por ejemplo, fue agregado al sistema UNIX por William Joy de la Universidad de California, Berkeley.
En 1979, asintiendo a la demanda comercial, AT&T empezó a ofrecer versiones soportadas, llamadas versiones para el desarrollo, del Sistema UNIX. Esas son identificadas con números Romanos y tienen aún numeración de actualización interna añadida. Por ejemplo, es el UNIX Sistema V/386 Release 3.2.
Las versiones del Sistema UNIX que están siendo ofrecidas actualmente provienen de un ambiente más estrechamente relacionado con la industria del software estándar. Las características están siendo añadidas a los nuevas actualizaciones "releases" como respuesta a las necesidades provenientes del mercado. La calidad esencial del Sistema UNIX, sin embargo, queda tal y como el producto fué concebido innovadoramente por sus creadores y la atmósfera universitaria en la que trabajaron. Esta calidad, en algunas ocasiones ha sido denominada como la filosofía del Sistema UNIX, pero que viene a significar la manera en la cual los programadores han trabajado con el Sistema UNIX.
La Filosofia del Sistema
Para cualquiera y aún el más grande de los programas que se quiera escribir en un Sistema UNIX, deberá grabarse en la pared:
* CONSTRUYA SOBRE EL TRABAJO DE OTROS *
Distintamente a aquellos ambientes de cómputo donde cada nuevo proyecto significa empezar con un lienzo en blanco, dentro del Sistema UNIX un buen porcentaje de cualquier esfuerzo de programación está reposando en los directorios bin, lbin, lusribin, esperando a ser usado.
Las características del Sistema UNIX (tuberías, procesos y sistema de archivo) contribuyen a su reutilización, como lo muestra la historia de compartir y contribuir, la que se extiende desde 1969. Nos arriesgamos a perder la naturaleza del Sistema UNIX si no ponemos aquella frase en práctica.
La "Concha" (Shell) como una Herramienta para Prototipos.
Cualquier momento en que sea admitido al Sistema UNIX, estará usando el shell. El "shell" es un interpretador de comandos interactivo que se coloca entre usted y el núcleo (kernel) del Sistema UNIX, pero que es sólo parte de la historia. Debido a su habilidad para iniciar procesos, dirigir el flujo del control, enmarcar las interrupciones, y redirigir la entrada y salida, lo convierte en un lenguaje de programación completamente super-dotado. Los programas que usan esas capacidades son conocidos como procedimientos-shell o recetas-shell (shell scripts).
Muchos usos nuevos del "shell" involucran hileras unidas de comandos para ser ejecutadas bajo el control de un shell-script. Las docenas y docenas de comandos que pueden ser utilizados en esta forma están documentados en el Manual de Referencia del Administrador del Sistema y del Usuario. Toma tiempo ser pupilo. Busque en ellos cuando esté tratando de encontrar un comando con la opción correcta para manipular un problema de programación que les esté desnucando. Los más familiares a ustedes vienen con los comandos descritos en las páginas del manual, aquellos en los que usted pueda tomar total ventaja del ambiente del Sistema UNIX.
No es nuestro propósito aquí instruirles en la programación "shell". Lo que queremos dejar patente aquí es la parte importante que juegan los procedimientos escritos en "shell" como prototipos de desarrollo de aplicaciones de escala completa. Mientras comprendemos todos los fastidios que la programación "shell" pueda resultar en una tarea cercanamente compleja, tomar un procedimiento "shell" y ejecutarlo será siempre menor el tiempo que consuma que escribir, compilar y depurar el código compilado.
Esta habilidad para poner rápidamente en producción es lo que hace el "shell" una valiosa herramienta para el desarrollo de programas. La programación "shell" le permitirá "construir sobre el trabajo de otros" al grado más alto posible, desde que éste le permitirá unir componentes principales sencilla y eficientemente. Muchas veces las grandes aplicaciones pudieron haber sido hechas con procedimientos-"shell". De un modo parecido, si la aplicación es desarrollada inicialmente como un sistema prototipo para propósitos de prueba y que aún no está siendo puesta en producción, de ésta forma varios meses de trabajo pueden ser ahorrados.
Con un prototipo para pruebas, el rango de errores de usuario posibles puede ser determinado, algo que no siempre es fácil planificar cuando una aplicación está siendo diseñada. El método de tratar con entradas de usuarios extraños puede ser puesto en práctica sin mayor costo, evitando los problemas de grandes recodificaciones.
UNIX 1969 - Bell Laboratories - General Electric Model 645, Sistem Operativo MULTICS - PDP 7 Desocupada - Ideas de Thompson y Ritchie - y Thompson programó en A - Luego crearon y mejoraron B - Recodificaron partes en Lenguaje B - PDP-ll 1971 - Empezó a ser usado en los Laboratorios Bell para sus propias aplicaciones 1972 - Surgieron la idea de los "pipes" - Se recodificó UNIX en lenguaje C con el esfuerzo de de Brian Kerninghan 1974 - Estaba disponible para colegas y universidades -Las versiones se identificaron como versiones para la investigación (Números Arábigos) - Muchos investigadores aportaron herramientas 1979 -AT&T distribuye versiones soportadas parael desarrollo (números Romanos)
Filosofía del Sistema Unix
* CONSTRUIR SOBRE EL TRABAJO DE OTROS *
Características Generales del Sistema UNIX.
-UNIX es un sistema operativo desarrollado por los Laboratorios Bell (Estados Unidos) para proveer a los usuarios de un sistema de computación con un ambiente adecuado para la programación.
-UNIX es un sistema interactivo: mantiene una constante comunicación con el usuario a travez de la terminal.
-UNIX es un sistema que atiende múltiples tareas: es capaz de llevar a cabo varios procesos a la vez.
-UNIX es un sistema multiusuario: mas de una persona puede hacer uso de la computadora a la vez.
-UNIX es portátil: está escrito en un lenguaje (C) que puede ser entendido por cualquier computadora con un mínimo esfuerzo de traducción.
-El usuario de UNIX puede definir sus propias utilerías y utilizarlas de la misma manera que los comandos predefinidos del sistema.
-UNIX tiene un sistema de seguridad que impide que personas no autorizadas tengan acceso a la información protegida, pero ofrece la capacidad de compartir información entre distintos grupos de usuarios que desarrollen un trabajo.
-UNIX cuenta con un sistema de comunicación entre usuarios (correo electrónico)
-UNIX provee un juego completo de herramientas para elaboración de documentos, manuales incluyendo tabulación y graficación de datos.
-UNIX posee una gran cantidad de utilitarios para la manipulaón de textos que incluyen rutinas de ordenamiento, búsqueda de patrones
-UNIX soporta los lenguajes mas importantes de programación incluyendo FORTRAN, Pascal, COBOL, C, BASIC y otros
-UNIX provee una gama de asistentes de programación: reordenador de código C, generador de analizadores de léxico y gramática.
-UNIX proporciona compatibilidad entre archivos y procesos.
-UNIX cuenta con comunicación entre procesos, lo que permite reducir la utilización de archivos intermedios para procesos encadenados (entubados).
Las partes del UNIX
El sistema UNIX cuenta con tres partes básicas:
a) KERNEL: Es la parte del sistema que administra los recursos de la computadora. -Supervisa todos los dispositivos: discos, cintas, impresoras, terminales, líneas de comunicación. -Controla la ejecución de procesos -Asigna espacío de memoria
b) SISTEMA DE ARCHIVOS (File System): es la estructura organizadora de datos. Provee los medios para organizar datos en forma compleja.
c) INTERPRETADOR DE COMANDOS (shell): Es un programa utilitario, no parte del sistema, pero es la que interactúa con el usuario. Este utilitario recibe las peticiones del usuario y las traduce en acciones del "núcleo" e invoca las bibliotecas y utilitarios.
Definiciones básicas
Archivo: (file) Unidad de datos almacenada en un medio magnético generalmente. El usuario se refiere a los archivos por su nombre.
Directorio: (Directory) Archivo de tipo especial que no contiene información relevante para el usuario normal. Sirve para agrupar archivos dentro de una jerarquia del sistema de archivos. Puede decirse que es una tabla con datos sobre la ubicación de archivos, permisos de acceso y espacio ocupado.
Directorio Base: (Home Directory) Directorio anfitrión del usuario. Cuando el usuario es admitido al sistema, ese lo colocará en dicho directorio. Si el usuario navega muy lejos de su directorio base podrá regresar a el con un comando sencillo.
Directorio Raíz: (Root Directory) Es el directorio que se encuentra en la mas alta jerarquía del sistema, es decir, que no hay directorio que lo contenga.
Directorio Trabajo: (Working Directory) Directorio en el que se encuentra un usuario trabajando,encualquier instancia.
E/S Estándar: (Input/output standard) Cada proceso puede enviar o recibir información de tres lugares: "entrada estándar", "salida estándar" y "salida de error" y están asociadas con la terminal.
Grupo: (Group) Para lograr desarrollar un trabajo en común, los usuarios pueden agruparse. Les puede ser otorgados privilegios y otros casos no, dependiendo de la naturaleza de sus actividad.
Admisión: (Login) Es el proceso de admisión al sistema que implica verificar su autorización y solicitar la palabra de paso, inicialización de un shell.
Nodo-i: (inode) Identificación de nodo dentro un sistema de archivo. Es el nombre real de un archivo para el sistema operativo. Representa la ubicación del archivo en disco.
Trayectoria:(Pathname) Nombre de la ruta para ubicar un archivo indicando los directorios por los cuales ha de pasarse para llegar a un archivo o directorio destino. Las trayectoria pueden ser absolutas (indicando desde el directorio raíz) o relativas (es decir, relativo a la posición indicada por el usuario).
Tubería o Ducto (Pipe,Pipeline) Línea de comando compuesta por varios comandos que comunican sus salidas y entradas por medio del signo "|"
Super Usuario: (super user) Es el usuario cuyos privilegios deben estar basados en que pueda efectuar labores de administración del sistema. Tiene poder para correr programas de mantenimiento, administrar espacio de disco, dar mantenimiento a la estructura de archivos, proporcionar privilegios a otros usuarios, y otras labores. Requiere de password y su nombre es convecionalmente "root".
Redirección: (redirection) Es la acción de desviar la entrada o salida estándar de datos de un comando hacia otro o hacia un archivo específico.
Usuario: (user) es una persona cuyo existencia debe ser registrada por el Super Usuario al sistema para poder ser admitido y que se le ha otorgado privilegios para que efectúe labores dentro del sistema.