6.4 Principios en el Software de Entrada - Salida
Los principios de software en la entrada - salida se resumen en cuatro puntos: el software debe ofrecer
manejadores de interrupciones, manejadores de dispositivos, software que sea independiente de los
dispositivos y software para usuarios.
6.4.1 Manejadores de interrupciones El primer objetivo referente a los manejadores de interrupciones
consiste en que el programador o el usuario no debe darse cuenta de los manejos de bajo nivel para los casos
en que el dispositivo está ocupado y se debe suspender el proceso o sincronizar algunas tareas. Desde el punto
de vista del proceso o usuario, el sistema simplemente se tardó más o menos en responder a su petición.
6.4.2 Manejadores de disposisitivos El sistema debe proveer los manejadores de dispositivos necesarios
para los periféricos, así como ocultar las peculiaridades del manejo interno de cada uno de ellos, tales como el
formato de la información, los medios mecánicos, los niveles de voltaje y otros. Por ejemplo, si el sistema tiene
varios tipos diferentes de discos duros, para el usuario o programador las diferencias técnicas entre ellos no le
deben importar, y los manejadores le deben ofrecer el mismo conjunto de rutinas para leer y escribir datos.
6.4.3 Software independiente del dispositivo Este es un nivel superior de independencia que el ofrecido por
los manejadores de dispositivos. Aquí el sistema operativo debe ser capaz, en lo más posible, de ofrecer un
conjunto de utilerías para accesar periféricos o programarlos de una manera consistente. Por ejemplo, que para
todos los dispositivos orientados a bloques se tenga una llamada para decidir si se desea usar 'buffers' o no, o
para posicionarse en ellos.
6.4.4 Software para usuarios La mayoría de las rutinas de entrada - salida trabajan en modo privilegiado, o
son llamadas al sistema que se ligan a los programas del usuario formando parte de sus aplicaciones y que no
le dejan ninguna flexibilidad al usuario en cuanto a la apariencia de los datos. Existen otras librerías en donde el
usuario si tiene poder de decisión (por ejemplo la llamada a "printf" en el lenguaje "C"). Otra facilidad ofrecida
son las áreas de trabajos encolados (spooling areas), tales como las de impresión y correo electrónico.
6.5 Relojes
Los relojes son esenciales para el buen funcionamiento de cualquier sistema porque juegan un papel decisivo
en la sincronización de procesos, en la calendarización de trabajos por lote y para la asignación de turnos de
ejecución entre otras tareas relevantes. Generalmente se cuenta con dos relojes en el sistema: uno que lleva la
hora y fecha del sistema y que oscila entre 50 y 60 veces por segundo y el reloj que oscila entre 5 y 100
millones de veces por segundo y que se encarga de enviar interrupciones al CPU de manera periódica. El reloj
de mayor frecuencia sirve para controlar el tiempo de ejecución de los procesos, para despertar los procesos
que están 'durmiendo' y para lanzar o iniciar procesos que fueron calendarizados.
Para mantener la hora y fecha del sistema generalmente se usa un registro alimentado por una pila de alta
duración que almacena estos datos y que se programan de fábrica por primera vez. Así, aunque se suspenda la
energía la fecha permanece. Para lanzar procesos (chequeo de tiempo ocioso de un dispositivo, terminación del
time slice de un proceso, etc), se almacena un valor en un registro (valor QUANTUM) el cual se decrementa con
cada ciclo del reloj, y cuando llega a cero se dispara un proceso que ejecutará las operaciones necesarias
(escoger un nuevo proceso en ejecución, verificar el funcionamiento del motor del disco flexible, hacer eco de
un caracter del teclado, etc).
7. NUCLEOS DE SISTEMAS OPERATIVOS
Los núcleos (kernels) de los sistemas operativos se pueden ubicar en dos categorias: monolíticos o
micronúcleos (microkernels). El primer tipo de núcleo es el más tradicionalmente usado, mientras que los
micronúcleos forman parte delas tendencias modernas en el diseño de sistemas operativos.
Para comprender mejor qué diferencias existen entre ambas categorías, se necesita revisar algunos conceptos.
7.1 Trabajos, Procesos y Thread
EStos tres conceptos van definiendo el grado de granularidad en que el sistema operativo trata a las masas de
operaciones que se tienen que realizar. Un trabajo se conceptualiza como un conjunto de uno o más procesos.
Por ejemplo, si se tiene que hacer el trabajo de correr el inventario, tal vez se subdivida ese trabajo en varios
procesos: obtener la lista de artículos, número en existencia, artículos vendidos, artículos extraviados, etc. Un
proceso se define como la imagen de un programa en ejecución, es decir, en memoria y usando el CPU. A este
nivel de granularidad, un proceso tiene un espacio de direcciones de memoria, una pila, sus registros y su
'program counter'. Un thread es un trozo o sección de un proceso que tiene sus propios registros, pila y
'program counter' y puede compartir la memoria con todos aquellos threads que forman parte del mismo
proceso.
7.2 Objetos
Un objeto es una entidad que contiene dos partes principales: una colección de atributos y un conjunto de
métodos (también llamados servicios). Generalmente los atributos del objeto no pueden ser cambiados por el
usuario, sino solamente a través de los métodos. Los métodos sí son accesibles al usuario y de hecho es lo
único que él observa: los métodos conforman lo que se llama la 'interfaz' del objeto. Por ejemplo, para el objeto
'archivo' los métodos son abrir, cerrar, escribir, borrar, etc. El cómo se abre, se cierra, se borra, etc; está
escondido para el usuario, es decir, los atributos y el código están 'encapsulados'. La única forma de activar un
método es a través del envío de mensajes entre los objetos, o hacia un objeto.
7.3 Cliente - Servidor
Un cliente es un proceso que necesita de algún valor o de alguna operación externa para poder trabajar. A la
entidad que prove ese valor o realiza esa operación se le llama servidor. Por ejemplo, un servidor de archivos
debe correr en el núcleo (kernel) o por medio de un proceso 'guardián' al servidor de archivos que escucha
peticiones de apertura, lectura, escritura, etc; sobre los archivos. Un cliente es otro proceso guardián que
escucha esas peticiones en las máquinas clientes y se comunica con el proceso servidor a través de la red,
dando la apariencia de que se tienen los archivos en forma local en la máquina cliente.
7.4 Núcleo Monolítico
Los núcleos monolíticos generalmente están divididos en dos partes estructuradas: el núcleo dependiente del
hardware y el núcleo independiente del hardware. El núcleo dependiente se encarga de manejar las
interrupciones del hardware, hacer el manejo de bajo nivel de memoria y discos y trabajar con los manejadores
de dispositivos de bajo nivel, principalmente. El núcleo independiente del hardware se encarga de ofrecer las
llamadas al sistema, manejar los sistemas de archivos y la planificación de procesos. Para el usuario esta
división generalmente pasa desapercibida. Para un mismo sistema operativo corriendo en diferentes
plataformas, el núcleo independiente es exactamente el mismo, mientras que el dependiente debe re-escribirse.
7.5 Microkernel
Un núcleo con 'arquitectura' micronúcleo es aquél que contiene únicamente el manejo de procesos y threads, el
de manejo bajo de memoria, da soporte a las comunicaciones y maneja las interrupciones y operaciones de
bajo nivel de entrada-salida. [Tan92]. En los sistemas oprativos que cuentan con este tipo de núcleo se usan
procesos 'servidores' que se encargan de ofrecer el resto de servicios (por ejemplo el de sistema de archivos) y
que utilizan al núcleo a través del soporte de comunicaciones.
Este diseño permite que los servidores no estén atados a un fabricante en especial, incluso el usuario puede
escoger o programar sus propios servidores. La mayoría de los sistemas operativos que usan este esquema
manejan los recursos de la computadora como si fueran objetos: los servidores ofrecen una serie de 'llamadas'
o 'métodos' utilizables con un comportamiento coherente y estructurado. Otra de las características importantes
de los micronúcleos es el manejo de threads. Cuando un proceso está formado de un solo thread, éste es un
proceso normal como en cualquier sistema operativo.
Los usos más comunes de los micronúcleos es en los sistemas operativos que intentan ser distribuídos, y en
aquellos que sirven como base para instalar sobre ellos otros sistemas operativos. Por ejemplo, el sistema
operativo AMOEBA intenta ser distribuído y el sistema operativo MACH sirve como base para instalar sobre él
DOS, UNIX, etc.
Apuntes enviados por:
Luis Arregocés
Lsanscrito10@hotmail.com
Ingeniería de Sistemas