Download - Estructura de Un Sistema Operativo
sistemas operativos
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS
ESTRUCTURA DE UN SISTEMA OPERATIVO
Los seis diseños son: sistemas monolíticos, sistemas de capas, microkernels,
sistemas cliente-servidor, máquinas virtuales y exokernels.
SISTEMAS MONOLÍTICOS
Los sistemas monolíticos son aquellos en los que su centro es un grupo de
estructuras fijas, las cuales funcionan entre sí.
En los Sistemas Operativos Monolíticos, existen módulos grandes en el núcleo,
los cuales interactúan entre sí, para poder tener esta estructura, las diferentes
partes del kernel son compiladas por capas.
Un núcleo monolítico es un tipo de núcleo o kernel de un sistema operativo.
Como ejemplo de sistema operativo de núcleo monolítico están UNIX, Linux y
FreeBSD.
Estos sistemas tienen un núcleo grande y complejo, que engloba todos los
servicios del sistema. Está programado de forma no modular, y tiene un
rendimiento mayor que un micronúcleo (agregar referencia). Sin embargo,
cualquier cambio a realizar en cualquier servicio requiere la recompilación del
núcleo y el reinicio del sistema para aplicar los nuevos cambios.
Un sistema operativo con núcleo monolítico concentra todas las
funcionalidades posibles (planificación, sistema de archivos, redes,
controladores de dispositivos, gestión de memoria, etc) dentro de un gran
programa. El mismo puede tener un tamaño considerable, y deberá ser
recompilado por completo al añadir una nueva funcionalidad. Todos los
componentes funcionales del núcleo tienen acceso a todas sus estructuras de
datos internas y a sus rutinas. Un error en una rutina puede propagarse a todo
el núcleo.
Esta organización sugiere una estructura básica para el sistema operativo:
1. Un programa principal que invoca el procedimiento de servicio solicitado.
2. Un conjunto de procedimientos de servicio que llevan a cabo las llamadas al
sistema.
3. Un conjunto de procedimientos utilitarios que ayudan a los procedimientos
de servicio.
En este modelo, para cada llamada al sistema hay un procedimiento de servicio
que se encarga de la llamada y la ejecuta. Los procedimientos utilitarios hacen
cosas que necesitan varios procedimientos de servicio, como obtener datos de
los programas de usuario. Esta división de los procedimientos en tres niveles:
El sistema de capas.
Consiste en organizar el sistema operativo como una jerarquía de capas, cada
una construida sobre la inmediata inferior. El primer sistema construido de esta
manera fue el sistema THE (Technische Hogeschool Eindhoven), desarrollado
en Holanda por E. W. Dijkstra (1968) y sus estudiantes.
• Capa 0: Asignación del procesador y multiprogramación
En esta capa se proporciona la multiprogramación básica de la CPU, esto
quiere decir que trabaja en la asignación del procesador y también se alteran
los procesos cuando se ocurren las interrupciones o expiran los cronómetros.
Dichos sistemas constan de procesos secuénciales, estos se pueden
programar sin importar que varios procesos se estén ejecutando en el mismo
procesador.
• Capa 1: administración de la memoria y el disco
Aquí se administra la memoria, al mismo tiempo se asignaba el espacio de
memoria principal para los diversos procesos y un depósito de palabras de
512K en el cual se utilizaba para almacenar partes de los procesos, en este
caso las paginas, ya que no existía un lugar en la memoria principal. En esta
capa no se debe de preocupar que los procesos que estén en memoria o en el
depósito, esto se debe que el software de esta capa se encarga de garantizar
que las paginas lleguen a la memoria cuando fueran necesarias.
• Capa 2: comunicación operador - proceso
En esta capa se encarga de la comunicación entre el proceso y la consola de
usuario. Arriba de esta capa, cada proceso tiene su propia consola.
• Capa 3: control de entrada y salida
En la capa 3 se controlan los dispositivos de E/S y también guarda en buffers
los flujos de información entre los diferentes dispositivos. Por encima de esta
capa, los procesos pueden trabajar con dispositivos específicos de E/S
teniendo propiedades adecuadas.
• Capa 4: programas de usuario
Aquí se localizan los programas de los usuarios, estos no se preocupan por el
proceso, memoria, consola o control de E/S, que se tuvieran que utilizar.
• Capa 5: el operador
En esta capa se localiza el proceso operador del sistema.
Microkernels.
Con el diseño de capas, los diseñadores podían elegir en dónde dibujar el
límite entre kernel y usuario. Tradicionalmente todas las capas iban al kernel,
pero eso no es necesario. La idea básica detrás del diseño de microkernel es
lograr una alta confiabilidad al dividir el sistema operativo en módulos
pequeños y bien definidos, sólo uno de los cuales (el microkernel) se ejecuta
en modo kernel y el resto se ejecuta como procesos de usuario ordinarios, sin
poder relativamente.
En especial, al ejecutar cada driver de dispositivo y sistema de archivos como
un proceso de usuario separado, un error en alguno de estos procesos puede
hacer que falle ese componente, pero no puede hacer que falle todo el sistema.
Así, un error en el driver del dispositivo de audio hará que el sonido sea
confuso o se detenga, pero la computadora no fallará. En contraste, en un
sistema monolítico con todos los drivers en el kernel, un driver de audio con
errores puede hacer fácilmente referencia a una dirección de memoria inválida
y llevar a todo el sistema a un alto rotundo en un instante.
Modelo cliente-servidor
Una ligera variación de la idea del microkernel es diferenciar dos clases de
procesos: los servidores, cada uno de los cuales proporciona cierto servicio, y
los clientes, que utilizan estos servicios. Este modelo se conoce como cliente-
servidor. A menudo la capa inferior es un microkernel, pero eso no es
requerido. La esencia es la presencia de procesos cliente y procesos servidor.
La comunicación entre clientes y servidores se lleva a cabo comúnmente
mediante el paso de mensajes. Para obtener un servicio, un proceso cliente
construye un mensaje indicando lo que desea y lo envía al servicio apropiado.
Después el servicio hace el trabajo y envía de vuelta la respuesta. Si el cliente
y el servidor se ejecutan en el mismo equipo se pueden hacer ciertas
optimizaciones, pero en concepto estamos hablando sobre el paso de
mensajes.
Una generalización obvia de esta idea es hacer que los clientes y los
servidores se ejecuten en distintas computadoras, conectadas mediante una
red de área local o amplia, Como los clientes se comunican con los servidores
mediante el envío de mensajes, no necesitan saber si los mensajes se manejan
en forma local en sus propios equipos o si se envían a través de una red a
servidores en un equipo remoto. En cuanto a lo que al cliente concierne, lo
mismo ocurre en ambos casos: se envían las peticiones y se regresan las
respuestas. Por ende, el modelo cliente-servidor es una abstracción que se
puede utilizar para un solo equipo o para una red de equipos.
Máquina Virtual.
Se trata de un tipo de sistemas operativos que presentan una interface a cada
proceso, mostrando una máquina que parece idéntica a la máquina real
subyacente. Estos sistemas operativos separan dos conceptos que suelen
estar unidos en el resto de sistemas: la multiprogramación y la máquina
extendida. El objetivo de los sistemas operativos de máquina virtual es el de
integrar distintos sistemas operativos dando la sensación de ser varias
máquinas diferentes. El núcleo de estos sistemas operativos se denomina
monitor virtual y tiene como misión llevar a cabo la multiprogramación,
presentando a los niveles superiores tantas máquinas virtuales como se
soliciten. Estas máquinas virtuales no son máquinas extendidas, sino una
réplica de la máquina real, de manera que en cada una de ellas se pueda
ejecutar un sistema operativo diferente, que será el que ofrezca la máquina
extendida al usuario.
Exokernels
En vez de clonar la máquina actual, como se hace con las máquinas virtuales,
otra estrategia es particionarla; en otras palabras, a cada usuario se le
proporciona un subconjunto de los recursos. Así, una máquina virtual podría
obtener los bloques de disco del 0 al 1023, la siguiente podría obtener los
bloques de disco del 1024 al 2047 y así sucesivamente.
En la capa inferior, que se ejecuta en el modo kernel, hay un programa llamado
exokernel (Engler y colaboradores, 1995). Su trabajo es asignar recursos a las
máquinas virtuales y después comprobar los intentos de utilizarlos, para
asegurar que ninguna máquina trate de usar los recursos de otra. Cada
máquina virtual de nivel de usuario puede ejecutar su propio sistema operativo,
al igual que en la VM/370 y las Pentium 8086 virtuales, con la excepción de que
cada una está restringida a utilizar sólo los recursos que ha pedido y que le han
sido asignados.
La ventaja del esquema del exokernel es que ahorra una capa de asignación.
En los otros diseños, cada máquina virtual piensa que tiene su propio disco,
con bloques que van desde 0 hasta cirt to valor máximo, por lo que el monitor
de la máquina virtual debe mantener tablas para reasignar las direcciones del
disco (y todos los demás recursos). Con el exokernel, esta reasignación no es
necesaria.
El exokernel sólo necesita llevar el registro para saber a cuál máquina virtual se
le ha asignado cierto recurso. Este método sigue teniendo la ventaja de separar
la multiprogramación (en el exokernel) del código del sistema operativo del
usuario (en espacio de usuario), pero con menos sobrecarga, ya que todo lo
que tiene que hacer el exokernel es mantener las máquinas virtuales
separadas unas de las otras.
CLASIFICACION DE LOS SISTEMAS OPERATIVOS.
Monousuarios
Los sistemas operativos monousuarios son aquéllos que soportan a un usuario
a la vez, sin importar el número de procesadores que tenga la computadora o
el número de procesos o tareas que el usuario pueda ejecutar en un mismo
instante de tiempo. Las computadoras personales típicamente se han
clasificado en este renglón.
Multiusuarios
Los sistemas operativos multiusuarios son capaces de dar servicio a más de un
usuario a la vez, ya sea por medio de varias terminales conectadas a la
computadora o por medio de sesiones remotas en una red de comunicaciones.
No importa el número de procesadores en la máquina ni el número de procesos
que cada usuario puede ejecutar simultáneamente.
Monotareas
Los sistemas monotarea son aquellos que sólo permiten una tarea a la vez por
usuario.
Puede darse el caso de un sistema multiusuario y monotarea, en el cual se
admiten varios usuarios al mismo tiempo pero cada uno de ellos puede estar
haciendo solo una tarea a la vez.
Multitareas
Un sistema operativo multitarea es aquél que le permite al usuario estar
realizando varias labores al mismo tiempo. Por ejemplo, puede estar editando
el código fuente de un programa durante su depuración mientras compila otro
programa, a la vez que está recibiendo correo electrónico en un proceso en
background. Es común encontrar en ellos interfaces gráficas orientadas al uso
de menús y el ratón, lo cual permite un rápido intercambio entre las tareas para
el usuario, mejorando su productividad.
Uniproceso
Un sistema operativo uniproceso es aquél que es capaz de manejar solamente
un procesador de la computadora, de manera que si la computadora tuviese
más de uno le sería inútil. El ejemplo más típico de este tipo de sistemas es el
DOS y MacOS.
Multiproceso
Un sistema operativo multiproceso se refiere al número de procesadores del
sistema, que es más de uno y éste es capaz de usarlos todos para distribuir su
carga de trabajo.
Generalmente estos sistemas trabajan de dos formas: simétrica o
asimétricamente.
Cuando se trabaja de manera asimétrica, el sistema operativo selecciona a uno
de los procesadores el cual jugará el papel de procesador maestro y servirá
como pivote para distribuir la carga a los demás procesadores, que reciben el
nombre de esclavos. Cuando se trabaja de manera simétrica, los procesos o
partes de ellos (threads) son enviados indistintamente a cualesquiera de los
procesadores disponibles, teniendo, teóricamente, una mejor distribución y
equilibrio en la carga de trabajo bajo este esquema.
Se dice que un thread es la parte activa en memoria y corriendo de un proceso,
lo cual puede consistir de un área de memoria, un conjunto de registros con
valores específicos, la pila y otros valores de contexto. Us aspecto importante a
considerar en estos sistemas es la forma de crear aplicaciones para
aprovechar los varios procesadores. Existen aplicaciones que fueron hechas
para correr en sistemas monoproceso que no toman ninguna ventaja a menos
que el sistema operativo o el compilador detecte secciones de código
paralelizable, los cuales son ejecutados al mismo tiempo en procesadores
diferentes. Por otro lado, el programador puede modificar sus algoritmos y
aprovechar por sí mismo esta facilidad, pero esta última opción las más de las
veces es costosa en horas hombre y muy tediosa, obligando al programador a
ocupar tanto o más tiempo a la paralelización que a elaborar el algoritmo inicial.
Bibliografía.
Sistemas Operativos - 3ª edición-Andrew S. Tanenbaum
Sistemas Operativos - 2ª D.M Dhamdhere