Unix se trata de un sistema operativo de los mas utilizados y con mas futuro debido a que son muchos
organismos oficiales y particulares los que defienden su utilización, así como muchas
firmas de fabricación y comercialización de computadoras que lo incorporan en sus productos. Podemos citar el ejemplo de la Comunidad Económica Europea, que impone el sistema operativo UNIX en todas las aplicaciones
que se desarrollan bajo sus auspicios.
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. Además es un sistema multiusuario, en el
que existe la portabilidad para la implementación de distintas computadoras.
Esta formado por una serie de elementos que pueden representarse
en forma de capas concéntricas donde, en primer lugar, alrededor del hardware, aislando a este de los usuarios,
además de adaptar el resto del sistema operativo a la maquina debido a la
portabilidad que existe en el mismo.
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.
Posee las siguientes características:
- Es un sistema operativo multiusuario, con capacidad de simular
multiprocesamiento y procesamiento no interactivo.
- Ofrece facilidades para la creación de programas y sistemas y el ambiente adecuado para las tareas de diseños de software.
- 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 suspensión de
las tareas de los usuarios.
La comunicación con el sistema UNIX se da mediante un programa de control llamado SHELL. Este es un lenguaje de control, un
intérprete, y un lenguaje de programación, cuyas características lo hacen
sumamente flexible para las tareas de un centro de cómputo.
- Ofrece las estructuras de control normales: secuenciación, iteración condicional, selección y otras.
- Paso de parámetros.
- 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í.
Unix es uno de los sistemas operativos más ampliamente usados en
computadoras que varían desde las personales hasta las macro. Existen versiones
para máquinas uniprocesador hasta multiprocesadores.
Debido a su historia,
que evoluciona en los Laboratorios Bell de AT&T con un simulador de un
viaje espacial en el sistema solar, pasando por su expansión en
universidades y la creación de las versiones más importantes que son la de la Universidad de Berkeley y el Sistema V de la misma AT&T.
Estandarización de UNIX
Debido a las múltiples versiones en el mercado de UNIX, se comenzaron a publicar estándares para
que todas las s versiones fuesen 'compatibles'. La primera de ellas la lanzó
AT&T llamada SVID (System V Interface Definition) que definiría cómo
deberían ser las llamadas al sistema, el formato de los archivos y muchas cosas más, pero la otra versión importante, la de Bekeley
(Berkeley Software Distribution o BSD) simplemente la ignoró.
Después la IEEE usó un algoritmo consistente en revisar las llamadas al sistema de ambas versiones
(System V y BSD) y aquellas que eran iguales las definió como estándares
surgiendo así la definición 'Portable Operating System for UNIX' o POSIX, que
tuvo buen éxito y que varios fabricantes
adoptaron rápidamente.
El estándar de POSIX se llama 1003.1 Posteriormente los institutos
ANSI e ISO se interesaron en
estandarizar el lenguaje 'C' y conjuntamente se publicaron definiciones estándares para
otras áreas del sistema operativo como la interconectividad, el intérprete de comandos y otras. En la tabla 8.1 se muestran las definiciones de POSIX.
Estándar Descripción
·
1003.1 Llamadas al sistema.
·
1003.2 Intérprete y comandos.
·
1003.6 Extensiones para la seguridad
·
1003.8 Acceso transparente a archivos.
·
1003.9 Lenguaje Fortran.
·
1003.10 Supercómputo.
Al momento del auge de los estándares de POSIX desgraciadamente se
formó un grupo de fabricantes de computadoras (IBM, DEC y Hewlett-Packard) que lanzaron su propia versión de
UNIX llamada OSF/1 (de Open Software Fundation).
Lo bueno fue que su versión tenía como objetivo cumplir con todas los estándares del IEEE, además de un sistema de
ventanas (el X11), una interfaz amigable para los usuarios (MOTIF) y las
definiciones para cómputo distribuido (DCE) y administración distribuida (DME).
La idea de ofrecer una interfaz amigable en UNIX no fue original
de OSF, ya en la versión 3.5 de SunOS de Sun Microsystems se ofrecía una
interfaz amigable y un conjunto de librerías para crear aplicaciones con
interfaz gráfica técnicamente eficiente y poderosa llamada SunWindows o
SunVIEW.
Esta interfaz junto con sus librerías estaban evolucionando desde
la versión para máquinas aisladas hacia una versión en red, donde las aplicaciones podían estarse
ejecutando en un nodo de la red y los resultados gráficos verlos en otro nodo de la red, pero Sun tardó tanto en liberarlo
que le dio tiempo al MIT de lanzar el X11 y ganarle en popularidad.
AT&T formó, junto con Sun Microsystems y otras compañías UNIX
International y su versión de UNIX, provocando así que ahora se manejen esas
dos corrientes principales en UNIX.
Filosofía de UNIX
Las ideas principales de UNIX fueron derivadas del proyecto MULTICS (Multiplexed Information and Computing Service) del MIT y
de General Electric. Estas ideas son:
·
Todo se maneja como cadena de bytes: Los dispositivos periféricos, los archivos y los comandos
pueden verse como secuencias de bytes o como entes que las producen. Por
ejemplo, para usar una terminal en UNIX se hace a través de un archivo (generalmente
en el directorio /dev y con nombre ttyX).
·
Manejo de tres descriptores estándares: Todo comando posee tres
descriptores por omisión llamados 'stdin', 'stdout' y 'stderr', los cuales son
los lugares de donde se leen los datos de trabajo, donde se envían los resultados y en
donde se envían los errores, respectivamente. El 'stdin' es el teclado, el 'stdout' y el 'stderr' son la
pantalla por omisión (default).
·
Capacidades de 'entubar' y 'redireccionar': El 'stdin', 'stdout' y
el 'stderr' pueden usarse para cambiar el lugar de donde se leen los datos,
donde se envían los resultados y donde se envían los errores, respectivamente.
A nivel comandos, el símbolo de 'mayor que' (>) sirve para enviar los
resultados de un comando a un archivo. Por ejemplo, en UNIX el comando 'ls'
lista los archivos del directorio actual (es lo mismo que 'dir' en DOS). Si en
vez de ver los nombres de archivos en la pantalla se quieren guardar en el
archivo 'listado', el redireccionamiento es útil y el comando para hacer la
tarea anterior es 'ls > listado'. Si lo que se desea es enviar a imprimir
esos nombres, el 'entubamiento' es útil y el comando sería 'ls | lpr', donde el
símbolo "|" ( pipe) es el entubamiento y 'lpr' es el comando para
imprimir en UNIX BSD.
·
Crear sistemas grandes
a partir de módulos: Cada instrucción en UNIX está diseñada para poderse usar
con 'pipes' o 'redireccionamiento', de manera que se pueden crear sistemas complejos
a través del uso de comandos simples y elegantes. Un ejemplo sencillo de esto
es el siguiente. Suponga que se tienen cuatro comandos separados A,B,C y D
cuyas funcionalidades son:
·
o B: recibe matrices, las invierte
y arroja el resultado en forma matricial.
Como se ve, cada módulo hace una actividad específica, si lo que
se quiere es un pequeño sistema que lea un sistema de ecuaciones y como resultado se tenga un listado 'bonito', simplemente se usa
el entubamiento para leer con el módulo A la matriz, que su resultado lo reciba
el B para obtener la solución, luego esa solución la reciba el módulo C para
que le ponga los encabezados 'bonitos' y finalmente eso lo tome el módulo D y
lo imprima, el comando completo sería ' A | B | C | D '.
El sistema de archivos de UNIX, desde el punto de vista del
usuario, tiene una organización jerárquica o de árbol invertido que parte de una raíz conocida
como "/" (diagonal).
Es una diagonal al revés que la usada en DOS. Internamente se usa
un sistema de direccionamiento de archivos de varios niveles, cuya estructura más primitiva se le llama 'information node' (i-node) cuya
explicación va más allá de este trabajo.
El sistema de archivos de UNIX ofreceun poderoso conjunto de
comandos y llamadas al sistema. En la tabla 8.2 se muestran los comandos más
útiles para el manejo de archivos en UNIX vs. VMS.
La protección de archivos en UNIX se maneja por medio de una
cadena de permisos de nueve caracteres. Los nueve caracteres se dividen en tres grupos de tres caracteres cada uno.
El primer grupo (1) especifica los permisos del dueño del archivo.
El segundo grupo especifica los permisos para aquellos usuarios que pertenecen
al mismo grupo de trabajo que el dueño y finalmente el tercer grupo indica los
permisos para el resto del mundo.
En cada grupo de tres caracteres pueden aparecer las letras RWX en
ese orden indicando permiso de leer (READ), escribir (WRITE) y ejecutar
(EXECUTE). Por ejemplo, la cadena completa RWXR-XR-- indica que el dueño tiene
los tres permisos (READ,,WRITE,EXECUTE), los miembros de su grupo de trabajo
tienen permisos de leer y ejecutar (READ,EXECUTE) y el resto del mundo sólo
tienen permiso de leer (READ).
Las llamadas al sistema más útiles en UNIX son 'open', 'close' e
'ioctl'. Sirven para abrir, cerrar archivos; y establecer las características
de trabajo.
Por ejemplo, ya que en UNIX las terminales se accesan a través de
archivos especiales, el 'ioctl' (input output control) sirve para establecer la velocidad, paridad, etc; de la terminal.
El núcleo de UNIX (kernel) se clasifica como de tipo monolítico,
pero en él se pueden encontrar dos partes principales [Tan92] el núcleo
dependiente de la máquina y el núcleo independiente.
El núcleo dependiente se encarga de las interrupciones, los
manejadores de dispositivos de bajo nivel (lower half) y parte del manejo de la memoria.
El núcleo independiente es igual en todas las plataformas e
incluye el manejo de llamadas del sistema, la planificación de procesos, el entubamiento, el manejo de
centinelas, la paginación e intercambio, el manejo de discos y del sistema de archivos.
El manejo de procesos en UNIX es por prioridad y round robin. En
algunas versiones se maneja también un ajuste dinámico de la prioridad de
acuerdo al tiempo que los procesos han esperado y al tiempo que ya han usado el CPU.
El sistema provee facilidades para crear 'pipes' entre procesos,
contabilizar el uso de CPU por proceso y una pila común para todos los procesos cuando necesitan estarse
ejecutando en modo privilegiado (cuando hicieron una llamada al sistema). UNIX
permite que un proceso haga una copia de sí mismo por medio de la llamada
'fork', lo cual es muy útil cuando se realizan trabajos paralelos o
concurrentes; también se proveen facilidades para el envío de mensajes entre
procesos.
Recientemente Sun Microsystems, AT&T, IBM, Hewlett Packard y
otros fabricantes de computadoras llegaron a un acuerdo para usar un paquete
llamado ToolTalk para crear aplicaciones que usen un mismo método de intercambio de mensajes.
Los primeros sistema con UNIX nacieron en máquinas cuyo espacio de
direcciones era muy pequeño (por ejemplo 64 kilobytes) y tenían un manejo de
memoria real algo complejo. Actualmente todos los sistemas UNIX utilizan el
manejo de memoria virtual siendo el esquema más usado la paginación por demanda y combinación de segmentos paginados, en ambos casos con páginas
de tamaño fijo.
En todos los sistemas UNIX se usa una partición de disco duro para el área de intercambio. Esa área se reserva al tiempo de
instalación del sistema operativo. Una regla muy difundida entre
administradores de sistemas es asignar una partición de disco duro que sea al
menos el doble de la cantidad de memoria real de la computadora.
Con esta regla se permite que se puedan intercambiar flexiblemente
todos los procesos que estén en memoria RAM en un momento dado por otros que estén en el disco. Todos los
procesos que forman parte del kernel no pueden ser intercambiados a disco.
Algunos sistemas operativos (como SunOS) permiten incrementar el espacio de
intercambio incluso mientras el sistema está en uso (en el caso de SunOS con el
comando 'swapon').
También es muy importante que al momento de decidirse por un
sistema operativo se pregunte por esa facilidad de incrementar el espacio de
intercambio, así como la facilidad de añadir módulos de memoria RAM a la computadora sin necesidad de reconfigurar el núcleo.
Derivado de la filosofía de manejar todo como flujo de bytes, los dispositivos son
considerados como archivos que se accesan mediante descriptores de archivos
cuyos nombres se encuentran generalmente en el directorio '/dev'. Cada proceso
en UNIX mantiene una tabla de archivos abiertos (donde el archivo puede ser
cualquier dispositivo de entrada/salida).
Esa tabla tiene entradas que corresponden a los descriptores, los
cuales son números enteros [Deitel93] obtenidos por medio de la llamada a la
llamada del sistema 'open'.
Llamadas al sistema de entrada/salida
En UNIX es posible ejecutar llamadas al sistema de entrada/salida
de dos formas: sincronía y asíncrona. El modo síncrono es el modo normal de
trabajo y consiste en hacer peticiones de lectura o escritura que hacen que el originador tenga que esperar a que el sistema le
responda, es decir, que le de los datos deseados.
A veces se requiere que un mismo proceso sea capaz de supervisar el estado de varios dispositivos y tomar ciertas decisiones dependiendo de
si existen datos o no. En este caso se requiere una forma de trabajo asíncrona.
Para este tipo de situaciones existen las llamadas a las rutinas 'select' y
'poll' que permiten saber el estado de un conjunto de descriptores.
No hay comentarios:
Publicar un comentario