Diferencia entre revisiones de «Unix»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
m Revertidos los cambios de 190.80.161.195 (disc.) a la última edición de Finderlog
Línea 9: Línea 9:
En ocasiones, el término "Unix tradicional" suele emplearse para describir a Unix o a un sistema operativo que cuenta con las características de [[UNIX Versión 7]] o [[UNIX System V]].
En ocasiones, el término "Unix tradicional" suele emplearse para describir a Unix o a un sistema operativo que cuenta con las características de [[UNIX Versión 7]] o [[UNIX System V]].


== Historia ==
[[Archivo:Ken_n_dennis.jpg|thumb|300px|[[Ken Thompson]] y [[Dennis Ritchie]] Creadores de Unix. ]]
A finales de 1960, el [[MIT|Instituto Tecnológico de Massachusetts]], los [[Laboratorios Bell]] de [[AT&T]] y [[General Electric]] trabajaban en un sistema operativo experimental llamado [[Multics]] ('''Mult'''iplexed '''I'''nformation and '''C'''omputing '''S'''ervice),<ref name="Multics">Bell Labs. ''[http://www.bell-labs.com/history/unix/chaos.html Before Multics there was chaos, and afterwards, too]'' The Creation of the UNIX* Operating System. (en inglés)</ref> desarrollado para ejecutarse en una [[computadora central]] (mainframe) modelo [[GE-645]]. El objetivo del proyecto era desarrollar un gran sistema operativo interactivo que contase con muchas innovaciones, entre ellas mejoras en las [[políticas de seguridad]]. El proyecto consiguió dar a luz versiones para producción, pero las primeras versiones contaban con un pobre rendimiento.
Los laboratorios Bell de AT&T decidieron desvincularse y dedicar sus recursos a otros proyectos.


Uno de los programadores del equipo de los laboratorios Bell, Ken Thompson, siguió trabajando para la computadora GE-635<ref name="SpaceTravel">Bell Labs. ''[http://www.bell-labs.com/history/unix/pdp7.html The famous PDP-7 comes to the rescue]''
The Creation of the UNIX* Operating System. (en inglés)</ref> y escribió un juego llamado ''Space Travel'',<ref name="ArticulodeRitchie">Dennis M. Ritchie (September 1979) ''[http://cm.bell-labs.com/cm/cs/who/dmr/hist.html The Evolution of the Unix Time-sharing System]'' Bell Labs. 1996. Lucent Technologies Inc.(en inglés)</ref><ref>Dennis M. Ritchie ''[http://cm.bell-labs.com/cm/cs/who/dmr/spacetravel.html Thompson's Space Travel Game]'' Bell Labs. 2001. Lucent Technologies Inc.(en inglés)</ref> (Viaje espacial). Sin embargo, descubrió que el juego era lento en la máquina de [[General Electric]] y resultaba realmente caro, algo así como 75 dólares de EE.UU. por cada partida.


De este modo, Thompson escribió nuevamente el programa, con ayuda de Dennis Ritchie, en [[lenguaje ensamblador]], para que se ejecutase en una [[computadora]] [[DEC]] [[PDP-7]]. Esta experiencia, junto al trabajo que desarrolló para el proyecto Multics, condujo a Thompson a iniciar la creación de un nuevo sistema operativo para la DEC PDP-7.<ref>Bell Labs. ''[http://www.bell-labs.com/history/unix/takeshape.html The UNIX system begins to take shape]''
Es un sistema operativo de tiempo compartido, controla los recursos de una computadora y los asigna entre los usuarios. Permite a los usuarios correr sus programas. Controla los dispositivos de periféricos conectados a la máquina.
The Creation of the LINUX IS A YET* Operating System. (en inglés)</ref> Thompson y Ritchie lideraron un grupo de programadores, entre ellos a [[Rudd Canaday]], en los laboratorios Bell, para desarrollar tanto el [[sistema de ficheros]] como el sistema operativo multitarea en sí. A lo anterior, agregaron un [[intérprete de comandos|intérprete de órdenes]] (o intérprete de comandos) y un pequeño conjunto de programas. El proyecto fue bautizado UNICS, como [[acrónimo]] '''Un'''iplexed '''I'''nformation and '''C'''omputing '''S'''ystem, pues sólo prestaba servicios a dos usuarios (de acuerdo con [[Andrew Tanenbaum]], era sólo a un usuario<ref>Andrew S. Tanenbaum (20 May 2004) ''[http://www.cs.vu.nl/~ast/brown/ Some Notes on the "Who wrote Linux" Kerfuffle, Release 1.5]'' Departament of Computer Science, Vrije Universiteit, Amsterdam. (en inglés)</ref>). La autoría de esta sigla se le atribuye a [[Brian Wilson Kernighan|Brian Kernighan]], ya que era un [[hack (informática)|hack]] de Multics. Dada la popularidad que tuvo un juego de palabras que consideraba a UNICS un sistema MULTICS castrado (pues ''eunuchs'', en [[Idioma inglés|inglés]], es un [[homofonía|homófono]] de UNICS), se cambió el nombre a UNIX, dando origen al legado que llega hasta nuestros días.<ref>Bell Labs. ''[http://www.bell-labs.com/history/unix/almost.html It looked like an operating system, almost]'' The Creation of the UNIX* Operating System. (en inglés)</ref>


Hasta ese instante, no había existido apoyo económico por parte de los laboratorios Bell, pero eso cambió cuando el Grupo de Investigación en Ciencias de la Computación decidió utilizar UNIX en una máquina superior a la PDP-7. Thompson y Ritchie lograron cumplir con la solicitud de agregar herramientas que permitieran el procesamiento de textos a UNIX en una máquina [[PDP-11/20]], y como consecuencia de ello consiguieron el apoyo económico de los laboratorios Bell. Fue así como por vez primera, en [[1970]], se habla oficialmente del sistema operativo UNIX<ref>Bell Labs. ''[http://www.bell-labs.com/history/unix/firstport.html Porting UNIX for its first commercial application]'' The Creation of the UNIX* Operating System. (en inglés)</ref> ejecutado en una PDP-11/20. Se incluía en él un programa para dar formato a textos (runoff) y un [[editor de texto]]. Tanto el sistema operativo como los programas fueron escritos en el lenguaje ensamblador de la PDP-11/20. Este "sistema de procesamiento de texto" inicial, compuesto tanto por el sistema operativo como de runoff y el editor de texto, fue utilizado en los laboratorios Bell para procesar las solicitudes de patentes que ellos recibían. Pronto, runoff evolucionó hasta convertirse en [[troff]], el primer programa de edición electrónica que permitía realizar [[tipografía|composición tipográfica]]. El [[3 de noviembre]] de [[1971]] Thomson y Ritchie publicaron un manual de programación de UNIX (título original en inglés: "UNIX Programmer's Manual").<ref name="Articulo2deRitchie">Dennis M. Ritchie ''[http://cm.bell-labs.com/cm/cs/who/dmr/1stEdman.html Unix Programmer's Manual, First Edition (1971)]'' Bell Labs. Lucent Technologies Inc.(en inglés)</ref>
Posee las siguientes características:


En [[1972]] se tomó la decisión de escribir nuevamente UNIX, pero esta vez en el [[lenguaje de programación C]].<ref>Bell Labs. ''[http://www.bell-labs.com/history/unix/btoc.html From B language to NB to C]'' The Creation of the UNIX* Operating System. (en inglés)</ref> Este cambio significaba que UNIX podría ser fácilmente modificado para funcionar en otras computadoras (de esta manera, se volvía portable) y así otras variaciones podían ser desarrolladas por otros programadores. Ahora, el código era más conciso y compacto, lo que se tradujo en un aumento en la velocidad de desarrollo de UNIX. AT&T puso a UNIX a disposición de universidades y compañías, también al gobierno de los [[Estados Unidos]], a través de licencias.<ref name="sharingUNIX">Bell Labs. ''[http://www.bell-labs.com/history/unix/sharing.html Sharing UNIX with the rest of the world]'' The Creation of the UNIX* Operating System. (en inglés)</ref>
- Es un sistrema operativo multiusuario, con capacidad de simular multiprocesamiento y procesamiento no interactivo.
Una de estas licencias fue otorgada al Departamento de Computación de la Universidad de California, con sede en Berkeley.<ref name="sharingUNIX" /> En 1975 esta institución desarrolló y publicó su propio sucedáneo de UNIX, conocida como ''Berkeley Software Distribution'' ([[Berkeley Software Distribution|BSD]]), que se convirtió en una fuerte competencia para la familia UNIX de AT&T.


Mientras tanto, AT&T creó una división comercial denominada ''Unix Systems Laboratories'' para la explotación comercial del sistema operativo. El desarrollo prosiguió, con la entrega de las versiones 4, 5 y 6<ref name="versionesUNIX">Bell Labs. ''[http://www.bell-labs.com/history/unix/versions.html Early versions of the UNIX* system]'' The Creation of the UNIX* Operating System. (en inglés)</ref> en el transcurso de [[1975]]. Estas versiones incluían los ''[[pipes]]'' o ''tuberías'', lo que permitió dar al desarrollo una orientación modular respecto a la base del código, consiguiendo aumentar aún más la velocidad de desarrollo. Ya en [[1978]], cerca de 600 o más máquinas estaban ejecutándose con alguna de las distintas encarnaciones de UNIX.
- Está escrito en un lenguaje de alto nivel : C.


La versión 7,<ref name="versionesUNIX" /> la última versión del UNIX original con amplia distribución, entró en circulación en [[1979]]. Las versiones 8, 9 y 10<ref name="versionesUNIX" /> se desarrollaron durante la [[Años 1980|década de 1980]], pero su circulación se limitó a unas cuantas universidades, a pesar de que se publicaron los informes que describían el nuevo trabajo. Los resultados de esta investigación sirvieron de base para la creación de [[Plan 9 from Bell Labs]], un nuevo sistema operativo portable y distribuido, diseñado para ser el sucesor de UNIX en investigación por los [[Laboratorios Bell]].
- Dispone de un lenguaje de control programable llamado SHELL.


[[Archivo:X-Window-System.png|thumb|250 px|Éste sería el aspecto de UNIX sobre los fines de la [[Años 1980|década de 1980]] utilizando ''[[X Window System]]'' creado por el [[MIT]]]]
- Ofrece facilidades para la creación de programas y sistemas y el ambiente adecuado para las tareas de diseños de software.
AT&T entonces inició el desarrollo de UNIX System III, basado en la versión 7, como una variante de tinte comercial y así vendía el producto de manera directa. La primera versión se lanzó en [[1981]].<ref name="versionesUNIX" /> A pesar de lo anterior, la empresa subsidiaria [[Western Electric]] seguía vendiendo versiones antiguas de Unix basadas en las distintas versiones hasta la séptima. Para finalizar con la confusión con todas las versiones divergentes, AT&T decidió combinar varias versiones desarrolladas en distintas universidades y empresas, dando origen en [[1983]] al Unix [[System V]] Release 1.<ref name="versionesUNIX" /> Esta versión presentó características tales como el editor [[Vi]] y la biblioteca [[Curses (programación)|curses]], desarrolladas por [[Berkeley Software Distribution]] en la [[Universidad de California, Berkeley]]. También contaba con compatibilidad con las máquinas [[VAX]] de la compañía [[DEC]].


En [[1993]], la compañía [[Novell]] adquirió la división [[Unix Systems Laboratories]] de AT&T junto con su propiedad intelectual.<ref name="movsUNIX">Bell Labs. ''[http://www.bell-labs.com/history/unix/moveson.html UNIX moves on]'' The Creation of the UNIX* Operating System. (en inglés)</ref> Esto ocurrió en un momento delicado en el que ''Unix Systems Laboratories'' disputaba una demanda en los tribunales contra BSD por infracción de los derechos de copyright, revelación de secretos y violación de marca de mercado{{Añadir referencias}}.
- Emplea manejo dinámico de memoria por intercambio o paginación.


BSD no solamente ganó el juicio sino que cambiaron tornas descubriendo que grandes porciones del código de BSD habían sido copiadas ilegalmente en UNIX [[System V]]. En realidad, la propiedad intelectual de Novell (recién adquirida de ''Unix Systems Laboratories'') se reducía a unos pocos ficheros fuente{{Añadir referencias}}. La correspondiente contra-demanda acabó en un acuerdo extrajudicial cuyos términos permanecen bajo secreto a petición de Novell.
- Tiene capacidad de interconexión de procesos.


Aproximadamente por esa misma fecha, un estudiante de ciencias de la computación llamado [[Linus Torvalds]] desarrolló un [[núcleo (informática)|núcleo]] para computadoras con arquitectura de procesador [[Intel]] [[x86]] que mimetizaba muchas de las funcionalidades de UNIX y lo lanzó en forma de código abierto en 1991, bajo el nombre de [[Linux (núcleo)|Linux]]. En 1992, el [[GNU|Proyecto GNU]] comenzó a utilizar el núcleo Linux junto a sus programas.
- Permite comunicación entre procesos.


En [[1995]], Novell vendió su división UNIX comercial<ref name="movsUNIX" />(es decir, la antigua Unix Systems Laboratories) a ''[[Santa Cruz Operation]]'' (SCO) reservándose, aparentemente, algunos derechos de propiedad intelectual sobre el software.<ref>Novell, Inc. Press Release (20 September 1995) ''[http://www.novell.com/news/press/archive/1995/09/pr95220.html HP, Novell and SCO To Deliver High-Volume UNIX OS With Advanced Network And Enterprise Services]'' Novell, Inc. New York. (en inglés)</ref> SCO continúa la comercialización de System V en su producto [[UnixWare]], que durante cierto tiempo pasó a denominarse OpenUnix, aunque ha retomado de nuevo el nombre de UnixWare..
- 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 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 suspención de las tareas de los usuarios.

La comunació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.

El shell permite modificar en forma dinámica las características con que se ejecutan los programas en UNIX:

Las entradas y salidas pueden ser redireccionadas o redirigidas hacia archivos, procesos y dispositivos;

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. Por ejemplo, se puede hacer que un usuario entre directamente a su sección, ejecute un programa en particular y salga automáticamente del sistema al terminar de usarlo.

El núcleo del Sistema Operativo

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. < CTL > - D). A partir de ese momento la terminal queda disponible para atender a un nuevo usuario.


Administración de Archivos y Directorios

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.

Por ejemplo, el archivo

u/gerencia/abril94l/carta2

tiene toda esta trayectoria como nombre absoluto, pero se llama gerencia/abril94l/carta2, sin 1ra diagonal inicial, si se observa desde el directorio /u. Para los usuarios que están normalmente en el directorio /u/gerencia, el archivo se llama abril94l/carta2. Así, también puede existir otro archivo llamado carta2, pero dentro de algún otro directorio y en caso de ser necesario se emplearía el nombre de la trayectoria (completa o en partes, de derecha a izquierda) para distinguirlos. Unix ofece medios muy sencillos para colocarse en diferentes puntos del árbol que forma el sistema de archivos, que para el ejemplo anterior podría ser el siguiente:

Como se dijo antes, desde el punto de vista del directorio abril94, que a su vez pertenece al directorio gerencia del directorio /u, basta con el nombre carta2 para apuntar al archivo en cuestión.

En esta forma se maneja el sistema completo de archivos y se dispone de un conjunto de órdenes de Shell (además de múltiples variantes) para hacer diversas manipulaciones, como crear directorios, moverse dentro del sistema de archivos, copiarlos, etcétera.

Unix incluye, además, múltiples esquemas para crear, editar y procesar documentos. Existen varios tipos de editores, formadores de textos, macroprocesadores para textos, formadores de tablas, preprocesadores de expresiones matemáticas y un gran número de ayudas y utilerías diversas, que se mencionan más adelante.

A continuación se describe el modo de funcionamiento de Unix, con base en un modelo de estudio de sistemas operativos que lo divide en "capas" jerárquicas para su mejor comprensión.

Manejo de archivos y de información

Como ya se describió, la estructura básica del sistema de archivos es jerárquica, lo que significa que los archivos están almacenados en varios niveles. Se puede tener acceso a cualquier archivo mediante su trayectoria, que especifica su posición absoluta en la jerarquía, y los usuarios pueden cambiar su directorio actual a la posición deseada. Existe también un mecanismo de protección para evitar accesos no autorizados. Los directorios contienen información para cada archivo, que consiste en su nombre y en un número que el Kernel utiliza para manejar la estructura interna del sistema de archivos, conocido como el nodo-i. Hay un nodo-i para cada archivo, que contiene información de su directorio en el disco, su longitud, los modos y las fechas de acceso, el autor, etc. Existe, además, una tabla de descriptores de archivo, que es una estructura de datos residente en el disco magnético, a la que se tiene acceso mediante el sistema mencionado de E/S por bloques.

El control del espacio libre en el disco se mantiene mediante una lista ligada de bloques disponibles. Cada bloque contiene la dirección en disco del siguiente bloque en la cadena. El espacio restante contiene las direcciones de grupos de bloques del disco que se encuentren libres. De esta forma, con una operación de E/S, el sistema obtiene un conjunto de bloques libres y un apuntador para conseguir más.

Las operaciones de E/S en archivos se llevan a cabo con la ayuda de la correspondiente entrada del nodo-i en la tabla de archivos del sistema. El usuario normalmente desconoce los nodos-i porque las referencias se hacen por el nombre simbólico de la trayectoria. Los procesos emplean internamente funciones primitivas (llamadas al sistema) para tener acceso a los archivos; las más comunes son open, creat, read, write, seek, close y unlink, aunque sólo son empleadas por los programadores, no por los usuarios finales del sistema.

Toda esta estructura física se maneja "desde afuera" mediante la filosofía jerárquica de archivos y directorios ya mencionada, y en forma totalmente transparente para el usuario. Además, desde el punto de vista del sistema operativo, un archivo es muy parecido a un dispositivo.

Las ventajas de tratar a los dispositivos de E/S en forma similar a los archivos normales son múltiples: un archivo y un dispositivo de E/S se tornan muy parecidos; los nombres de los archivos y de los dispositivos tienen la misma sintaxis y significado, así que a un programa que espera un nombre de archivo como parámetro puede dársele un nombre de dispositivo (con esto se logra interacción rápida y fácil entre procesos de alto nivel).

El sistema Unix ofrece varios niveles de protección para el sistema de archivos, que consisten en asignar a cada archivo el número único de identificación de su dueño, junto con nueve bits de protección, que especifican permisos de lectura, escritura y ejecución para el propietario, para otros miembros de su grupo (definido por el administrador del sistema) y para el resto de los usuarios. Antes de cualquier acceso se verifica su validez consultando estos bits, que residen en el nodo-i de todo archivo. Además, existen otros tres bits que se emplean para manejos especiales, relacionados con la clave del superusuario.

Otra característica de Unix es que no requiere que el conjunto de sistemas de archivos resida en un mismo dispositivo.

Es posible definir uno o varios sistemas "desmontables", que residen físicamente en diversas unidades de disco. Existe una orden (mkfs) que permite crear un sistema de archivos adicional, y una llamada al sistema (mount) con la que se añade (y otra con la que se desmonta) uno de ellos al sistema de archivos global.

EI control de las impresoras de una computadora que funciona con el sistema operativo Unix consiste en un subsistema (SPOOL) que se encarga de coordinar los pedidos de impresión de múltiples usuarios. Existe un proceso de Kernel que en forma periódica revise las colas de servicio de las impresoras para detectar la existencia de pedidos e iniciar entonces las tareas de impresión. Este tipo de procesos, que son activados en forma periódica por el núcleo del sistema operativo, reciben en Unix el nombre de daemons (duendes), tal vez porque se despiertan y aparecen sin previo aviso. Otros se encargan de activar procesos en tiempos previamente determinados por el usuario, o de escribir periódicamente los contenidos de los buffers de memoria en el disco magnético.

Procesos. Manejo del Procesador

En Unix se ejecutan programas en un medio llamado "proceso de usuario". Cuando se requiere una función del Kernel, el proceso de usuario hace una llamada especial al sistema y entonces el control pasa temporalmente al núcleo. Para esto se requiere de un conjunto de elementos de uso interno, que se mencionan a continuación.

Se conoce como imagen a una especie de fotografía del ambiente de ejecución de un proceso, que incluye una descripción de la memoria, valores de registros generales, status de archivos abiertos, el directorio actual, etcétera. Una imagen es el estado actual de una computadora virtual, dedicada a un proceso en particular.

Un proceso se define como la ejecución de una imagen. Mientras el procesador ejecuta un proceso, la imagen debe residir en la memoria principal; durante la ejecución de otros procesos permanece primera en la memoria principal a menús que la aparición de un proceso activo de mayor prioridad la obligue a ser copiada al disco, como ya se dijo.

Un proceso puede encontrarse en uno de varios estados: en ejecución; listo para ejecutar, o en espera.

Cuando se invoca una función del sistema, el proceso de usuario llama al Kernel como subrutina. Hay un cambio de ambientes y, como resultado, se tiene un proceso del sistema. Estos dos procesos son dos fases del mismo original, que nunca se ejecutan en forma simultánea.

Existe una tabla de procesos que contiene una entrada por cada uno de ellos con los datos que requiere el sistema:

identificación, direcciones de los segmentos que emplea en la memoria, información que necesita el scheduler y otros. la entrada de la tabla de procesos se asigna cuando se crea el proceso y se libera cuando éste termina.

Para crear un proceso se requiere la inicialización de una entrada en la tabla, así como la creación de segmentos de texto y de datos. Además, es necesario modificar la tabla cuando cambia el estado del proceso o cuando recibe un mensaje de otro (para sincronización, por ejemplo). Cuando un proceso termina, su entrada en la tabla se libera y queda otro disponible para que otro nuevo la utilice.

En el sistema operativo Unix los procesos pueden comunicarse internamente entre sí, mediante el envío de mensajes o señales. El mecanismo conocido como interconexión (pipe) crea un canal entre dos procesos mediante una llamada a una rutina del Kernel, y se emplea tanto para pasar datos unidireccionalmente entre las imágenes de ambos, como para sincronizarlos, ya que si un proceso intenta escribir en un pipe ocupado, debe esperar a que el receptor lea los datos pendientes. Lo mismo ocurre en el caso de una lectura de datos inexistentes: el proceso que intenta leer debe esperar a que el proceso productor deposite los datos en el canal de intercomunicación.

Entre las diferentes llamadas al sistema para el manejo de procesos que existen en Unix están las siguientes, algunas de las cuales ya han sido mencionadas: fork (sacar una copia a un proceso); exec (cambiar la identidad de un proceso); kill (enviar una señal a un proceso); signal (especificar la acción por ejecutar cuando se recibe una señal de otro proceso), y exit (terminar un proceso).

Dentro de las tareas del manejo del procesador destaca la asignación dinámica (scheduling), que en Unix resuelve el scheduler mediante un mecanismo de prioridades. Cada proceso tiene asignada una prioridad; las prioridades de los procesos de usuario son menores que la más pequeña de un proceso del sistema.

El "motor" que mantiene en movimiento un esquema de multiprogramación es, por un lado, el conjunto de interrupciones que genera el desempeño de los procesos y, por otro, los constantes recordatorios que hace el reloj del procesador para indicar que se terminó la fracción de tiempo dedicada a cada proceso.

En el sistema Unix, las interrupciones son causadas por lo que se conoce como eventos, entre los cuales se consideran: la ejecución de una tarea de entrada/salida; la terminación de los procesos dependientes de otro; la terminación de la fracción de tiempo asignada a un proceso, y la recepción de una señal desde otro proceso.

En un sistema de tiempo compartido se divide el tiempo en un determinado número de intervalos o fracciones y se asigna cada una de ellas a un proceso. Además Unix toma en consideración que hay procesos en espera de una operación de E/S y que ya no pueden aprovechar su fracción. Para asegurar una distribución adecuada del procesador entre los procesos se calculan dinámicamente las prioridades de estos últimos, con el fin de determinar cuál será el proceso que se ejecutará cuando se suspenda el proceso activo actual.

Manejo De Memoria

Dependiendo de la computadora en la que se ejecute, Unix utiliza dos técnicas de manejo de memoria: swapping y memoria virtual.

Lo estándar en Unix es un sistema de intercambio de segmentos de un proceso entre memoria principal y memoria secundaria, llamado swapping lo que significa que se debe mover la imagen de un proceso al disco si éste excede la capacidad de la memoria principal, y copiar el proceso completo a memoria secundaria. Es decir, durante su ejecución, los procesos son cambiados de y hacia memoria secundaria conforme se requiera.

Si un proceso necesita crecer, pide más memoria al sistema operativo y se le da una nueva sección, lo suficientemente grande para acomodarlo. Entonces, se copia el contenido de la sección usada al área nueva, se libera la sección antigua y se actualizan las tablas de descriptores de procesos. Si no hay suficiente memoria en el momento de la expansión, el proceso se bloquea temporalmente y se le asigna espacio en memoria secundaria. Se copia a disco y, posteriormente, cuando se tiene el espacio adecuado - lo cual sucede normalmente en algunos segundos - se devuelve a memoria principal.

Está claro que el proceso que se encarga de los intercambios entre memoria y disco (llamado swapper) debe ser especial y jamás podrá perder su posición privilegiada en la memoria central. El Kernel se encarga de que nadie intente siquiera interrumpir este proceso, del cual dependen todos los demás. Este es el proceso 0 mencionado antes. Cuando se decide traer a la memoria principal un proceso en estado de "listo para ejecutar", se le asigna memoria y se copian allí sus segmentos. Entonces, el proceso cargado compite por el procesador con todos los demás procesos cargados. Si no hay suficiente memoria, el proceso de intercambio examine la tabla de procesos para determinar cuál puede ser interrumpido y llevado al disco.

Hay una pregunta que surge entonces es ¿cuál de los posibles procesos que están cargados será desactivado y cambiado a memoria secundaria? Los procesos que se eligen primero son aquellos que están esperando operaciones lentas (E/S), o que llevan cierto tiempo sin haberse movido al disco. La idea es tratar de repartir en forma equitativa las oportunidades de ejecución entre todos los procesos, tomando en cuenta sus historias recientes y sus patrones de ejecución.

Otra pregunta es ¿cuál de todos los procesos que están en el disco será traído a memoria principal?. La decisión se toma con base en el tiempo de residencia en memoria secundaria. El proceso más antiguo es el que se llama primero, con una pequeña penalización para los grandes.

Cuando Unix opera en máquinas más grandes, suele disponer de manejo de memoria de paginación por demanda. En algunos sistemas el tamaño de la página en Unix es de 512 bytes; en otros, de 1024. Para reemplazo se usa un algoritmo que mantiene en memoria las páginas empleadas más recientemente.

Un sistema de paginación por demanda ofrece muchas ventajas en cuanto a flexibilidad y agilidad en la atención concurrente de múltiples procesos y proporciona, además, memoria virtual, es decir, la capacidad de trabajar con procesos mayores que el de la memoria central. Estos esquemas son bastante complejos y requieren del apoyo de hardware especializado.

Manejo de entradas y salidas

El sistema de entrada/salida se divide en dos sistemas complementarios: el estructurado por bloques y el estructurado por caracteres. El primero se usa para manejar cintas y discos magnéticos, y emplea bloques de tamaño fijo (512 o 1024 bytes) para leer o escribir. El segundo se utiliza para atender a las terminales, líneas de comunicación e impresoras, y funciona byte por byte.

En general, el sistema Unix emplea programas especiales (escritos en C) conocidos como manejadores (drivers) para atender a cada familia de dispositivos de E/S. Los procesos se comunican con los dispositivos mediante llamadas a su manejador. Además, desde el punto de vista de los procesos, los manejadores aparecen como si fueran archivos en los que se lee o escribe; con esto se logra gran homogeneidad y elegancia en el diseño.

Cada dispositivo se estructura internamente mediante descriptores llamados número mayor, número menor y clase (de bloque o de caracteres). Para cada clase hay un conjunto de entradas, en una tabla, que aporta a los manejadores de los dispositivos. El número mayor se usa para asignar manejador, correspondiente a una familia de dispositivos; el menor pasa al manejador como un argumento, y éste lo emplea para tener acceso a uno de varios dispositivos físicos semejantes.

Las rutinas que el sistema emplea para ejecutar operaciones de E/S están diseñadas para eliminar las diferencias entre los dispositivos y los tipos de acceso. No existe distinción entre acceso aleatorio y secuencial, ni hay un tamaño de registro lógico impuesto por el sistema. El tamaño de un archivo ordinario está determinado por el número de bytes escritos en él; no es necesario predeterminar el tamaño de un archivo.

El sistema mantiene una lista de áreas de almacenamiento temporal (buffers), asignadas a los dispositivos de bloques. El Kernel usa estos buffers con el objeto de reducir el tráfico de E/S. Cuando un programa solicita una transferencia, se busca primero en los buffers internos para ver si el bloque que se requiere ya se encuentra en la memoria principal (como resultado de una operación de lectura anterior). Si es así, entonces no será necesario realizar la operación física de entrada o salida.

Existe todo un mecanismo de manipulación interna de buffers (y otro de manejo de listas de bytes), necesario para controlar el flujo de datos entre los dispositivos de bloques (y de caracteres) y los programas que los requieren.

Por último, y debido a que los manejadores de los dispositivos son programas escritos en lenguaje C, es relativamente fácil reconfigurar el sistema para ampliar o eliminar dispositivos de E/S en la computadora, así como para incluir tipos nuevos.

Lenguaje de control del sistema operativo

Entre los rasgos distintivos de Unix está el lenguaje de control que emplea, llamado Shell. Es importante analizar dos funciones más de Shell, llamadas redireccionamiento e Interconexión.

Asociado con cada proceso hay un conjunto de descriptores de archivo numerados 0, I y 2, que se utilizan para todas las transacciones entre los procesos y el sistema operativo. El descriptor de archivo 0 se conoce como la entrada estándar; el descriptor de archivo 1, como la salida estándar, y el descriptor 2, como el error estándar. En general, todos están asociados con la terminal de vídeo, pero, debido a que inicialmente son establecidos por Shell, es posible reasignarlos.

Una parte de la orden que comience con el símbolo ? se considera como el nombre del archivo que será abierto por Shell y que se asociará con la entrada estándar; en su ausencia, la entrada estándar se asigna a la terminal. En forma similar, un archivo cuyo nombre está precedido por el símbolo > recibe la salida estándar de las operaciones.

Cuando Shell interpreta la orden

califica < examen > resulta

llama a ejecución al programa califica (que ya debe estar compilado y listo para ejecutar) y detecta la existencia de un archivo que toma el lugar de la entrada estándar y de otro que reemplaza a la salida estándar. Después, pasa como datos de lectura los contenidos del archivo examen recién abierto (que debe existir previamente) al programa ejecutable. Conforme el programa produce datos como salida, éstos se guardan en el archivo resulta que Shell crea en ese momento.

En la teoría de lenguajes formales desempeñan un importante papel las gramáticas llamadas de tipo 3 (también conocidas como regulares), que tienen múltiples aplicaciones en el manejo de lenguajes. Existen unas construcciones gramaticales conocidas como expresiones regulares, con las que se puede hacer referencia a un conjunto ilimitado de nombres con estructura lexicográfica similar; esto lo aprovecha Shell para dar al usuario facilidades expresivas adicionales en el manejo de los nombres de los archivos. Así, por ejemplo, el nombre carta * se refiere a todos los archivos que comiencen con el prefijo carta* y que sean seguidos por cualquier subcadena, incluyendo la cadena vacía; por ello, si se incluye el nombre carta* en alguna orden, Shell la aplicará a los archivos carta, carta1, carta2 y cualquier otro que cumpla con esa especificación abreviada. En general, en lugares donde se emplea un nombre o una trayectoria, Shell permite utilizar una expresión regular que sirve como abreviatura para toda una familia de ellos, y automáticamente repite el pedido de atención para los componentes. Existen además otros caracteres especiales que Shell reconoce y emplea para el manejo de expresiones regulares, lo que proporciona al lenguaje de control de Unix mayor potencia y capacidad expresiva.

En Unix existe también la posibilidad de ejecutar programas sin tener que atenderlos en forma interactiva, sino simulando paralelismo (es decir, atender de manera concurrente varios procesos de un mismo usuario). Esto se logra agregando el símbolo & al final de la línea en la que se escribe la orden de ejecución. Como resultado, Shell no espera que el proceso "hijo'' termine de ejecutar (como haría normalmente), sino que regresa a atender al usuario inmediatamente después de haber creado el proceso asincrónico, simulando en esta forma el procesamiento por lotes ( batch ) Para cada uno de estos procesos Shell proporciona, además, el número de identificación, por lo que si fuera necesario el usuario podría cancelarlo posteriormente, o averiguar el avance de la ejecución.

La comunicación interna entre procesos (es decir, el envío de mensajes con los que los diversos procesos se sincronizan y coordinan) ocurre mediante el mecanismo de interconexiones (pipes) ya mencionado, que conecta la salida estándar de un programa a la entrada estándar de otro, como si fuera un conducto con dos extremos, cada uno de los cuales está conectado a su vez a un proceso distinto. Desde Shell puede emplearse este mecanismo con el símbolo | en la línea donde se escribe la orden de ejecución.

Así en el ejemplo:

(califica < tarea | sorte > lista) &

se emplean las características de interconexión, redireccionamiento y asincronía de procesos para lograr resultados difíciles de obtener en otros sistemas operativos. Aquí se pide que, en forma asincrónica (es decir, dejando que la terminal siga disponible para atender otras tareas del mismo usuario), se ejecute el programa califica para que lea los datos que requiere del archivo tareas; al terminar, se conectará con el proceso sort (es decir, pasará los resultados intermedios) para que continúe el procesamiento y se arreglen los resultados en orden alfabético; al final de todo esto, los resultados quedarán en el archivo lista.

Con esta otra orden, por ejemplo, se busca obtener todos los renglones que contengan las palabras "contrato" o "empleado" en los archivos en disco cuyos nombres comiencen con la letra "E" (lo cual se denota mediante una expresión regular). Para lograrlo, se hace uso de una función llamada egrep, especial para el manejo de patrones y combinaciones de expresiones regulares dentro de los archivos:

egrep-n 'contrato' 'empleado' E *

Los resultados aparecen así:

Emple1: 5: en caso de que un empleado decide hacer uso de la facilidad,

Emple1:7: y el contrato así lo considere las obligaciones de la

Emple2:9: Cláusula II: El contrato colectivo de trabajo

Emple2:15: Fracción llI: El empleado tendrá derecho, de acuerdo con lo

El tercer renglón, por ejemplo, muestra el noveno renglón del archivo Emple2, que contiene una de las palabras buscadas.

Como Unix fue diseñado para servir de entorno en las labores de diseño y producción de programas, ofrece - además de su filosofía misma - un rico conjunto de herramientas para la creación de sistemas complejos, entre las que destaca el subsistema make. Este último ofrece una especie de lenguaje muy sencillo, con el cual el programador describe las relaciones estructurales entre los módulos que configuran un sistema completo, para que de ahí en adelante make se encargue de mantener el sistema siempre al día. Es decir, si se modifica algún módulo, se reemplaza o se añade otro, las compilaciones individuales, así como las cargas y ligas a que haya lugar, serán realizadas en forma automática, por esta herramienta. Con una sola orden, entonces, es posible efectuar decenas de compilaciones y ligas predefinidas entre módulos, y asegurarse de que en todo momento se tiene la última versión de un sistema, ya que también se lleva cuenta automática de las fechas de creación, modificación y compilación de los diversos módulos. De esta manera, se convierte en una herramienta casi indispensable al desarrollar aplicaciones que requieren decenas de programas que interactúan entre sí o que mantienen relaciones jerárquicas.

Otras herramientas interesantes son ar, diseñado para crear y mantener bibliotecas de programas (que serán luego utilizadas por otros programas para efectuar las funciones ya definidas sin tener que duplicar el código); awk, un lenguaje para reconocimiento de patrones y expresiones regulares (es decir, generadas por una gramática regular o de tipo 3), útil para extraer información de archivos en forma selectiva; lex, un generador de analizadores lexicográfico, y yacc, un compilador de compiladores. Estos dos últimos se emplean como herramientas en la creación de compiladores y procesadores de lenguajes.

La lista complete de funciones, órdenes de subsistemas que forman parte de las utilerías del sistema operativo Unix es realmente grande, e incluye más de un centenar, que se pueden agrupar en los siguientes rubros:

Compiladores de compiladores.

Ejecución de programas.

Facilidades de comunicaciones.

Funciones para control de status.

Funciones para control de usuarios.

Funciones para impresión.

Herramientas de desarrollo de programación.

Lenguaje C, funciones y bibliotecas asociados.

Macroprocesamiento.

Manejo de directorios y archivos.

Manejo de gráficas.

Manejo de información.

Manejo de terminales.

Mantenimiento y respaldos.

Otros lenguajes algorítmicos integrados.

Preparación de documentos.


== Familias ==
== Familias ==

Revisión del 02:32 8 dic 2009

Unix (registrado oficialmente como UNIX®) es un sistema operativo portable, multitarea y multiusuario; desarrollado, en principio, en 1969 por un grupo de empleados de los laboratorios Bell de AT&T, entre los que figuran Ken Thompson, Dennis Ritchie y Douglas McIlroy.[1][2]

«después de treinta años de su creación, UNIX sigue siendo un fenómeno»

Hasta 2009, el propietario de la marca UNIX® es The Open Group, un consorcio de normalización industrial. Sólo los sistemas totalmente compatibles y que se encuentran certificados por la especificación Single UNIX Specification pueden ser denominados "UNIX®" (otros reciben la denominación "similar a un sistema Unix" o "similar a Unix").

Durante fines de la década de 1970 y principios de la década de 1980, la influencia de Unix en círculos académicos indujo a su adopción en masa (principalmente la variante BSD, que había surgido en la Universidad de California, Berkeley) en varias compañías que se iniciaban por aquel entonces[cita requerida], siendo la más destacada Sun Microsystems. Hoy en día, junto a los sistemas Unix certificados, también se pueden encontrar sistemas similares a Unix, como Linux y los derivados de BSD.

En ocasiones, el término "Unix tradicional" suele emplearse para describir a Unix o a un sistema operativo que cuenta con las características de UNIX Versión 7 o UNIX System V.

Historia

Ken Thompson y Dennis Ritchie Creadores de Unix.

A finales de 1960, el Instituto Tecnológico de Massachusetts, los Laboratorios Bell de AT&T y General Electric trabajaban en un sistema operativo experimental llamado Multics (Multiplexed Information and Computing Service),[4]​ desarrollado para ejecutarse en una computadora central (mainframe) modelo GE-645. El objetivo del proyecto era desarrollar un gran sistema operativo interactivo que contase con muchas innovaciones, entre ellas mejoras en las políticas de seguridad. El proyecto consiguió dar a luz versiones para producción, pero las primeras versiones contaban con un pobre rendimiento. Los laboratorios Bell de AT&T decidieron desvincularse y dedicar sus recursos a otros proyectos.

Uno de los programadores del equipo de los laboratorios Bell, Ken Thompson, siguió trabajando para la computadora GE-635[5]​ y escribió un juego llamado Space Travel,[6][7]​ (Viaje espacial). Sin embargo, descubrió que el juego era lento en la máquina de General Electric y resultaba realmente caro, algo así como 75 dólares de EE.UU. por cada partida.

De este modo, Thompson escribió nuevamente el programa, con ayuda de Dennis Ritchie, en lenguaje ensamblador, para que se ejecutase en una computadora DEC PDP-7. Esta experiencia, junto al trabajo que desarrolló para el proyecto Multics, condujo a Thompson a iniciar la creación de un nuevo sistema operativo para la DEC PDP-7.[8]​ Thompson y Ritchie lideraron un grupo de programadores, entre ellos a Rudd Canaday, en los laboratorios Bell, para desarrollar tanto el sistema de ficheros como el sistema operativo multitarea en sí. A lo anterior, agregaron un intérprete de órdenes (o intérprete de comandos) y un pequeño conjunto de programas. El proyecto fue bautizado UNICS, como acrónimo Uniplexed Information and Computing System, pues sólo prestaba servicios a dos usuarios (de acuerdo con Andrew Tanenbaum, era sólo a un usuario[9]​). La autoría de esta sigla se le atribuye a Brian Kernighan, ya que era un hack de Multics. Dada la popularidad que tuvo un juego de palabras que consideraba a UNICS un sistema MULTICS castrado (pues eunuchs, en inglés, es un homófono de UNICS), se cambió el nombre a UNIX, dando origen al legado que llega hasta nuestros días.[10]

Hasta ese instante, no había existido apoyo económico por parte de los laboratorios Bell, pero eso cambió cuando el Grupo de Investigación en Ciencias de la Computación decidió utilizar UNIX en una máquina superior a la PDP-7. Thompson y Ritchie lograron cumplir con la solicitud de agregar herramientas que permitieran el procesamiento de textos a UNIX en una máquina PDP-11/20, y como consecuencia de ello consiguieron el apoyo económico de los laboratorios Bell. Fue así como por vez primera, en 1970, se habla oficialmente del sistema operativo UNIX[11]​ ejecutado en una PDP-11/20. Se incluía en él un programa para dar formato a textos (runoff) y un editor de texto. Tanto el sistema operativo como los programas fueron escritos en el lenguaje ensamblador de la PDP-11/20. Este "sistema de procesamiento de texto" inicial, compuesto tanto por el sistema operativo como de runoff y el editor de texto, fue utilizado en los laboratorios Bell para procesar las solicitudes de patentes que ellos recibían. Pronto, runoff evolucionó hasta convertirse en troff, el primer programa de edición electrónica que permitía realizar composición tipográfica. El 3 de noviembre de 1971 Thomson y Ritchie publicaron un manual de programación de UNIX (título original en inglés: "UNIX Programmer's Manual").[12]

En 1972 se tomó la decisión de escribir nuevamente UNIX, pero esta vez en el lenguaje de programación C.[13]​ Este cambio significaba que UNIX podría ser fácilmente modificado para funcionar en otras computadoras (de esta manera, se volvía portable) y así otras variaciones podían ser desarrolladas por otros programadores. Ahora, el código era más conciso y compacto, lo que se tradujo en un aumento en la velocidad de desarrollo de UNIX. AT&T puso a UNIX a disposición de universidades y compañías, también al gobierno de los Estados Unidos, a través de licencias.[14]​ Una de estas licencias fue otorgada al Departamento de Computación de la Universidad de California, con sede en Berkeley.[14]​ En 1975 esta institución desarrolló y publicó su propio sucedáneo de UNIX, conocida como Berkeley Software Distribution (BSD), que se convirtió en una fuerte competencia para la familia UNIX de AT&T.

Mientras tanto, AT&T creó una división comercial denominada Unix Systems Laboratories para la explotación comercial del sistema operativo. El desarrollo prosiguió, con la entrega de las versiones 4, 5 y 6[15]​ en el transcurso de 1975. Estas versiones incluían los pipes o tuberías, lo que permitió dar al desarrollo una orientación modular respecto a la base del código, consiguiendo aumentar aún más la velocidad de desarrollo. Ya en 1978, cerca de 600 o más máquinas estaban ejecutándose con alguna de las distintas encarnaciones de UNIX.

La versión 7,[15]​ la última versión del UNIX original con amplia distribución, entró en circulación en 1979. Las versiones 8, 9 y 10[15]​ se desarrollaron durante la década de 1980, pero su circulación se limitó a unas cuantas universidades, a pesar de que se publicaron los informes que describían el nuevo trabajo. Los resultados de esta investigación sirvieron de base para la creación de Plan 9 from Bell Labs, un nuevo sistema operativo portable y distribuido, diseñado para ser el sucesor de UNIX en investigación por los Laboratorios Bell.

Éste sería el aspecto de UNIX sobre los fines de la década de 1980 utilizando X Window System creado por el MIT

AT&T entonces inició el desarrollo de UNIX System III, basado en la versión 7, como una variante de tinte comercial y así vendía el producto de manera directa. La primera versión se lanzó en 1981.[15]​ A pesar de lo anterior, la empresa subsidiaria Western Electric seguía vendiendo versiones antiguas de Unix basadas en las distintas versiones hasta la séptima. Para finalizar con la confusión con todas las versiones divergentes, AT&T decidió combinar varias versiones desarrolladas en distintas universidades y empresas, dando origen en 1983 al Unix System V Release 1.[15]​ Esta versión presentó características tales como el editor Vi y la biblioteca curses, desarrolladas por Berkeley Software Distribution en la Universidad de California, Berkeley. También contaba con compatibilidad con las máquinas VAX de la compañía DEC.

En 1993, la compañía Novell adquirió la división Unix Systems Laboratories de AT&T junto con su propiedad intelectual.[16]​ Esto ocurrió en un momento delicado en el que Unix Systems Laboratories disputaba una demanda en los tribunales contra BSD por infracción de los derechos de copyright, revelación de secretos y violación de marca de mercado[cita requerida].

BSD no solamente ganó el juicio sino que cambiaron tornas descubriendo que grandes porciones del código de BSD habían sido copiadas ilegalmente en UNIX System V. En realidad, la propiedad intelectual de Novell (recién adquirida de Unix Systems Laboratories) se reducía a unos pocos ficheros fuente[cita requerida]. La correspondiente contra-demanda acabó en un acuerdo extrajudicial cuyos términos permanecen bajo secreto a petición de Novell.

Aproximadamente por esa misma fecha, un estudiante de ciencias de la computación llamado Linus Torvalds desarrolló un núcleo para computadoras con arquitectura de procesador Intel x86 que mimetizaba muchas de las funcionalidades de UNIX y lo lanzó en forma de código abierto en 1991, bajo el nombre de Linux. En 1992, el Proyecto GNU comenzó a utilizar el núcleo Linux junto a sus programas.

En 1995, Novell vendió su división UNIX comercial[16]​(es decir, la antigua Unix Systems Laboratories) a Santa Cruz Operation (SCO) reservándose, aparentemente, algunos derechos de propiedad intelectual sobre el software.[17]​ SCO continúa la comercialización de System V en su producto UnixWare, que durante cierto tiempo pasó a denominarse OpenUnix, aunque ha retomado de nuevo el nombre de UnixWare..

Familias

Como se puede deducir de esta breve reseña histórica, existen varias familias del sistema operativo UNIX, que han evolucionado de manera independiente a lo largo de los años. Cada familia se distingue no tanto por sus diferencias técnicas como por sus diferencias en propiedad intelectual. Se observa que todas las familias se han visto contaminadas, directa o indirectamente, por otras familias.

Familias UNIX más significativas

  • AT&T: la familia que tuvo su origen en el UNIX de AT&T. Considerada la familia UNIX "pura" y original. Sus sistemas operativos más significativos son UNIX System III y UNIX System V.
  • BSD: familia originada por el licenciamiento de UNIX a Berkely. BSD se reescribió para no incorporar propiedad intelectual originaria de AT&T en la versión 4. La primera implementación de los protocolos TCP/IP que dieron origen a Internet son la pila (stack) TCP/IP BSD.
  • AIX: Esta familia surge por el licenciamiento de UNIX System III a IBM.
  • Xenix: familia derivada de la adquisición de los derechos originales de AT&T primero por parte de Microsoft y de esta los vendió a SCO.
  • GNU: En 1983, Richard Stallman anunció el Proyecto GNU, un ambicioso esfuerzo para crear un sistema similar a Unix, que pudiese ser distribuido libremente. El software desarrollado por este proyecto -por ejemplo, GNU Emacs y GCC - también han sido parte fundamental de otros sistemas UNIX.
  • Linux: En 1991, cuando Linus Torvalds empezó a proponer el núcleo Linux y a reunir colaboradores, las herramientas GNU eran la elección perfecta. Al combinarse ambos elementos, conformaron la base del sistema operativo (basado en POSIX) que hoy se conoce como GNU/Linux. Las distribuciones basadas en el núcleo, el software GNU y otros agregados entre las que se pueden mencionar a Red Hat Linux y Debian GNU/Linux se han hecho populares tanto entre los aficionados a la computación como en el mundo empresarial. Obsérvese que Linux tiene un origen independiente, por lo que se considera un 'clónico' de UNIX y no un UNIX en el sentido histórico.

Las interrelaciones entre estas familias son las siguientes, aproximadamente en orden cronológico:

  • La familia BSD surge del licenciamiento del UNIX original de AT&T.
  • Xenix también surge por licenciamiento del UNIX original de AT&T, aunque aún no era propiedad de SCO.
  • AIX surge por licenciamiento de UNIX System III, pero también incorpora propiedad intelectual de BSD.
  • La familia original AT&T incorpora ilegalmente propiedad intelectual de BSD en UNIX System III r3.
  • La familia AIX vuelve a incorporar propiedad intelectual de la familia AT&T, esta vez procedente de UNIX System V.
  • Linux incorpora propiedad intelectual de BSD, gracias a que éste también se libera con una licencia de código abierto denominada Open-source BSD.
  • Según SCO Group, Linux incorpora propiedad intelectual procedente de AIX, gracias a la colaboración de IBM en la versión 2.4, más aún no está demostrado, hay un proceso judicial al respecto: Disputas de SCO sobre Linux.

La marca

UNIX es una marca registrada de The Open Group en Estados Unidos y otros países. Esta marca sólo se puede aplicar a los sistemas operativos que cumplen la "Single Unix Specification" de esta organización y han pagado las regalías establecidas.

En la práctica, el término UNIX se utiliza en su acepción de familia. Se aplica también a sistemas multiusuario basados en POSIX (tales como GNU/Linux, Mac OS X (el cual, en su versión 10.5 ya ha alcanzado la certificación UNIX), FreeBSD, NetBSD, OpenBSD), los cuales no buscan la certificación UNIX por resultar cara para productos destinados al consumidor final o que se distribuyen libremente en Internet. En estos casos, el término se suele escribir como "UN*X", "*NIX", o "*N?X".

Implementaciones más importantes

A lo largo de la historia ha surgido una gran multitud de implementaciones comerciales de UNIX. Sin embargo, un conjunto reducido de productos han consolidado el mercado y prevalecen gracias a un continuo esfuerzo de desarrollo por parte de sus fabricantes. Los más importantes son:

Solaris 10, un sistema operativo derivado de la rama BSD
  • Solaris de Sun Microsystems. Uno de los sistemas operativos Unix más difundido en el entorno empresarial y conocido por su gran estabilidad. Parte del código fuente de Solaris se ha liberado con licencia de fuentes abiertas (OpenSolaris).
  • AIX de IBM. El UNIX "propietario" de IBM ha cumplido 20 años de vida en el 2006 y continúa en pleno desarrollo, con una perceptible herencia del mainframe en campos como la virtualización o la RAS de los servidores, heredada de sus "hermanos mayores".
  • HP-UX de Hewlett-Packard. Este sistema operativo también nació ligado a las computadoras departamentales de este fabricante. También es un sistema operativo estable que continua en desarrollo.
  • Mac OS X. Curiosamente sus propios usuarios suelen desconocer que se trata de un UNIX completo, aprobado por The Open Group. Su diferencia marcada es que posee una interfaz gráfica propietaria llamada Aqua, y es principalmente desarrollada en Objective-C en lugar de C o C++.

Existen sistemas operativos basados en el núcleo Linux, y el conjunto de aplicaciones GNU (también denominado GNU/Linux), entre las más utilizadas encontramos:

También son populares los sistemas operativos descendientes del 4.4BSD:

  • FreeBSD. Quizá el sistema operativo más popular de la familia, de propósito múltiple. Con una implementación SMP muy elaborada, es el sistema operativo utilizado por los servidores de Yahoo. Y base de muchos sistemas operativos entre ellos Mac OS X de Apple.
  • OpenBSD. Ampliamente reconocida por su seguridad proactiva y auditoría permanente del código fuente. Es utilizada en ambientes donde la seguridad prima sobre todo, es usual encontrarlo instalado en servidores que actúan como Firewall, VPN o Proxy.
  • NetBSD . Se le conoce por su portabilidad, a Octubre de 2008: 53 arquitecturas soportadas. La NASA lo ha utilizado para la investigación en redes TCP/IP satelitales, al igual que para reciclar computadoras viejas con software moderno.

Las siguientes implementaciones de UNIX tienen importancia desde el punto de vista histórico, no obstante, actualmente están en desuso:

Órdenes clásicas de UNIX

Algunos comandos básicos de UNIX son:

Esta es una lista de los sesenta comandos de usuario de la sección 1 de la Primera Edición:

ar as b bas bcd boot cat chdir check chmod chown cmp cp date db dbppt dc df dsw dtf du ed find for form hup lbppt ld ln ls mail mesg mkdir mkfs mount mv nm od pr rew rkd rkf rkl rm rmdir roff sdate sh stat strip su sum tap tm tty type un wc who write

Otros comandos

Referencias

  1. Bell Labs. The Creation of the UNIX* Operating System. (en inglés)
  2. Bell Labs. THE UNIX ORAL HISTORY PROJECT. Edited and Transcribed by Michael S. Mahoney. Princeton University. Princeton, New Jersey. (en inglés)
  3. Bell Labs. It still remains a phenomenon The Creation of the UNIX* Operating System. (en inglés)
  4. Bell Labs. Before Multics there was chaos, and afterwards, too The Creation of the UNIX* Operating System. (en inglés)
  5. Bell Labs. The famous PDP-7 comes to the rescue The Creation of the UNIX* Operating System. (en inglés)
  6. Dennis M. Ritchie (September 1979) The Evolution of the Unix Time-sharing System Bell Labs. 1996. Lucent Technologies Inc.(en inglés)
  7. Dennis M. Ritchie Thompson's Space Travel Game Bell Labs. 2001. Lucent Technologies Inc.(en inglés)
  8. Bell Labs. The UNIX system begins to take shape The Creation of the LINUX IS A YET* Operating System. (en inglés)
  9. Andrew S. Tanenbaum (20 May 2004) Some Notes on the "Who wrote Linux" Kerfuffle, Release 1.5 Departament of Computer Science, Vrije Universiteit, Amsterdam. (en inglés)
  10. Bell Labs. It looked like an operating system, almost The Creation of the UNIX* Operating System. (en inglés)
  11. Bell Labs. Porting UNIX for its first commercial application The Creation of the UNIX* Operating System. (en inglés)
  12. Dennis M. Ritchie Unix Programmer's Manual, First Edition (1971) Bell Labs. Lucent Technologies Inc.(en inglés)
  13. Bell Labs. From B language to NB to C The Creation of the UNIX* Operating System. (en inglés)
  14. a b Bell Labs. Sharing UNIX with the rest of the world The Creation of the UNIX* Operating System. (en inglés)
  15. a b c d e Bell Labs. Early versions of the UNIX* system The Creation of the UNIX* Operating System. (en inglés)
  16. a b Bell Labs. UNIX moves on The Creation of the UNIX* Operating System. (en inglés)
  17. Novell, Inc. Press Release (20 September 1995) HP, Novell and SCO To Deliver High-Volume UNIX OS With Advanced Network And Enterprise Services Novell, Inc. New York. (en inglés)

Véase también

Enlaces externos