SISTEMAS
OPERATIVOS
Introducción:
Un sistema
operativo es un programa que actua como intermediario entre el usuario de una
computadora y el hardware. El propósito de un sistema operativo es proveer un
entorno en el cual el usuario pueda ejecutar programas. El principal objetivo
es hacer un sistema que convenga usar, el objetivo secundario es usar el
hardware de una computadora de manera eficiente.
¿Qué es un
sistema operativo?
Un sistema
operativo es una parte importante de un sistema de computación. Un sistema de
computación se puede dividir en cuatro componentes: el hardware, el sistema
operativo, los programas de aplicación y los usuarios.
El harware
(unidad central de proceso, memoria y dispositivos de entrada/salida) provee
los recursos de computación básicos. Los programas de aplicación (como
compiladores, bases de datos, juegos y demás programas) definen la forma en la
que estos recursos se utilizan para resolver los problemas de los usuarios.
Puede haber muchos usuario (personas, otras computadoras, máquinas) intentando
resolver diferentes problemas. Por lo tanto, puede haber varios programas de
aplicación. El sistema operativo controla y coordina el uso del hardware para
los diferentes programas de aplicación que utilizan los diferentes usuarios.
Un sistema
operativo no realiza una función útil en si, sino provee un entorno en el cual
los demás programas pueden realizar su trabajo.
Podemos ver a
un sistema operativo como un contenedor de recursos. Un sistema de computación
tiene muchos recursos (hardware y software) que se pueden solicitar para
resolver un problema: tiempo de CPU, espacio de memoria, dispositivos de
entrada/salida, etc. El sistema operativo actúa como administrador de estos
recursos y asigna los mismos a los distintos programas y usuarios para que
puedan cumplir su tarea. Algunas veces se producen conflictos al solicitar los
recursos, el sistema operativo debe decidir que solicitud es mas importante y
asignar el recurso a ésta.
Desde un punto
de vista distinto el sistema operativo debe controlar los dispositivos de
entrada/salida y los programas de los usuarios. Por lo que podemos decir que es
un programa de control. Un programa de control controla la ejecución de
los programas de usuarios para prevenir errores y uso inapropiado de la
computadora.
Sin embargo, en
general, esta definición no se adecua a un sistema operativo. El objetivo
principal de los sistemas de computación es ejecutar programas de usuario y
resolver los problemas en forma fácil.
El principal
objetivo de un sistema operativo es que sea conveniente para el usuario
. Los sistemas operativos existen porque se supone que hacen fácil el uso de
una computadora. Este punto de vista es claro cuando se observa sobre
computadoras personales (PC).
Un objetivo
secundario es la operación eficiente de un sistema de computación. Este
objetivo es muy importante en sistemas grandes y sistemas multiusuarios, ya que
estos son muy caros y se desea que trabajen de la forma mas eficiente que sea
posible.
Los primeros
sistemas
Las primeras
computadoras eran enormes máquinas que se ejecutaban desde una consola. El
programador, quien además operaba el sistema de computación, debía escribir un
programa, y operarlo directamente desde la consola. Primero, el programa debía
ser cargado manualmente en la memoria, desde un panel (una instrucción a la
vez), desde una cinta de papel o desde tarjetas perforadas. Luego, se
presionaba un botón para que comience la ejecución del programa. Mientras el
programa corría el operador monitoreaba su ejecución. Si se producía un error,
el programador detenía el programa, examinaba el contenido de la memoria y de
los registros, y depuraba el programa directamente desde la consola. La salida
se imprimía, o se enviaba a cintas de papel o tarjetas perforadas para luego
imprimirlas.
Con el tiempo,
se desarrolló software y hardware adicional. Lectores de tarjetas, impresoras
de línea y cintas magnéticas trajeron mas comodidad. Programas ensambladores,
cargadores e intérpretes se diseñaron para facilitarle la tarea al programador.
Se crearon librerías con programas comunes que podían ser utilizadas por otros
programas sin tener que ser escritas nuevamente.
Cada dispositivo
tiene sus propias características que requieren su programación. Se escribieron
subrutinas para cada uno de los dispositivos, las que se llamaron devices
drivers. Un device driver sabe como usar los buffers, flags, registros,
bits de control y bits de estado de cada dispositivo. Cada dispositivo tiene su
propio driver. Una tarea simple como leer un carácter de una cinta de papel,
implica una secuencia compleja de operaciones de un dispositivo específico.
Para no tener que escribir esa secuencia de operaciones cada vez que se
necesita hacer operación, se crearon los drivers y se utilizaron como
librerías.
Luego, se
desarrollaron compiladores como FORTRAN, COBOL y otros lenguajes, convirtiendo
la tarea de programación en algo mas fácil, pero la operación de la
computadoras un poco mas dificil. Para preparar un programa en FORTRAN para su
ejecución, el programador debía primero cargar el FORTRAN en la computadora,
montar el driver que realiza las operaciones sobre la cinta magnética y luego
cargar el programa de otra cinta. El compilador FORTRAN produce salidas en
código ensamblado (Assembler - codificado), el cual necesita ser interpretado
por el usuario. Este paso requiere que se cargue otra cinta con el intérprete
necesario para leer el código Assembler. Finalmente el código se enlaza a una
librería, llamada código objeto. Por último el programa objeto se ejecuta. Este
se puede cargar en la memoria y ser depurado desde la consola como antes.
Es notable
destacar la cantidad de tiempo de configuración necesaria para ejecutar
un trabajo. Si se detecta un error ocurre en alguna parte del programa, se
debía corregir y comenzar todos los pasos de nuevo.
Tipos de
sistemas operativos:
1. Sistemas por
lotes simples
Monitor
residente
El tiempo de
configuración de un trabajo fue realmente un problema. Mientras las cintas eran
cargadas o los programadores operaban la consola, la CPU permanecía ociosa.
Las tareas
ahora se encontraban separadas, el programador ya no operaba la máquina. Tan pronto
un trabajo terminaba, el operador podía ejecutar el siguiente. El operador
tenía mas experiencia en cargar cintas que el programador, por lo que el tiempo
de configuración se redujo considerablemente. Por supuesto, el operador no
podía depurar un programa incorrecto. En este caso, cuando el programa
ejecutaba un error, éste era volcado en memoria y el programador lo depuraba
desde alli. El vuelco a memoria, permitían que el operador continuara
inmediatamente con el siguiente trabajo.
Por otro lado,
los trabajos con necesidades similares eran procesados juntos (en forma de
lote) y se ejecutaban en la computadora en grupo. Por ejemplo, supongamos que
el operador recibe un programa en FORTRAN, uno en COBOL y otro en FORTRAN. Si
se ejecutan los programas en ese orden, primero se tiene que configurar para
que trabaje en FORTRAN, luego se debe configurara la computadora para que
trabaje en COBOL y luego configurarla nuevamente para que trabaje en FORTRAN.
En cambio, si se cambia el orden y los dos trabajos en FORTRAN se agrupan en un
lote, primero se ejecutan éstos y luego el programa en COBOL, reduciendo
considerablemente el tiempo de operación.
Pero aún
existía un problema, cuando un programa detenía su ejecución (terminación
normal o anormal), el operador tenía que darse cuenta observando la consola,
determinar por qué se había detenido el programa, realizar un volcado a memoria
si era necesario, cargar la lectora de cintas con el siguiente trabajo y poner
de nuevo en marcha la computadora. Durante esta transición la CPU permanecía
inactiva. Para eliminar el tiempo de inactividad se introdujo el
secuenciamiento automático de trabajos y con el se crearon los primeros y
rudimentarios sistemas operativos. Lo que se deseaba era un procedimiento para
la transferencia automática del control de un trabajo al siguiente. Con este
propósito se creo un pequeño programa llamado Monitor Residente. Este
programa se encuentra siempre en memoria.
Al iniciar la
computadora el monitor residente se cargaba y controlaba la misma, transfiriendo
el control a cada programa. Cuando el programa se colgaba, el monitor residente
tomaba nuevamente el control y continuaba con el siguiente programa. Asi el
monitor residente secuenciaba automáticamente un programa tras otro.
Para que el
monitor residente supiera que programas tenía que ejecutar se le indicaba una
breve descripción de que programas tenía que ejecutar y con qué datos. Esta
información era suministrada por el operador a través de tarjetas de control.
Además del programa o datos de un trabajo se incluían tarjetas especiales que
eran directivas para el monitor residente, indicándole que programa debía
ejecutar, en que orden y con que datos.
El problema
era, como se determinaba que tarjetas eran de datos o programas y cuales de
control, el problema se solucionó identificándoles con un carácter especial o
un patrón sobre la tarjeta.
Por lo tanto es
monitor residente realizaba el secuenciamiento automático de trabajos según le
indicaban las tarjetas de control.
Sin embargo,
incluso con este método, la CPU permanecía a menudo inactiva. El problema
reside en que la velocidad de los dispositivos mecánicos de E/S es inferior a
la de los dispositivos electrónicos. La diferencia de velocidad entre la CPU y
los dispositivos de E/S puede ser de tres órdenes de magnitud.
El problema es
que mientras los dispositivos de E/S trabajan la CPU permanece inactiva,
esperando que la operación de E/S termine; y mientras la CPU ejecuta, los
dispositivos de E/S permanecen inactivos.
Operación
off-line
Una solución
fue reemplazar las lentas lectoras de tarjetas por unidades de cintas
magnéticas; en lugar de hacer que la CPU leyera directamente las tarjetas,
estas se copiaban primero en una cinta magnética. Cuando un programa necesitaba
la entrada de una tarjeta se leía de la cinta. Las lectoras de tarjetas eran
operadas off-line, no por la computadora principal.
Se usaron dos
enfoques del procesamiento off-line. Se desarrollaron dispositivos
especializados con salida/entrada directa de cinta magnética. El otro enfoque
consistía en dedicar una computadora pequeña a la tarea de copiar desde o en
una cinta.
La principal
ventaja era que los dispositivos de cinta eran mucho mas rápido que lectoras de
tarjetas, por lo tanto la CPU permanecía menos tiempo inactiva.
Para realizar
este proceso en el monitor residente se modificaba el código que identificaba a
la lectora de tarjetas por uno que indicara que se debían leer de la cinta
magnética, por lo que el programa de aplicación no sufría ninguna modificación.
La capacidad de ejecutar un programa con independencia del dispositivo de E/S
se llama independencia de dispositivos. Esto se logra haciendo que el
sistema operativo determine que dispositivos utilizará un programa cuando
necesite E/S. Los programas se escriben para usar dispositivos de E/S lógicos.
Buffering (uso
de memoria intermedia)
El buffering
trata de mantener ocupados tanto la CPU como los dispositivos de E/S. La idea
es sencilla, los datos se leen y se almacenan en un buffer, una vez que los
datos se han leido y la CPU va a iniciar inmediatamente la operación con ellos,
el dispositivo de entrada es instruido para iniciar inmediatamente la siguiente
lectura. La CPU y el dispositivo de entrada permanecen ocupados. Cuando la CPU
esté libre para el siguiente grupo de datos, el dispositivo de entrada habrá
terminado de leerlos. La CPU podrá empezar el proceso de los últimos datos
leídos, mientras el dispositivo de entrada iniciará la lectura de los datos
siguientes.
Para la salida,
el proceso es análogo. En este caso los datos de salida se descargan en otro
buffer hasta que el dispositivo de salida pueda procesarlos.
Este sistema
soluciona en forma parcial el problema de mantener ocupados todo el tiempo la
CPU y los dispositivos de E/S. Ya que todo depende del tamaño del buffer y de
la velocidad de procesamiento tanto de la CPU como de los dispositivos de E/S.
El manejo de
buffer es complicado. Uno de los principales problemas reside en determinar tan
pronto como sea posible que un dispositivo de E/S a finalizado una operación.
Este problema se resuelve mediante las interrupciones. Tan pronto como
un dispositivo de E/S acaba con una operación interrumpe a la CPU, en ese
momento la CPU detiene lo que está haciendo e inmediatamente transfiere el
control a una posición determinada. Normalmente las instrucciones que existen
en esta posición corresponden a una rutina de servicio de interrupciones. La
rutina de servicio de interrupción comprueba si el buffer no está lleno o no está
vacío y entonces inicia la siguiente petición de E/S. La CPU puede continuar
entonces el proceso interrumpido.
Cada diseño de
computadora tiene su propio mecanismo de interrupción, pero hay varias
funciones comunes que todos contemplan.
El buffering
puede ser de gran ayuda pero pocas veces es suficiente.
Spooling
El problema con
los sistemas de cintas es que una lectora de tarjetas no podía escribir sobre
un extremo mientras la CPU leía el otro. Los sistemas de disco eliminaron esa
dificultad, moviendo la cabeza de un área del disco a otra.
En un sistema
de discos, las tarjetas se leen directamente desde la lectora sobre el disco.
La posición de las imágenes de las tarjetas se registran en una tabla mantenida
por el sistema operativo. En la tabla se anota cada trabajo una vez leído.
Cuando se ejecuta un trabajo sus peticiones de entrada desde la tarjeta se
satisfacen leyendo el disco. Cuando el trabajo solicita la salida, ésta se
copia en el buffer del sistema y se escribe en el disco. Cuando la tarea se ha
completado se escribe en la salida realmente.
Esta forma de
procesamiento se denomina spooling, utiliza el disco como un buffer muy
grande para leer tan por delante como sea posible de los dispositivos de
entrada y para almacenar los ficheros hasta que los dispositivos de salida sean
capaces de aceptarlos.
La ventaja
sobre el buffering es que el spooling solapa la E/S de un trabajo con la
computación de otro. Es una característica utilizada en la mayoría de los
sistemas operativos.
Afecta
directamente a las prestaciones. Por el costo de algo de espacio en disco y
algunas tablas, la CPU puede simultanear la computacion de un trabajo con la
E/S de otros. De esta manera, puede mantener tanto a la CPU como a los
dispositivos de E/S trabajando con un rendimiento mucho mayor.
Además mantiene
una estructura de datos llama job spooling, que hace que los trabajos ya leidos
permanezcan en el disco y el sistema operativo puede seleccionar cual ejecutar,
por lo tanto se hace posible la planificación de trabajos.
2.
Multiprogramación
Es un método
para incrementar el empleo de la CPU disponiendo en todo momento de algo que la
CPU pueda ejecutar.
El proceso es
el siguiente, cuando un trabajo deja libre la CPU para realizar una E/S, el
sistema operativo cambia a otro trabajo y lo ejecuta. Cuando este último deba
esperar por una E/S, la CPU pasará a otro trabajo y asi sucesivamente.
Un sistema
operativo multiprogramado es bastante sofisticado. Tener varios trabajos para
ejecutar significa tenerlos simultaneamente en memoria. Tener varios programas
en memoria requiere una gestión de memoria, además el sistema operativo deberá
seleccionar para elegir uno de ellos. Esto se denomine planificación de CPU.
Los sistemas
batch se caracterizan por la falta de interacción entre el usuario y la
computadora. El trabajo se prepara y se deja. Al cabo de un cierto tiempo
aparece la salida. Los sistemas interactivos suelen estar compuestos por muchas
acciones breves en las que los resultados del comando siguiente pueden ser
imprescindibles.
Un sistema
operativo en tiempo compartido utiliza la planificación de CPU y la
multiprogramación para dotar a cada usuario de una pequeña parte de la
computadora. En lugar de dejar que la CPU permanezca inactiva cuando sucede esto,
el sistema operativo cede rápidamente el control de la CPU al programa de otro
usuario.
Permite que
muchos usuarios compartan simultáneamente la computadora.
En estos
sistemas operativos los trabajos deben permanecer en simultáneamente en memoria,
lo cual requiere de algunas técnicas de administración y protección de memoria.
Tal que se pueda obtener un tiempo de respuesta razonable, los trabajos son
intercambiados entre la memoria principal y el disco, un método muy utilizado
es la memoria virtual, técnica que permite que un trabajo no esté
completamente en memoria. La principal ventaja es que permite que la memoria
física tenga menor tamaño que el trabajo que se quiere procesar.
Los sistemas
operativos de tiempo compartido deben proveer mecanismos para la sincronización
y comunicación de trabajos, y deben asegurar que los trabajos no quedarán por
siempre esperando que otro termine.
Un sistema
multiprocesador tiene mas de un CPU compartiendo memoria y periféricos. Las
ventajas mas evidentes son mayor potencia de computación y fiabilidad.
Estos sistemas
asignan una tarea específica a cada procesador. Un procesador maestro controla
el sistema, los otros esperan al maestro o tienen tareas predefinidas. Este
esquema define una relación maestro/esclavo. Pueden usarse pequeños ordenadores
situados a cierta distancia de la CPU principal, trabajando en lectoras de
tarjetas e impresoras en línea y transfiriendo estos trabajas a y desde la CPU
principal. Los sistemas de tiempo compartido se componen generalmente de un
ordenador grande (principal) y un ordenador mas pequeño que solo es responsable
de las entradas / salidas sobre terminales.
Otra forma son
las redes de ordenadores, donde se comunican muchos sistemas informáticos
independientes, transfiriéndose información. Sin embargo, cada sistema tiene su
propio sistema operativo y trabaja independientemente.
Podemos
clasificar en sistemas multiprocesadores simétricos, en el cual cada
procesador corre una copia idéntica del sistema operativo y se comunica con los
demás procesadores según sus necesidades; o multiprocesadores asimétricos,
en los cuales cada procesador tiene asignado una tarea predefinida. Un
procesador maestro controla el sistema.
La principal
diferencia entre los sistemas de multiprocesadores y distribuidos, es que estos
últimos no comparten memoria y periféricos. Cada procesador tiene su propia
memoria local. Los procesadores se comunican entre si a través de varias líneas
de comunicación, tales como líneas telefónicas o buses de alta velocidad.
Los
procesadores pueden variar en tamaño y función.
Las principales
ventajas son:
Se utilizan
cuando hay requerimientos de tiempo muy rígidos en las operaciones o en el
flujo de datos, generalmente se utilizan como sistemas de control en una
aplicación dedicada. Por ejemplo: sistemas de control industrial, experimentos
científicos y sistemas médicos.
Se pueden
clasificar en:
Los sistemas de
tiempo real por hard, garantizan que las tareas críticas se ejecutan en
tiempo. Los datos son almacenados en memorias no volátiles (ROM), no utilizan
técnicas de memoria virtual ni tiempo compartido, ambas técnicas no pueden ser
implementadas en por hardware.
Los sistemas de
tiempo real por soft, ejecutan tareas menos críticas y manejan técnicas
de prioridades para la asignación de tareas. Estos sistemas tienen menos
utilidades que los implementados por hard, por ejemplo no pueden utilizarse
para control industrial y robótica. Pero si para multimedia, supervisión de
controles industriales y realidad virtual.
Estructura de
los sistemas operativos
Si bien no
todos los sistemas operativos tiene la misma estructura, la mayoría de los
sistemas operativos modernos poseen esta estructura.
Administrador
de procesos
Un programa no
hace nada a menos que sus instrucciones sean ejecutadas por la CPU. Un proceso
necesita ciertos recursos, tiempo de CPU, memoria, archivos y dispositivos de
E/S, para completar sus tareas. Estos recursos son reservados cuando se crea el
proceso o bien se otorgan en tiempo de ejecución.
El sistema
operativo es responsable de:
Administrador
de memoria
El procesador
central lee y escribe datos directamente en memoria. La memoria principal es
generalmente el único dispositivo de almacenamiento que la CPU puede acceder
directamente. Por ejemplo para que la CPU procese datos del disco, primero se
deben cargar éstos en la memoria.
El sistema
operativo es responsable de:
Administrador
de almacenamiento secundario
Como la memoria
principal es muy chica como para almacenar todos los datos y programas
necesarios, la computadora posee un almacenamiento secundario para volcar los
datos de memoria no utilizados. Las computadoras modernas utilizan el disco
para este fin. La mayoría de los programas se almacenan en disco hasta que son
cargados en memoria.
El sistema
operativo es responsable de:
Administrador
de sistemas de E/S
Una de los
propósitos del sistema operativo es ocultar las peculiaridades de los
dispositivos de hardware al usuario. Los sistemas de E/S consisten de:
Administrador
de Archivos
El
administrador de archivos es uno de los componentes mas visibles de un sistema operativo.
Las computadoras pueden almacenar información en diferente tipos de medios
físicos. Cintas magnéticas, discos magnéticos y discos ópticos, son los más
comunes. Cada uno de estos medios tiene sus propias características y
organización física. Cada medio se controla por un dispositivo. Las propiedades
incluyen velocidad, capacidad, velocidad de transferencia de datos y método de
acceso (secuencial o random).
Por
conveniencia el sistema operativo provee una vista lógica uniforme de la
información, independientemente de las características de cada dispositivo,
utiliza la unidad archivo.
Un archivo es
un grupo de información relacionada definida por su creador (programas o
datos).
El sistema
operativo es responsable de:
Sistema de protección
Si un sistema
tiene múltiples usuarios y permite múltiples usuarios concurrentes, los
procesos deben estar protegidos de otras actividades. Para tal propósito se
provee de mecanismos que aseguran que los archivos, segmentos de memoria, CPU y
otros recursos pueden ser operados sólo por aquellos procesos que tienen
permiso otorgado por el sistema operativos.
Por protección
se entiende a los mecanismos para controlar el acceso de programas, procesos y
usuario a los recursos definidos por el sistema.
Networking
Un sistema
distribuido es una colección de procesos que no comparten memoria o recursos.
Cada procesador tiene su propia memoria local, y los procesadores se comunican
con otros a través de varias líneas de comunicación como ser buses de alta
velocidad o líneas telefónicas.
Los
procesadores en el sistema se conectan a través de redes de comunicación, las
cuales se pueden configurar de muchas maneras. La red puede esta completa o
parcialmente conectada.
En un sistema
distribuido los recursos se comparten entre varias estaciones, los sistemas
operativos de red se encargan de administrar el acceso a estos recursos.
Sistema
intérprete de comandos
Uno de las
funciones mas importantes de un sistema operativo es el intérprete de comandos,
que es la interfaz entre el usuario y el sistema operativo. Algunos sistemas
operativos incluyen el intérprete en el kernel. Otros como el DOS o UNIX,
poseen un programa especial para cumplir esta función que se ejecuta cuando se
inicia el sistema.
Los sistemas
operativos se diferencian en el área de interpretación de comandos, según el
grado de facilidad que presenten a los usuarios. Por ejemplo en Windows 95 para
copiar un archivo de una unidad a otra el usuario puede seleccionar con el
mouse el archivo que desea copiar y arrastrarlo hasta su nuevo destino;
mientras que en DOS, debe ingresar una sentencia desde una pantalla de
caracteres
Servicios de
los sistemas operativos
Tipos de
servicios
Los sistemas
operativos con usuarios múltiples pueden mejorara su eficiencia compartiendo
entre ellos los recursos de la computadora.
Los sistemas
operativos prestan sus servicios de muchas maneras. Dos métodos básicos de
prestación de servicios son las llamadas al sistema y los programas de
sistemas.
Llamadas al
sistema
Constituyen una
interfaz entre los programas que se están ejecutando y el sistema operativo.
Estas llamadas se implementan generalmente por instrucciones en lenguaje de
máquina.
Se pueden
agrupar en tres categorías: control de procesos o de trabajos, manipulación
de dispositivos y archivos, y mantenimiento de información.
Control de
procesos y de trabajos
Manipulación de
archivos
Manipulación de
dispositivos
Mantenimiento
de información
Programas del
sistema
Son un grupo de
programas que resuelven problemas corrientes y ofrecen un entorno mas adecuado
para el desarrollo y la ejecución de programas.
Se pueden
dividir en las siguientes categorías:
Uno de los
programas mas importante en un sistema operativo es el intérprete de comando,
éste se ejecuta al iniciarse el sistema operativo, su función es sencilla,
captar un comando dictado por el usuario, interpretarlo y ejecutarlo. Por
ejemplo el comando Delete archivo utilizado por DOS, para que este
comando se pueda ejecutar el intérprete de comandos debe contener el programa
adecuado que elimine el archivo del disco rígido.
Estructura del
sistema
Los sistemas
operativos actuales son grandes y complejos, éstos deben poseer una ingeniería
correcta para su fácil actualización y para que puedan cumplir su función
correctamente. La estructura es generalmente modular, cada módulo cumple una
función determinada e interactúa con los demás módulos.
Estructura
simple
EL sistema
MS-DOS es, sin duda, el mejor sistema operativo para microcomputadoras. Sin
embargo, sus interfaces y niveles de funcionalidad no están bien definidos. Los
programas de aplicación pueden acceder a operaciones básicas de entrada /
salida para escribir directamente en pantalla o discos. Este libre acceso, hace
que el sistema sea vulnerable, ya que un programa de aplicación puede eliminar
por completo un disco rígido por alguna falla. Además este sistema, también
está limitado al hardware sobre el que corre.
Otra estructura
simple es la utilizada por la versión original de UNIX, ésta consiste de dos
partes separadas, el kernel y los programas de sistemas. El
kernel fue posteriormente separado en manejadores (drivers) de dispositivos y
una serie de interfaces. El kernel provee el sistema de archivos, la
programación de CPU, el administrador de memoria y otras funciones del sistema
operativo que responden a las llamadas del sistema enunciadas anteriormente.
Estructura por
capas (layers)
Las nuevas
versiones de UNIX se diseñaron para hardware mas avanzado. Para dar mayor
soporte al hardware, los sistemas operativos se dividieron en pequeñas partes.
Ahora los sistemas operativos tienen mayor control sobre el hardware y las
aplicaciones que se ejecutan sobre éste.
La
modularización de un sistema se puede presentar de varias formas, la mas
utilizada es la de capas, la cual consiste en dividir al sistema operativo en
un número de capas. La capa de menor nivel es el hardware y la de mayor nivel
es la interfaz con el usuario.
La principal
ventaja es que cada capa cumple con una serie de funciones y servicios que
brinda a las otras capas, esto permite una mejor organización del sistema
operativo y una depuración más fácil de éste.
Cada capa se
implementa sólo utilizando las operaciones provistas por la capa de nivel
inferior. Una capa no necesita saber como se implementan estas funciones, sólo
necesita saber que operaciones puede realizar.
Máquina Virtual
Conceptualmente
un sistema operativo está hecho de capas.
Un sistema
operativo con Máquina Virtual puede crear la ilusión de múltiples procesos,
cada uno ejecutando en su propio procesador con su propia memoria (virtual).
Por supuesto, normalmente, los procesos tienen características adicionales,
como llamadas al sistema y sistemas de archivos. En la maquina virtual no se
provee ninguna función adicional, pero si una interfaz que es idéntica al
hardware.
Los recurso
físicos de la computadora son compartidos para crear máquinas virtuales. La
programación de CPU puede ser usada para compartir la CPU y crear la apariencia
de que los usuarios tienen su propio procesador.
El principal
problema con la máquina virtual es el disco. Supongamos que tenemos en una
computadora solo 3 discos pero queremos utilizar 7 máquinas virtuales. Es claro
que no podemos asignar un disco a cada máquina virtual. Una máquina virtual
necesita espacio en el disco para proveer memoria virtual y spooling. La
solución es proveer discos virtuales, los cuales son idénticos en todo excepto
en tamaño.
Cada máquina
virtual esta completamente aislada de las otras, por lo que no hay problemas de
seguridad. Es decir, no hay compartición directa de recursos de la computadora.
Los sistemas
operativos actuales como Windows 95 y Windows NT, utilizan esta técnica.