27 febrero 2016

Historia de Unix

   
Historia del Sistema Operativo Unix
 
Los orígenes de Unix pueden rastrearse a finales de 1960, cuando 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),[] desarrollado para ejecutarse en una computadora central (mainframe) modelo GE-645. El objetivo del proyecto era desarrollar un 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[,] y escribió un juego llamado "Space Travel"[][](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 con ayuda de Dennis Ritchie; un físico estadounidense que colaboró en el desarrollo del sistema operativo Multics en los Laboratorios Bell y creó el lenguaje de programación C; escribió nuevamente el programa 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[.] A continuación se puede apreciar una antigua fotografía de los creadores originales del núcleo Unix, los programadores Ken Thompson y Dennis Ritchie:
Ken Thompson (izquierda) y Dennis Ritchie (derecha), creadores de UNIX
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 de "Uniplexed Information and Computing System", pues sólo prestaba servicios a dos usuarios. 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, se cambió el nombre a UNIX, dando origen al legado que llego hasta los días actuales.
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[] ejecutado en una PDP-11/20. Se incluía en él un programa para dar formato a textos (llamado "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 Thompson y Ritchie publicaron un manual de programación de UNIX. En 1972 se tomó la decisión de escribir nuevamente UNIX, pero esta vez en el lenguaje de programación C.[] Este cambio significaba que UNIX podría ser fácilmente modificado para funcionar en otras computadoras 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.[] Una de estas licencias fue otorgada al Departamento de Computación de la Universidad de California, con sede en Berkeley.[] 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[] 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,[] la última versión del UNIX original con amplia distribución, entró en circulación en 1979. Las versiones 8, 9 y 10[] 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, un nuevo sistema operativo portable y distribuido, diseñado para ser el sucesor de UNIX en investigación por los Laboratorios Bell.
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.[] 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.[] 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. También contaba con compatibilidad con las máquinas VAX de la compañía DEC.
A continuación se puede observar una imagen del aspecto de Unix a los finales de la década de 1980 utilizando X Windows System:
Unix a finales de 1980 utilizando X Windows System
En 1993, la compañía Novell adquirió la división Unix Systems Laboratories de AT&T junto con su propiedad intelectual.[] 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. 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. 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 núcleo Linux fue combinado con los programas desarrollados por el Proyecto GNU, dando como resultado el Sistema Operativo GNU/Linux. En 1995, Novell vendió su división UNIX comercial[] (es decir, la antigua "Unix Systems Laboratories") a Santa Cruz Operation (SCO) reservándose, aparentemente, algunos derechos de propiedad intelectual sobre el software.[] 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. A pesar de los problemas de la empresa debido a diversos pleitos legales, estos productos siguen siendo usando fuertemente a nivel mundial
A continuación se puede apreciar un diagrama que muestra como ha sido la evolución de Unix a lo largo de los años. A pesar de que el diagrama esta en ingles, se puede apreciar con facilidad los distintos caminos que ha tomado el desarrollo de este núcleo, ya sea de libre acceso o de uso privativo, en distintos sistemas operativos desde la fecha de creación de Unix hasta el 2008:
Diagrama de evolución del sistema operativo UNIX

UNIX en la actualidad

A pesar de que muchas de las funcionalidades de Unix son imitadas hoy en día por una gran cantidad de sistemas operativos, entre ellos las distribuciones de GNU/Linux. Se podría decir que las versiones más "puras" de este sistema operativo son las de UnixWare y SCO Open Server. Estas versiones de sistemas operativos no libres para PC son actualmente propiedad de SCO Group. Por lo que se conoce, en enero de 2003, SCO contrató a un abogado, anunciando que investigarían infracciones a su derecho de autor. El 7 de marzo, el jefe ejecutivo de SCO, Darl McBride, anunció que demandarían a IBM por sus contribuciones al código de Linux, alegando que IBM robó código de UNIX y se lo otorgó a los desarrolladores del núcleo de Linux.
En mayo de 2003, SCO Group dijo haber enviado cartas a 1.500 de las mayores corporaciones del mundo, incluyendo las compañías de Fortune 500, alegando que, de utilizar Linux, podrían estar infringiendo sus derechos de propiedad intelectual sobre el código original de UNIX. Como resultado SCO ha sido demandado por difamación por varias compañías, incluyendo IBM, la organización alemana LinuxTag, SuSE y Red Hat. El 18 de Agosto de 2007 se conoció por fin la sentencia de este pleito que llevaba en activo desde el año 2003. Finalmente el juez concluyo que:
-        El acuerdo que SCO tenía con Novell, el único derecho que otorgaba a SCO era el de vender licencias de Unix a terceros.
-        SCO tiene que pagar a Novell (SuSe) el 95% del importe de esas ventas, que principalmente fueron 16 millones de USD de Microsoft y 10 millones de USD de Sun.
El 14 de septiembre de 2007, debido a los contratiempos legales que sufrió la empresa, SCO solicitó protección invocando los términos del Cápitulo 11 del Código de Bancarrota de los Estados Unidos de América. El 25 de octubre de 2007, SCO (el ex-rey del Unix para PC) recibe una oferta de 36 millones de USD por parte de JGD Management por sus negocios y propiedad intelectual. Dándole un parcial fin a las nuevas versiones de Unix.
A pesar de todos estos contratiempos, las últimas versiones de estos sistemas operativos todavía se encuentran vigentes en algunos computadores. Por ejemplo, la versión 7.1.4 de UnixWare es compatible con muchas de las aplicaciones libres clásicas de Unix (Apache, Squid, entre otras). Mientras que el SCO OpenServer 6.0.0 MP2, todavía sigue siendo un software propietario de gran uso en el entorno comercial e industrial a nivel mundial.
Para hacerlo breve, actualmente UNIX puede referirse a 3 cosas:
• Familia UNIX: como un grupo genérico de sistemas operativos que comparten determinados criterios en su diseño y por lo tanto son llamados de la familia (o tipo) UNIX. Son más de 100 sistemas operativos que se consideran de su familia.
Sistema operativo UNIX: como una subfamilia de sistemas operativos que descienden de la primera versión creada por Bell. Esto significa que comparten códigos y propiedad intelectual.
• Marca UNIX: es decir, Unix como marca es propiedad de "The Open Group", organización de estandarización que permite el uso de dicha marca a cualquier sistema operativo que cumpla con sus estándares. Esto es independiente de si el sistema operativo en cuestión es de la familia UNIX o descendiente del original.
A continuación se puede ver una imagen de Solaris 10 de Sun Microsystems, uno de los sistemas parecidos a Unix más difundidos en el entorno empresarial en la actualidad debido a su gran estabilidad y rendimiento:

Familias de Unix

Como se puede deducir de la reseña histórica de este sistema operativo, 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. Las familias UNIX más significativas son:
 -        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 incorpora propiedad intelectual no originaria de AT&T, la primera implementación de los protocolos TCP/IP que dieron origen a Internet.
-        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 luego 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 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.
A continuación, se puede apreciar un diagrama que demuestra la colocación actual de Unix entre las distintas familias que se han desarrollado:
Diagrama de la división de familias que usan sistemas Unix o "parecidos" a Unix

Características generales de Unix / Ventajas

-        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.
-        Es un sistema operativo multiusuario, con capacidad de simular multiprocesamiento y procesamiento no interactivo.
-        Está escrito en un lenguaje de alto nivel: C.
-        El sistema de ficheros está basado en la idea de volúmenes, que se pueden montar y desmontar para lo que se les asigna un nodo del árbol como punto de anclaje. Un sistema físico puede dividirse en uno o más volúmenes.
-        Una de las grandes ideas de UNIX es la unificación y compatibilidad de todos los procesos de entrada y salida. Para UNIX, el universo es un sistema de ficheros. De esta forma existe compatibilidad entre ficheros, dispositivos, procesos, "pipes" y "sockets".
-        Dispone de un lenguaje de control programable llamado "Shell".
-        El sistema presenta comandos de usuario (es decir, a nivel de "Shell") para iniciar y manipular procesos concurrentes asíncronos. Un usuario puede ejecutar varios procesos, intercambiarlos e interconectarlos a través de "pipes" o "tuberías", simbolizados por un carácter especial. En DOS, también existe la idea del "pipe", sin embargo, al no existir concurrencia de procesos, no se trata de una comunicación en "tiempo real", sino de un paso de información a través de ficheros temporales.
-        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.
-        El núcleo de UNIX es relativamente compacto en comparación con otros sistemas de tiempo compartido. Introduce la idea de reducir el tamaño del "kernel" y ceder ciertas funciones a programas externos al núcleo llamados "demonios". Esto ha sido muy desarrollado y en la actualidad, la tendencia es el desarrollo de "micro-kernels", sin embargo UNIX, aunque pionero, es anterior a estos desarrollos.
-        Tiene capacidad de interconexión y comunicaciones de procesos.
-        Emplea un sistema jerárquico de archivos, con facilidades de protección de archivos, cuentas y procesos. En este sistema de ficheros jerárquico todo se encuentra anclado en la raíz. La mayoría de la literatura sobre el tema dice que el sistema de ficheros UNIX es un grafo acíclico, sin embargo, la realidad es que se trata de un grafo cíclico. El DOS, por ejemplo, es un árbol, con un directorio raíz del que cuelgan subdirectorios que a su vez son raíces de otros sub-árboles. Un grafo cíclico es como un árbol en el que se pueden enlazar nodos de niveles inferiores con un nivel superior. Es decir, se puede entrar en un subdirectorio y aparecer más cerca de la raíz de lo que se estaba.
-        Tiene facilidad para redireccionamiento de Entradas/Salidas.
-        Garantiza un alto grado de portabilidad.
-        UNIX realiza un riguroso control de acceso a ficheros. Cada uno se encuentra protegido por una secuencia de bits. Sólo se permite el acceso global al "root" o "superusuario". Por tanto, el universo de usuarios de UNIX se encuentra dividido en dos grupos principales, no sólo para el acceso a ficheros sino para todas las actividades: el "root", todopoderoso, para el que no hay barreras; y el resto de los usuarios, controlados por el S.O. según las directivas del "root".
-        UNIX es un S.O. de red, algo que a veces se confunde con un S.O. distribuido. Por ello, se ha incluido en su núcleo la arquitectura de protocolos de internet, TCP/IP.
2.3   Desventajas de Unix
Las desventajas del mismo pueden variar entre versiones, así como también por diversas condicionantes externas, tales como: el área de uso (personal, comercial o industrial), experticia del usuario, funcionalidad específica de las aplicaciones, entre otras. En general se podría decir que:
-        Desde el punto de vista comercial, no muchas personas lo conocen, ya que no es un sistema que venga precargado en cada PC que se compra. En otras palabras, no están popular como Windows o incluso como Linux, y por tanto, es difícil encontrar los programas que se acostumbran a usar en esos otros sistemas operativos.
-        Desde el punto de vista de funcionalidad, el S.O. Unix vienen en muchas variantes como se sabe, sin embargo, el detalle es que hay variantes que están diseñadas para ser ejecutada en equipos especiales fabricados por una marca especifica, como IBM, SUN, HP, DELL, entre otras. Lo que limita un tanto la portabilidad de UNIX
-        En cuanto a la confiabilidad, UNIX fue desarrollado desde sus inicios para ser más estable que cualquier otro sistema operativo, es decir, que cuando se usa UNIX no es tan común ver ciertas pantallas de errores que salen en los otros S.O, aunque si se podrán dar casos en que hay computadores con sistemas UNIX en desuso, pero será por problemas de Hardware o de algún otro programa que trabaje mal.
-        A pesar de ser tan estable y no "caerse" prácticamente nunca, resulta ser muy costoso en el sentido de mantenimiento y administración. Es decir, que por ejemplo, hay empresas que pierden más dinero con un equipo fuera de línea que pagando a un administrador del sistema (que cobra mucho por su trabajo a razón de que no muchas personas conocen UNIX).
-         El S.O UNIX puede requerir más horas de aprendizaje que el resto de las otras plataformas de sistemas operativos.
-        Como ya se menciono antes, los problemas suelen ser más difíciles de resolver dado el poco apoyo y soporte que hay en el mercado y, normalmente, el soporte del fabricante es muy costoso.
-        Se utiliza un lenguaje de programación muy avanzado: C, aunque en algunos casos permite Fortran y Java.

Generalidades de Unix

En general UNIX mantiene una serie de procesos en funcionamiento durante todo el tiempo que este en funcionamiento. Todos los procesos en UNIX están identificados por un número, el PID, que es único. Si un proceso acaba y vuelve a empezar, su nuevo PID nunca coincidirá con el anterior. La lista y el estado de funcionamiento de los procesos (consumo de recursos, etc.) es fácilmente visualizable mediante el comando "top".
Aunque desde los años de popularización del sistema Apple Macintosh (1983, en adelante) las interfaces gráficas de usuario se han ido extendiendo más y más, UNIX es más típicamente manejado desde interfaces de tipo CLI ("Command Line Interface"), en las que los comandos se lanzan desde el "Shell". Hay una decena de "shells" populares en UNIX, desde el antiguo pero universal "Bourne Shell" (sh) hasta el sofisticado "Bash Shell". A continuación se puede ver la imagen de ejemplo de una sesión de Bash, tomada en Gentoo Linux:

Imagen de una sesión de Bash

El uso de interfaces gráficas con UNIX es tan fácil como con cualquier otra plataforma. Sin embargo la flexibilidad de interconexión entre los datos de entrada y salida de las aplicaciones no es fácil de representar en aquéllos, y es este precisamente uno de los aspectos más importante para los programadores de sistema ya que permite construir comandos combinados potentes muy rápidamente a los expertos. UNIX ideó el sistema de almacenamiento en estructuras jerárquicas que hoy es tan popular en todos los sistemas: los directorios y subdirectorios.

Kernel o núcleo del sistema

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 partes 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 el disco magnético. 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. A partir de ese momento la terminal queda disponible para atender a un nuevo usuario.

Línea de comandos, consola o "shell" del sistema

Es un programa informático que actúa como interfaz de usuario para comunicar al usuario con el sistema operativo mediante una ventana que espera ordenes escritas por el usuario en el teclado; los interpreta y los entrega al sistema operativo para su ejecución. La respuesta del sistema operativo es mostrada al usuario en la misma ventana. A continuación, el programa "shell" queda esperando más instrucciones. Se interactúa con la información de la manera más sencilla posible, sin gráficas, solo el texto crudo.
Dada la importancia de esta herramienta, existe ya desde los comienzos de la computación. Existen para diversos sistemas operativos, diversos hardwares, con diferente funcionalidad. Suelen incorporar características tales como control de procesos, redirección de entrada/salida, listado y lectura de ficheros, protección, comunicaciones y un lenguaje de órdenes para escribir programas por lotes o (scripts o guiones). Su contraparte es la interfaz gráfica de usuario que ofrece una estética mejorada a costa de mayor consumo de recursos computacionales, una mayor vulnerabilidad por complejidad y, en general, una reducción en la funcionalidad ofrecida.
En su forma más simple, una CLI ("Command Line Interface")es una ventana que muestra un "prompt", señalizando su disposición a recibir mandatos, el usuario teclea una orden en el teclado e ingresa la orden normalmente con la tecla "Intro/Enter".
Las órdenes dadas a la CLI son con frecuencia de la forma:
PROMPT>comando_haz_algo [opciones]  [a_estos_ficheros]
Al ingresar el mandato con "Intro", un programa interpretador de mandatos analiza la secuencia de caracteres ingresada y, si la sintaxis del mandato es correcta, ejecuta el mandato recurriendo para ello a las funciones que ofrece el sistema operativo o el programa que representa, un gestor de banco de datos, una sesión de FTP, etc. La respuesta al usuario es escrita en el monitor. Esta forma de trabajo es interactiva, es decir, usuario y máquina se comunican en forma sucesiva.
Pero no solo se puede trabajar interactivamente con el CLI, también es posible usar scripts ó guión, es decir, archivos conteniendo instrucciones guardadas como si se estuviesen escribiendo en el momento. De esta forma, la línea de comandos puede utilizarse sin siquiera tener que lidiar con lo primitivo del método ni estando presente frente al monitor o teclado. Comparada con un ambiente gráfico la CLI consume menos recursos del CPU y de la tarjeta gráfica, es más rápida y más fácil de utilizar a través de una red de computadores.
A continuación se puede observar una imagen que describe la forma como los usuarios interactúan con el sistema utilizando la CLI:
Interacción con la CLI ("Command Line Interface")

Sistema de archivos de Unix: "File System"

La tercera parte que define el sistema operativo UNIX es la estructura de su sistema de ficheros. Un sistema de ficheros es la forma que tiene el sistema operativo de organizar los datos en una estructura o colección de ficheros. UNIX considera como ficheros no sólo a los ficheros normales (en los que se guardan datos, programas, etc.) sino también a los directorios y los dispositivos conectados al sistema.
El sistema de ficheros en UNIX está organizado en una estructura jerárquica de directorios que comienza en el directorio "root" representado por "/."  Los directorios que cuelgan de "root" pueden variar dependiendo del sistema, aunque los mostrados en el árbol a continuación, sí son comunes a todos los sistemas UNIX.
·       /bin - contiene comandos y utilidades, son ficheros ejecutables.
·       /dev - contiene los ficheros que representan a los dispositivos conectados al sistema.
·       /etc - contiene comandos y ficheros usados en la administración del sistema.
·       /home - contiene los ficheros "home" de cada usuario del sistema.
·       /lib - contiene librerías utilizadas por diferentes programas y lenguajes.
·       /tmp - es el directorio donde se guardan los ficheros temporales.
·       /usr - contiene ficheros del sistema que son comunes a los usuarios como programas o documentación.
Los ficheros pueden clasificarse dentro de las siguientes categorías:
·       Ficheros normales
·       Directorios
·       Ficheros especiales
·       "Pipes" o "tuberías"
Los ficheros normales pueden tener contenidos muy diferentes, por ejemplo, texto, imágenes, ejecutables, etc. Todos los ficheros tienen un propietario, aquellos creados por los usuarios dentro de su propia cuenta y cada propietario es el que puede controlar los permisos de acceso a ese fichero.
Los directorios son ficheros que contienen referencias a otros ficheros. Aunque todos los ficheros se encuentran dentro de algún directorio, no residen realmente dentro de él. El directorio mantiene dos informaciones básicas sobre cada fichero contenido en él: el nombre y un número llamado "inode number" que es un puntero que le indica al sistema donde encontrar toda la información que necesita del fichero, además de almacenar otra información básica como pertenencia, modo de acceso y tipo de archivo. A la correspondencia entre el nombre de un fichero y el "inode number" se le denomina "link". Un mismo "inode number" puede tener asociados varios nombres y se puede referir al fichero por cada uno de estos nombres.
Los dispositivos especiales son ficheros que representan dispositivos físicos como impresoras, dispositivos magnéticos, el ratón, etc. Se encuentran dentro del directorio /dev. Los "pipes" o "tuberías" son los que permiten enlazar la salida de un comando a la entrada de otro, esto se hace a través de la creación de un fichero temporal donde se guarda la salida del primer programa hasta que es leído por el segundo.
A continuación se puede observar un diagrama en donde se representa la interfaz para realizar llamadas al sistema en el sistema operativo Unix:

Unix
Diagrama de interfaz de llamadas al sistema

1 comentario:

Anónimo dijo...

jajajajjajajajjaaj