UNIX
Entre 1965 y 1969, los Laboratorios Bell participaron con General Electric (Más tarde Honeywell) y Project MAC (Del Massachusetts Institute of Technology) en el desarrollo del sistema Multics. Este sistema diseñado para la macrocomputadora GE-645, era demasiado grande y complejo. Los diseñadores de Multics tenían en mente un programa de utilidad general que pudiera ser en esencia "todo para el mundo".
Al avanzar los trabajos se hizo evidente que aunque Multics proporcionaría con toda probabilidad la diversidad de servicios requerida, sería un sistema enorme, costoso y torpe. Por estas y muchas otras razones, los Laboratorios Bell se retiraron del proyecto en 1969. Algunos de los miembros de investigación de Bell comenzaron a trabajar en un sistema mucho menos ambicioso. El grupo, dirigido por Ken Thompson, buscaba crear un ambiente de computación sencillo para investigación y desarrollo de programas potentes. La primera versión de un sistema UNIX se creó para un DEC PDP-7 y se escribió en lenguaje ensamblador.
Thompson llevó a la práctica un sistema de archivos, un mecanismo de control de procesos, programas para el manejo general de archivos y un intérprete de mandatos (Comandos). En 1970 Brian Kernighan acuñó el nombre "UNIX" haciendo un juego de palabras con Multics; de hecho, en el sentido en que Multics era "multi", los sistemas UNIX eran sin duda servicios de computación "uni", limitados.
Cuando apareció la PDP-11, su atractivo precio permitió al grupo adquirir la máquina. No contaba con apoyo para la multiprogramación; la computadora tenía sólo 24K y el sistema ocupaba 16K ; por tanto quedaban 8K reservados para el usuario. El tamaño máximo de archivo era de 64Kbytes. La aplicación principal era el procesamiento de textos. No había protección del almacenamiento, de modo que el sistema podía al ejecutarse caerse con facilidad durante la prueba de un programa nuevo. El disco era pequeño, apenas 500 Kilobytes.
Dennis Ritchie se unió a la labor de desarrollo y ayudó a rescribir los sistemas UNIX en C en 1973. Esto ayudó a que los programas de los sistemas UNIX se volvieran más portátiles y comprensibles.
Las contribuciones de Thompson y Ritchie recibieron como reconocimiento el premio Turing, el de más prestigio en la comunidad de computación.
Antes de la liberalización, AT&T no tenía permiso para competir en la industria de la informática, por lo que ofreció los sistemas UNIX a las universidades por una cuota nominal. Además de distribuir el código fuente, fomentando así el desarrollo adicional y las innovaciones.
Una de las universidades que adquirió una licencia de Unix fue la Universidad de California en Berkeley. La motivación principal era poder experimentar con el primer sistema operativo que incluía código fuente. Al poco tiempo, la gente de Berkeley había escrito varios programas utilitarios para Unix que otros investigadores podrían encontrar útiles. La Universidad decidió entonces distribuir este código a la comunidad y le llamó a sus distribuciones BSD (Berkeley Software Distribution). A pesar que al principio las distribuciones de Berkeley consistían principalmente en herramientas para los usuarios, muy pronto comenzaron a cambiar la forma en que el propio sistema operativo funcionaba. Implementaron el manejo de memoria virtual y programaron el soporte para los protocolos del Arpanet que luego se convertiría en el conocido Internet. Todos estos cambios eran distribuidos como BSD a quienes tenían una licencia de Unix de la división de BTL encargada de administrar este sistema (AT&T).
A mediados de los años ochentas, Richard Stallman, entonces en el Instituto Tecnológico de Massachussets (MIT) decidió dedicarse a la construcción de lo que denominó software libre. El razonamiento de Stallman era que los mayores progresos en la industria del software surgen cuando se coopera entre programadores. Según Stallman, las industrias de la época estaban atentando contra la libertad de los usuarios y programadores de compartir el software, así que decidió programar un sistema parecido a Unix y regalarlo. A este sistema le llamó GNU, un acrónimo recursivo que significa Gnu's Not Unix (GNU no es Unix).
Para las personas deseosas de correr Unix en las ahora populares PCs, quedaba únicamente una alternativa, Minix. Minix era un sistema operativo parecido a Unix desarrollado por el Profesor Andrew Tanenbaum para enseñarle a sus alumnos acerca del diseño de sistemas operativos. Sin embargo, debido al enfoque puramente educacional de Minix, Tanenbaum no permitía que este fuera modificado demasiado ya que esto complicaba el sistema y no permitía que sus estudiantes lo entendieran en un semestre.
Un estudiante de Finlandia, Linus Torvalds, al ver que no era posible extender Minix, decidió escribir su propio sistema operativo compatible con Unix. Miles de personas que querían correr Unix en sus PCs vieron aquí su única alternativa debido a que a Minix le faltaban demasiadas cosas y BSD, a pesar de tener toda la funcionalidad esperada, tenía problemas legales. El proyecto GNU que Stallman había iniciado hacía ya casi diez años había producido para este entonces un sistema casi completo a excepción del kernel, que es el programa que controla el hardware de la máquina. Torvalds decidió utilizar el casi completo sistema GNU y completarlo él mismo con su propio kernel, al resultado le llamó Linux. Richard Stallman insiste aún que el sistema debiera ser llamado GNU/Linux, ya que incluye más código del proyecto GNU que del proyecto Linux.
En 1975 los sistemas UNIX se habían popularizado muchísimo en las universidades y así apareció una organización de usuarios que evolucionó hasta convertirse en el grupo llamado USENIX.
Los sistemas UNIX satisfacen necesidades de los programadores que crean software y de los administradores que deben controlar las labores de desarrollo de programas. Sin embargo, no estaban diseñados para sustituir los sistemas operativos comerciales "de trabajo pesado" que dan apoyo a un procesamiento masivo de datos.
El sistema de tiempo compartido UNIX, séptima edición, editado en 1979, hizo que los sistemas UNIX estuvieran más cerca de convertirse en productos comerciales válidos. Los archivos podían llegar a un tamaño de mil millones de bytes. El sistema se hizo todavía más portátil y se amplió el lenguaje C. Se llevó a la práctica un shell (Intérprete de los mandatos del usuario) más potente que incluía variables de cadena, programación estructurada, manejo de trampas y otras características. Se añadió la capacidad de añadir archivos entre una máquina y otra.
Reconociendo el valor de los sistemas UNIX, Microsoft anunció en 1980 que ofrecería XENIX, una versión comercial de sistema UNIX, en microprocesadores de 16 bits. Para mejorar la viabilidad, Microsoft agrego a cute; recuperación de errores por hardware, reparación automática de archivos después de caídas, detección de fallas en el suministro de energía y errores de paridad, segmentos compartidos de datos y una mejor comunicación entre procesos.
En 1980, la Universidad de California en Berkeley recibió fondos del Departamento de Defensa para evolucionar los sistemas UNIX de sistemas operativos pequeños de tiempo compartido a sistemas apropiados para estudiar ambientes de computación distribuida. Esto redundó en el desarrollo del sistema 4.1 BSD, después AT&T comercializó el sistema UNIX System III en 1982, este evolucionó hasta convertirse en System V.
A mediados de los años noventa, AT&T vendió Unix a Novell, quién tomó como prioridad número uno resolver las demandas. El acuerdo fue que la Universidad de California eliminaría todo el código residual de AT&T y lanzaría una última distribución de BSD totalmente libre de problemas de licenciamiento. Esta distribución fue el 4.4-BSD Lite2. Quien quisiera distribuir BSD debería basar su distribución en 4.4-BSD Lite2 para no tener problemas legales. Inmediatamente los distribuidores de BSD reiniciaron sus labores de distribución migrando lentamente sus sistemas al 4.4-BSD Lite2.
Para este entonces, Linux se había convertido ya en el Unix más popular entre la gente que buscaba alternativas al Windows de Microsoft.
A comienzos de 1984, había sobre 100.000 instalaciones del sistema UNIX en el mundo, funcionando en máquinas con un amplio rango de computadoras, desde microprocesadores hasta mainframes. Ningún otro sistema operativo puede hacer esta declaración. Muchas han sido las razones que han hecho posible la popularidad y el éxito del sistema UNIX:
El sistema está escrito en un lenguaje de alto nivel, haciéndolo fácil de leer, comprender, cambiar, y mover a otras máquinas. Ritchie estimó que el primer sistema en C era de un 20 a un 40 por ciento más grande y lento porque no estaba escrito en lenguaje ensamblador, pero las ventajas de usar un lenguaje de alto nivel superaban largamente a las desventajas.
- Posee una simple interface de usuario con el poder de dar los servicios que los usuarios quieren.
- Provee de primitivas que permiten construir programas complejos a través de programas simples.
- Usa un sistema de archivos jerárquico que permite un mantenimiento fácil y una implementación eficiente.
- Usa un formato consistente para los archivos, el flujo de bytes, haciendo a los programas de aplicación más fáciles de escribir.
- Provee una simple y consistente interface a los dispositivos periféricos.
- Es un sistema multiusuario y multitarea; cada usuario puede ejecutar varios procesos simultáneamente.
- Oculta la arquitectura de la máquina al usuario, haciendo fácil de escribir programas que se ejecutan en diferentes implementaciones hardware.
Sin embargo tiene algunos inconvenientes:
- Comandos poco claros y con demasiadas opciones.
- Escasa protección entre usuarios.
- Sistema de archivo lento.
A pesar de que el sistema operativo y muchos de los comandos están escritos en C, UNIX soporta otros lenguajes, incluyendo Fortran, Basic, Pascal, Ada, Cobol, Lisp y Prolog. El sistema UNIX puede soportar cualquier lenguaje que tenga un compilador o intérprete y una interface de sistema que defina las peticiones del usuario de los servicios del sistema operativo de la forma estándar de las peticiones usadas en los sistemas UNIX.
Principales caracteristicas de UNIX
- Es un sistema operativo multiusuario, con capacidad de simular multiprocesamiento y procesamiento no interactivo.
- Está escrito en un lenguaje de alto nivel: C.
- Dispone de un lenguaje de control programable llamado SHELL.
- Ofrece facilidades para la creación de programas y sistemas y el ambiente adecuado para las tareas de diseños de software.
- Emplea manejo dinámico de memoria por intercambio o paginación.
- Tiene capacidad de interconexión de procesos.
- Permite comunicación entre procesos.
- Emplea un sistema jerárquico de archivos, con facilidades de protección de archivos, cuentas y procesos.
- Tiene facilidad para redireccionamiento de Entradas / Salidas.
- Garantiza un alto grado de portabilidad.
El sistema UNÍX se basa en un Núcleo llamado Kernel, que reside permanentemente en la memoria, y que atiende a todas las llamadas del sistema, administra el acceso a los archivos y el inicio o la suspensión de las tareas de los usuarios.
La comunicación con el sistema UNIX se da mediante un programa de control llamado SHELL. Este es un lenguaje de control, un intérprete, y un lenguaje de programación, cuyas características lo hacen sumamente flexible para las tareas de un centro de cómputo. Como lenguaje de programación abarca los siguientes aspectos:
- Ofrece las estructuras de control normales: secuenciación, iteración condicional, selección y otras.
- Paso de parámetros.
- Sustitución textual de variables y Cadenas.
- Comunicación bidireccional entre órdenes de shell.
- Es posible interconectar procesos entre sí.
- Diferentes usuarios pueden "ver" versiones distintas del sistema operativo debido a la capacidad del shell para configurar diversos ambientes de ejecución
KERNEL
El núcleo del sistema operativo Unix (llamado Kernel) es un programa escrito casi en su totalidad en lenguaje C, con excepción de una parte del manejo de interrupciones, expresada en el lenguaje ensamblador del procesador en el que opera.
Las funciones del núcleo son permitir la existencia de un ambiente en el que sea posible atender a varios usuarios y múltiples tareas en forma concurrente, repartiendo al procesador entre todos ellos, e intentando mantener en grado óptimo la atención individual.
El Kernel opera como asignador de recursos para cualquier proceso que necesite hacer uso de las facilidades de cómputo. Es el componente central de Unix y tiene las siguientes funciones:
- Creación de procesos, asignación de tiempos de atención y sincronización.
- Asignación de la atención del procesador a los procesos que lo requieren.
- Administración de espacio en el sistema de archivos, que incluye: acceso, protección y administración de usuarios; comunicación entre usuarios v entre procesos, y manipulación de E/S y administración de periféricos.
- Supervisión de la transmisión de datos entre la memoria principal y los dispositivos periféricos.
El Kernel reside siempre en la memoria central y tiene el control sobre la computadora, por lo que ningún otro proceso puede interrumpirlo; sólo pueden llamarlo para que proporcione algún servicio de los ya mencionados. Un proceso llama al Kernel mediante módulos especiales conocidos como llamadas al sistema.
El Kernel consta de dos artes principales: la sección de control de procesos y la de control de dispositivos. La primera asigna recursos, programas, procesos y atiende sus requerimientos de servicio; la segunda, supervisa la transferencia de datos entre la memoria principal y los dispositivos periféricos. En términos generales, cada vez que algún usuario oprime una tecla de una terminal, o que se debe leer o escribir información del disco magnético, se interrumpe al procesador central y el núcleo se encarga de efectuar la operación de transferencia.

