Introducción Sistemas Operativos Avanzados Utilizar una máquina

Anuncio
Introducción
Sistemas Operativos Avanzados
Utilizar una máquina al desnudo (sólo interactuando con el hardware) resulta engorroso e ineficiente
debido a la gran cantidad de tareas que deben ser realizadas de manera manual, tales como: cargar programas
y datos en memoria de manera apropiada; direccionar y activar de manera correcta los dispositivos de entrada
salida, etc. Cuando una máquina es usada por muchos usuarios de forma simultanea, existen numerosas
consideraciones que deben tomarse en cuenta como: la protección de los datos de usuario, la manera de
compartir el tiempo y uso de los recursos compartidos, etc. Un sistema operativo libera al usuario de las tareas
tediosas e incrementa la eficiencia encargándose del manejo de los recursos del sistema.
Funciones de un Sistema Operativo
Un sistema operativo es una capa de software sobre el hardware de la máquina que permite realizar
dos funciones básicas:
•
Administración de Recursos. Un programa de usuario accede en numerosas ocasiones a recursos de
hardware y software durante su ejecución. Ejemplos de dichos recursos son: CPU, memoria principal,
dispositivos de entrada/salida, y diferentes tipos de software (compiladores, enlazador/cargador,
archivos, etc.). Es el sistema operativo el encargado de manejar los recursos y asignarlos a los
programas de usuario de forma eficiente y justa. Las labores de administración abarcan lo siguiente:
◦ Administración del tiempo (Planificación de CPU y Disco).
◦ Administración del espacio (Almacenamiento Principal y Secundario).
◦ Manejo de sincronización de procesos y abrazo mortal (Deadlock).
◦ Manejo de estadísticas y estado del sistema.
•
Interfaz amigable. Un sistema operativo esconde los detalles no placenteros de bajo nivel y la
idiosincrasia de los componentes de hardware de la máquina con la finalidad de proveer una interfaz
amigable hacia la máquina. Con dicha interfaz la carga, manipulación, impresión, y ejecución de
programas se realiza mediante comandos de alto nivel sin la necesidad de preocuparse por los detalles
de bajo nivel. La capa provista por el sistema operativo transforma el hardware crudo de la máquina, en
una máquina virtual o abstracta con funcionalidades agregadas (como la administración de recursos de
forma automática). Además, los usuarios de la máquina tienen la ilusión de que son los únicos usuarios
en el sistema, aun cuando la máquina podría operar en un ambiente multiusuarios. La interfaz amigable
toma en consideración los siguientes tareas:
◦ Ambiente de ejecución (Administración de procesos – creación, control y finalización, manipulación
de archivos, manejo de interrupciones, soporte de entrada/salida, etc.)
◦ Detección y manejo de errores.
◦ Protección y seguridad.
◦ Tolerancia a fallas y recuperación de las mismas.
Acercamiento al diseño de sistemas operativos
Un sistema operativo puede ser diseñado de forma macro, como una gran colección de procesos sin
ningún tipo de estructura. Cualquier proceso puede invocar a otro para solicitar un servicio de este; bajo este
esquema la ejecución de una instrucción de usuario suele involucrar la activación de una serie de procesos y la
comunicación entre ellos.
Un enfoque macro y centralizado como el anterior puede considerarse aceptable para un sistema
operativo pequeño, pero no para un sistema operativo relativamente grande y complejo. Esto se debe a que la
falta de estructura complica fuertemente el código, las pruebas y la depuración de un sistema operativo enorme
o de propósito general.
El diseño de sistemas operativos de propósito general ha madurado durante las últimas dos décadas y
media, dando como resultado sistemas operativos enormes y complejos. Generalmente los sistemas operativos
que poseen soporte de una ambiente multiprogramado poseen decenas de megabytes de longitud; además de
un diseño, implementación y etapa de prueba a cargo de un gran equipo de desarrollo de software.
A continuación se discutirán algunas de las consideraciones que deben tomarse en cuenta para
manejar la complejidad y tamaño de los sistemas operativos actuales, realizando especial énfasis en entender
la diferencia entre que cosas debo hacer y como debo hacerlas, dentro del contexto de diseño de un sistema
operativo.
Separación de Políticas y Mecanismos
La política se refiere a que debo hacer, mientras que el mecanismo se refiere a como lo voy a hacer.
Por ejemplo, en planificación de CPU, el mecanismo provee los medios (maneras) de implementar varias
disciplinas de planificación, mientras la política decide la política de planificación del CPU (FCFS, prioridad, etc.)
a ser usada. Un sistema operativo bien diseñado debe separar las políticas de los mecanismos. El hecho de
que las políticas utilice los mecanismos y la separación entre ellos contribuye a brindar flexibilidad, así las
decisiones de que política aplicar pueden ser tomadas a alto nivel. Es evidente pensar que las políticas pueden
cambiar con el tiempo, con las aplicaciones, o con los usuarios. Si los mecanismos son separados de las
políticas, entonces un cambio en las políticas no requeriría cambios en los mecanismos y viceversa. De otra
manera, un cambio en las políticas podría requerir un rediseño completo.
Consideraciones de modelos basados en capas
Dijkstra propuso un enfoque de diseño basado en capas con la finalidad de reducir la complejidad de
diseño e implementación de un sistema operativo. El enfoque basado en capa consiste en dividir las
funcionalidades del sistema operativo por capas. Las funciones del sistema operativo se dividen de forma
equitativa en dichas capas, dando como resultado un sistema balanceado. Cada una de estas capas se
encargara de definir funcionalidades específicas, así como también una interfaz de entrada/salida con las capas
adyacentes. El diseño normal de una arquitectura en capa otorga a las capas inferiores la función de interactuar
con el hardware de la máquina y servir de interfaz a las capas superiores, mientras que las capas superiores se
encargan de la interfaz de usuario o interactúan con los mismos. La idea detrás de este enfoque es similar a la
utilizada en el modelo de interconexión de sistemas abiertos (OSI – Open System Interconnection).
Diseñar un sistema operativo basado en capas hace que el mismo sea modular (en un diseño modular,
el sistema es dividido en varios módulos y dichos módulos se diseñan de manera independiente). Así, cada
capa puede ser diseñada, codificada y probada de manera independiente. Como consecuencia de esto, un
diseño orientado a capas ofrece simplicidad en su diseño, especificaciones e implementación. Sin embargo,
existen inconvenientes en cuanto a un enfoque orientado a capas, uno de ellos es la ubicación de las
funcionalidades por capa y la cantidad de funcionalidades en ellas. Si una capa posee muchas funcionalidades
lo más probable es que su desempeño sea lento y costoso; por otro lado se debe considerar que en el modelo
en capas, una capa sólo puede acceder a las funcionalidades de la capa superior por lo tanto la ubicación de
estas es de suma importancia.
Un ejemplo clásico de un sistema operativo diseñado por capas es THE el cual consiste en seis capas.
La Figura 1 muestra las capas del sistema operativo y las funcionalidades asociadas.
Figura 1. Estructura del Sistema Operativo THE.
Otro ejemplo clásico de un enfoque en capas son los sistemas MULTICS, cuya arquitectura de diseño
se basa en capas concéntricas (anillos). Esta estructura en anillos no sólo simplifica el diseño y verificación del
sistema, sino que también sirve de ayuda en el diseño e implementación de protección. En MULTICS, los
privilegiosdisminuyen de un anillo interno a uno externo, de esta manera la estructura en anillos define e
implementa de forma sencilla la protección en el sistema. La Figura 2 muestra un sistema en anillos similar a
MULTICS.
Figura 2. Sistema en anillos similar a MULTICS.
Un enfoque basándose en el núcleo (kernel)
Otros enfoques de diseño han sido planteados como el basado en el núcleo, el cual propuso Brinch
Hansen. El núcleo es una colección de primitivas que se utilizan para construir y ejecutar el sistema operativo.
Así, el núcleo provee un ambiente para construir sistemas operativos donde el diseñador posee una gran
flexibilidad ya que las políticas y consideraciones de optimización no se establecen a nivel del núcleo. Esto
conlleva a establecer que el núcleo sólo soporta los mecanismos, y las decisiones de que políticas implementar
deben ser llevadas a cabo en las capas exteriores. Un enfoque como el anterior produce un sistema creciente
de software el cual crece sobre el núcleo, donde en cada nivel se toman decisiones con respecto a planificación
de procesos, asignación de recursos, ambientes de ejecución, sistemas de archivos, protección de recursos,
etc.
De acuerdo con Brinch Hansen, el núcleo fundamentalmente establece las primitivas que permiten la
creación y control de procesos, así como la comunicación entre ellos. Así, el núcleo sugerido por Hansen sólo
posee la visión de procesos y no incluye el concepto de recursos. Sin embargo, para que un sistema operativo
pueda madurar en funcionalidad y complejidad, se ha optado por incluir más funcionalidad al núcleo.
Un núcleo sólo debe contener un conjunto de funcionalidades mínimo, con las cuales se pueda construir
y ejecutar un sistema operativo con un grupo de objetivos específicos. Incluir muchas funcionalidades dentro del
núcleo conlleva a poca flexibilidad a alto nivel, mientras que incluir pocas resulta en un bajo soporte para los
niveles superiores.
Un ejemplo de un sistema operativo diseño bajo este enfoque es HYDRA, es cual es un núcleo para
C.mmp (sistema multiprocesador desarrollado en Carnegie- Mellon); este núcleo soporta noción de recursos y
procesos, y provee mecanismos para la creación y representación de nuevos tipos de recursos y acceso
protegido a los mismos.
Acercamiento a las Máquinas Virtuales
Una máquina virtual es una capa de software sobre el hardware crudo que provee la ilusión de que
todos los dispositivos de la máquina (procesador, memoria principal, almacenamiento secundario, etc.) se
encuentran disponibles en su totalidad para cada usuario. Un usuario puede ejecutar en conjunto completo de
instrucciones, incluyendo las instrucciones privilegiadas. El software de la maquina virtual crea dicha ilusión
multiplexando de forma adecuada los recursos del sistema entre todos los usuarios presentes en la máquina.
Un usuario puede correr un sistema operativo mono-usuario sobre un sistema operativo basado en
maquina virtual. El soporte para un sistema mono-usuario es muy sencillo y eficiente, ya que las
consideraciones de multiprogramación y protección no se encuentran presentes. El concepto de máquinas
virtuales ofrece alta flexibilidad, permitiendo que diferentes sistemas operativos puedan ejecutarse en diferentes
máquinas virtuales. Además el concepto de máquina virtual provee una poderosa herramienta de prueba para
nuevos sistemas operativos, sin interferir con el resto de los usuarios de la máquina. Una implementación
eficiente de este enfoque es VM/370 de IBM, sin embargo, numerosos problemas en cuanto a dificultad y
complejidad envuelven este sistema por su gran extensión.
VM/370 provee una máquina virtual para cada usuario; cuando un usuario inicia en el sistema, se crea
una copia exacta del hardware crudo (IBM 370), en donde se ejecuta por lo general un sistema operativo mono-
usuario interactivo.
¿Por qué avanzan los Sistemas Operativos?
En los años de 1960 y 1970, los esfuerzos en cuanto al diseño de los sistemas operativos se
encontraban centralizados en los llamados sistemas operativos tradicionales, esto es un computador standalone con un solo procesador. Los numerosos avances en los circuitos integrados y en las tecnologías de
comunicación entre computadores desde 1980 hasta la actualidad, ha permitido la proliferación de diversas
arquitecturas, sistemas de memoria compartida, sistemas de memoria distribuida, etc. Estas arquitecturas y
sistemas requieren un conjunto de características que los sistemas operativos convencionales no pueden
proveer, por ello los sistemas operativos han evolucionado para poder satisfacer los nuevos requerimientos de
las arquitecturas emergentes.
Los sistemas multi-procesador y sistemas distribuidos tienen muchas características que no se
encuentran presentes en los sistemas mono-procesador tradicionales. Estas características hacen que el diseño
de los sistemas operativos emergentes sea extremadamente complicado, y requieren que asuntos no triviales
de diseño sean tratados. Debido a su novedad relativa y enorme complejidad de diseño, los sistemas operativos
para arquitecturas de cómputo múltiples son llamados sistemas operativos avanzados o modernos. Un sistema
operativo avanzado no sólo aprovecha la potencia de una arquitectura múltiple cómputo, sino que también
provee una vista coherente de alto nivel del sistema; un usuario ve a un sistema de las características
mencionadas como una máquina monolítica muy poderosa.
Tipos de Sistemas Operativos Avanzados
La Figura 3 muestra una clasificación de los sistemas operativos avanzados. El ímpetu de los sistemas
operativos avanzados ha tomado dos direcciones. La primera surge de los avances de la arquitectura. El diseño
de hardware de estas arquitecturas ofrece un paralelismo de alta disponibilidad y sistemas distribuidos de alto
cómputo; estas características introducen grandes cambios en las consideraciones de diseño de sistemas
operativos. Básicamente los sistemas operativos diseñados para estas arquitecturas se conocen como sistemas
operativos para multiprocesadores y sistemas operativos distribuidos.
La segunda clase de sistemas operativos avanzados se orienta al manejo de aplicaciones. Algunas
aplicaciones (Ejem: Base de Datos) requieren soporte especial del sistema operativo, como manejo intervalos
de tiempo o manejo directo de estructuras de datos temporales. Los sistemas operativos convencionales o de
propósito general ofrecen un desempeño pobre para los requerimientos ciertas aplicaciones, sobre todo se han
centrado los estudios en los requerimientos de Base de Datos y Tiempo Real.
Figura 3. Clasificación de los Sistemas Operativos Avanzados.
Sistemas Operativos Distribuidos
Un sistema operativo distribuido es un sistema operativo que controla un conjunto de máquina
autónomas, conectadas entre si mediante una red de comunicaciones. Un sistema operativo distribuido controla
la forma de manejar los recursos de hardware y software distribuidos en todo el sistema, de manera tal que el
usuario final se sienta en un sistema centralizado, es decir, el usuario ve al sistema como un poderoso
computador monolítico.
Los asuntos básicos en el diseño de sistemas operativos distribuidos son esencialmente los mismos
que en los sistemas operativos convencionales (sincronización de procesos, abrazo mortal, planificación,
sistema de archivo, comunicación entre procesos, manejo de memoria y buffer, recuperación de fallas, etc.). Sin
embargo, otras consideraciones deben considerarse: nombramiento, memoria compartida, manejo de reloj,
retardo en las comunicaciones, etc.
Sistemas Operativos Multiprocesador
Un sistema multiprocesador típico consiste en un conjunto de procesadores los cuales comparten un
bloque de memoria física y generalmente se encuentran comunicados con otros sistema vía red. La tarea del
sistema operativo es hacer ver a todo el sistema como un sistema poderoso de un único procesador.
Las consideraciones básicas de diseño son las mismas de los sistemas operativos tradicionales,
teniendo especial énfasis en la sincronización de procesos, planificación de tareas, manejo de memoria,
protección y seguridad.
Sistemas Operativos de Base de Datos
Los sistemas operativos de base de datos requieren manejar el concepto de transacciones, operaciones
de almacenamiento, recuperación y manipulación de grandes volúmenes de datos de forma eficiente. Para el
manejo temporal de datos es necesario el manejo de buffer, así como un esquema de acceso a estos.
Sistemas Operativos de Tiempo Real
Un sistema de tiempo real se caracteriza por poseer tiempo límites para las tareas que se deben
ejecutar, en base a esto generalmente estos se clasifican en sistemas operativos de tiempo real suave y tiempo
real duro. La consecuencia directa de estas características es realizar un diseño que permita cumplir con los
tiempos de respuestas necesarios para las aplicaciones que se ejecutan sobre el sistema operativo de tiempo
real.
Universidad Central de Venezuela
Facultad de Ciencias – Esc. Computación
Prof. David A. Pérez A.
[email protected]
Descargar