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
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:
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
- 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.
- 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.
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.
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.
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")
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:
Diagrama de interfaz de llamadas al
sistema