Cuando se inicia la operación de la computadora, debe cargarse en la memoria una copia del núcleo, que reside en e] disco magnético (operación denominada bootstrap). Para ello, se deben inicializar algunas interfaces básicas de hardware; entre ellas, el reloj que proporciona interrupciones periódicas. El Kernel también prepara algunas estructuras de datos que abarcan una sección de almacenamiento temporal para transferencia de información entre terminales y procesos, una sección para almacenamiento de descriptores de archivos y una variable que indica la cantidad de memoria principal.
A continuación, el Kernel inicializa un proceso especial, llamado proceso 0. En general, los procesos se crean mediante una llamada a una rutina del sistema (fork), que funciona por un mecanismo de duplicación de procesos. Sin embargo, esto no es suficiente para crear el primero de ellos, por lo que el Kernel asigna una estructura de datos y establece apuntadores a una sección especial de la memoria, llamada tabla de procesos, que contendrá los descriptores de cada uno de los procesos existentes en el sistema.
Después de haber creado el proceso 0, se hace una copia del mismo, con lo que se crea el proceso 1; éste muy pronto se encargará de "dar vida" al sistema completo, mediante la activación de otros procesos que también forman parte del núcleo. Es decir, se inicia una cadena de activaciones de procesos, entre los cuales destaca el conocido como despachador, o scheduler, que es el responsable de decidir cuál proceso se ejecutará y cuáles van a entrar o salir de la memoria central. A partir de ese momento se conoce el número 1 como proceso de inicialización del sistema, init.
El proceso init es el responsable de establecer la estructura de procesos en Unix. Normalmente, es capaz de crear al menos dos estructuras distintas de procesos: el modo monousuario y el multiusuario. Comienza activando el intérprete del lenguaje de control (Shell) en la terminal principal, o consola, del sistema y proporcionándole privilegios de "superusuario". En la modalidad de un solo usuario la consola permite iniciar una primera sesión, con privilegios especiales, e impide que las otras líneas de comunicación acepten iniciar sesiones nuevas. Esta modalidad se usa con frecuencia para revisar y reparar sistemas de archivos, realizar pruebas de funciones básicas del sistema y para otras actividades que requieren uso exclusivo de la computadora.
Init crea otro proceso, que espera pacientemente a que alguien entre en sesión en alguna línea de comunicación. Cuando esto sucede, realiza ajustes en el protocolo de la línea y ejecuta el programa login, que se encarga de atender inicialmente a los nuevos usuarios. Si la clave del usuario, y la contraseña proporcionadas son las correctas, entonces entra en operación el programa Shell, que en lo sucesivo se encargará de la atención normal del usuario que se dio de alta en esa terminal.
A partir de ese momento el responsable de atender al usuario en esa terminal es el intérprete Shell. Cuando se desea terminar la sesión hay que desconectarse de Shell (y, por lo tanto, de Unix), mediante una secuencia especial de teclas (usualmente. <> - D). A partir de ese momento la terminal queda disponible para atender a un nuevo usuario.
Administración de archivos
El sistema de archivos de Unix; esta basado en un modelo arborescente y recursivo, en el cual los nodos pueden ser tanto archivos como directorios, y estos últimos pueden contener a su vez directorios o subdirectorios. Debido a esta filosofía, se maneja al sistema con muy pocas órdenes, que permiten una gran gama de posibilidades. Todo archivo de Unix está controlado por múltiples niveles de protección, que especifican los permisos de acceso al mismo. La diferencia que existe entre un archivo de datos, un programa, un manejador de entrada/salida o una instrucción ejecutable se refleja en estos parámetros, de modo que el sistema operativo adquiere características de coherencia y elegancia que lo distinguen.
La raíz del sistema de archivos (conocida como root ) se denota con el símbolo "/", y de ahí se desprende un conjunto de directorios que contienen todos los archivos del sistema de cómputo. Cada directorio, a su vez, funciona como la subraíz de un nuevo árbol que depende de él y que también puede estar formado por directorios o subdirectorios y archivos. Un archivo siempre ocupará el nivel más bajo dentro del árbol, porque de un archivo no pueden depender otros; si así fuera, sería un directorio. Es decir, los archivos son como las hojas del árbol.
Se define en forma unívoca el nombre de todo archivo (o directorio) mediante lo que se conoce como su trayectoria (path name): es decir, el conjunto completo de directorios, a partir de root (/), por los que hay que pasar para poder llegar al directorio o archivo deseado. Cada nombre se separa de los otros con el símbolo /, aunque tan sólo el primero de ellos se refiere a la raíz.
No hay comentarios:
Publicar un comentario