Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En primer prototipo fue lanzado en 1983 (V1.0), última versión oficial en 1996
(V5.3)
2
Paralelismo: En un sistema de Amoeba, un solo programa o comando
puede utilizar múltiples procesadores para aumentar el rendimiento. El
usuario simplemente pide una operación, y el sistema operativo Amoeba,
decide la mejor manera de cumplir la solicitud. Amoeba decidirá qué
procesador (o procesadores) son apropiados para la solicitud, basada en el
estado actual del sistema.
1. Estaciones de trabajo
2. Pool procesadores
3. Servidores especiales (servidor de archivos ...)
4. Gateways
3
Fig. 1 Componentes de un sistema Amoeba.
En más detalle:
4
condiciones de carrera. Y el servidor bloquea archivos normalmente no dan
lugar a un sistema de archivos incompatible.
Microkernel de Amoeba
Después de analizar el modelo de hardware de Amoeba, pasemos al modelo de
software. Amoeba consta de dos partes fundamentales: un micronúcieo que se
ejecuta en cada procesador, y una colección de servidores que proporcionan la
mayor parte de la funcionalidad de un sistema operativo tradicional.
5
3. Soportar la comunicación.
4. Controlar la E/S de bajo nivel.
6
Para cada dispositivo de E/S conectado a una máquina, existe un controlador del
dispositivo en el núcleo. Este controlador se encarga de toda la E/S del dispositivo.
Los controladores están ligados con el núcleo y no se pueden cargar de manera
dinámica.
Los controladores de dispositivos se comunican con el resto del sistema mediante
los mensajes usuales de solicitud y respuesta. Un proceso, como por ejemplo un
servidor de archivos, que necesite comunicarse con el controlador del disco, le
envía mensajes de solicitud y recibe de regreso ciertas respuestas. En general, el
cliente no tiene que saber que se comunica con un controlador. Desde su punto de
vista, sólo se comunica con un hilo en algún lugar.
Servidores de Amoeba
Todo lo que no se lleva a cabo dentro del núcleo lo realizan los procesos servidores.
La idea detrás de este diseño es minimizar el tamaño del núcleo y mejorar la
flexibilidad. Como el sistema de archivos y otros dispositivos estándar no se
integran al núcleo, éstos se pueden modificar con facilidad y se pueden ejecutar en
forma simultánea varias versiones para las distintas poblaciones de usuarios.
Todos los objetos del sistema, tanto del hardware como del software, reciben un
nombre, una protección y son controlados por las posibilidades. Algunos de los
objetos soportados por esta vía son los archivos, los directorios, los segmentos de
memoria, las ventanas en la pantalla, los procesadores, los discos y las unidades de
cinta. Esta interfaz uniforme para todos los objetos proporciona generalidad y
sencillez.
Todos los servidores estándar tienen procedimientos de resguardo en la biblioteca.
Para utilizar un servidor, por lo general un cliente llama por lo regular al resguardo,
7
el cual ordena los parámetros, envía el mensaje y se bloquea hasta recibir la
respuesta. Este mecanismo oculta todos los detalles de la implantación al usuario.
Se tiene un compilador de resguardo para los usuarios que deseen producir
procedimientos de resguardo para sus servidores.
Tal vez el servidor más importante sea el servidor de archivos. Proporciona las
primitivas para la administración de archivos, su creación, lectura, eliminación, etc.
A diferencia de la mayoría de los servidores de archivos, los archivos creados son
inmutables. Una vez creado, un archivo no se puede modificar, pero puede ser
eliminado. Los archivos inmutables facilitan la réplica automática, puesto que
evitan muchas de las condiciones de competencia inherentes en la réplica de
archivos sujetos a modificaciones durante tal proceso.
El resto del capítulo tiene la siguiente estructura. En primer lugar describiremos los
objetos y las posibilidades, puesto que forman el corazón de todo el sistema.
Después analizaremos el núcleo, con énfasis en la administración de los procesos,
la administración de la memoria y la comunicación. Por último, examinaremos
algunos de los principales servidores, como el servidor de archivos, el servidor de
directorios, el servidor de réplicas y el servidor de ejecución.
Para llevar a cabo una operación en un objeto, un cliente hace una RPC con el
servidor, donde se específica el objeto, la operación por desarrollar y, de manera
opcional, los parámetros necesarios.
Los clientes no son conscientes de las posiciones de los objetos que utilizan y los
servidores que los controlan. Un servidor se podría ejecutar en la misma máquina
que el cliente, en una distinta en la misma LAN e incluso en una máquina a cientos
de kilómetros de distancia. Además, aunque la mayoría de los servidores se
ejecutan como procesos del usuario, unos cuantos servidores de bajo nivel, como el
servidor de segmentos (es decir, de memoria) o el servidor de procesos, se ejecutan
como hilos en el núcleo. Esta distinción también es invisible para los clientes.
El protocolo RPC para comunicarse con los servidores del usuario o los servidores
del núcleo, ya sean locales o remotos, es idéntico en todos los casos. Así, un cliente
sólo se preocupa por lo que debe realizar, no de la posición donde se guardan los
objetos o donde se ejecutan los servidores-Cierto directorio contiene las posi-
bilidades para todos los servidores de archivos accesibles junto con una
especificación de la opción por omisión, de modo que un usuario pueda evitar esta
opción en los casos donde esto sea importante. Por lo general, el administrador del
sistema define la opción por omisión como la local.
Posibilidades
Los objetos reciben su nombre y protección de manera uniforme mediante boletos
especiales llamados posibilidades. Para crear un objeto, un cliente realiza una
RPC con el servidor apropiado, donde indica lo que desea. El servidor crea
entonces el objeto y regresa una posibilidad al cliente. En las operaciones
siguientes, el cliente debe presentar la posibilidad para identificar al objeto. Una
posibilidad no es más que un número binario de gran tamaño.
Bits 24 8 48 48
Puerto del servidor Objeto Dere- Verificación
chos
Fig. 3 Una posibilidad en Amoeba.
9
servidor de la posibilidad y lo busca en su caché para localizar la máquina donde
reside el servidor. Si el puerto no está en el caché, lo localiza mediante una
transmisión que describiremos más adelante. El puerto es en sí una dirección
lógica mediante la cual se puede alcanzar al servidor.
Procesos en Amoeba
Un proceso es un objeto en Amoeba. Al crear un proceso, el proceso padre obtiene
una posibilidad para el proceso hijo, al igual que con cualquier otro objeto recién
creado. Mediante esta posibilidad, el hijo se puede suspender, reiniciar o destruir.
10
La administración de procesos es controlada en tres niveles distintos en Amoeba.
En el nivel inferior están los servidores de procesos, hilos del núcleo que se
ejecutan en cada una de las máquinas.
Para crear un proceso en una máquina dada, otro proceso realiza una RPC con el
servidor de procesos de esa máquina, proporcionando la información necesaria.
En el siguiente nivel tenemos un conjunto de procedimientos de biblioteca que
proporcionan una interfaz más conveniente para los programas del usuario. Se
tienen distintos gustos. Hacen su trabajo al llamar a los procedimientos de interfaz
de bajo nivel.
Por último, la forma más sencilla de crear un proceso es utilizar el servidor de
ejecución. que hace la mayor parte del trabajo para determinar el lugar donde se
ejecuta el nuevo proceso. Analizaremos el servidor de ejecución en una sección
posterior de este capítulo.
Por último, el descriptor del proceso contiene también un descriptor para cada hilo
del proceso. El contenido de un descriptor de hilo depende de la arquitectura, pero
como mínimo, contiene el contador del programa y el apuntador a la pila del hilo.
También puede contener la información adicional necesaria para ejecutar el hilo,
donde se incluyen otros registros, el estado del hilo y varias banderas. Los procesos
más recientes contienen sólo un hilo en sus descriptores de procesos, pero los
procesos incapacitados pueden haber creado más hilos antes de incapacitarse.
11
El servidor de ejecución lo utiliza para determinar la mejor posición para la
ejecución de un nuevo proceso
Hilos
Amoeba soporta un modelo sencillo de hilos. Al iniciar un proceso, éste tiene al
menos un hilo. Durante la ejecución, el proceso puede crear más hilos y los
existentes pueden terminar su labor. Así, el número de hilos es por completo
dinámico. Al crearse un nuevo hilo, los parámetros de la llamada especifican el
procedimiento por ejecutar y el tamaño de la pila inicial.
12
Aunque todos los hilos de proceso comparten el mismo texto y datos globales de un
programa, cada hilo tiene su pila, su apuntador a la pila y su copia de los registros
de la máquina. Además, si un hilo desea crear y utilizar variables globales a todos
sus procedimientos pero invisibles para los demás hilos, se dispone de
procedimientos de biblioteca para tales fines. Tales variables son globales.
Un procedimiento de biblioteca asigna un bloque de memoria global del tamaño
necesario y regresa un apuntador a él. Se hace referencia a los bloques de memoria
global mediante enteros, en vez de cadenas. Se dispone de una llamada al sistema
para que un hilo adquiera su apuntador global.
Se dispone de tres métodos para la sincronización de hilos: señales, mútex y
semáforos. Las señales son interrupciones asíncronas que se envían de un hilo a
otro en el mismo proceso. Desde el punto de vista conceptual, son similares a las
señales de UNIX, excepto que se envían entre hilos en vez de procesos. Las señales
se pueden enviar, capturar o ignorar. Las interrupciones asíncronas entre los
procesos utilizan el mecanismo de incapacidad.
El núcleo controla todos los hilos. La ventaja de este diseño es que cuando un hilo
realiza una RPC, el núcleo puede bloquearlo y programar la ejecución de otro hilo
del mismo proceso si alguno está listo. La planeación del procesamiento de los
hilos se realiza mediante el uso de prioridades, donde los hilos del núcleo tienen
mayor prioridad que los hilos del usuario. La planeación del procesamiento de los
hilos se puede configurar con prioridades o para ejecutarse hasta terminar (es
decir, que los hilos continúen su ejecución hasta bloquearse), conforme lo desee el
proceso.
Administración de la memoria
Amoeba tiene un modelo de memoria en extremo sencillo. Un proceso puede tener
el número de segmentos que desee y éstos se pueden localizar en cualquier parte
del espacio de direcciones virtuales del proceso. Los segmentos no se intercambian
ni se paginan, por lo que un proceso debe estar por completo contenido en la
13
memoria para su ejecución. Además, aunque se utiliza el hardware MMU, cada
segmento se almacena de manera adyacente a los demás en la memoria.
Aunque es posible que este diseño sea poco usual en esta época, se realizó así por
tres razones: desempeño, sencillez y economía. El hecho de que un proceso esté por
completo contenido en la memoria hace más rápida la RPC. Cuando hay que enviar
un bloque de datos de gran tamaño, el sistema sabe que todos los datos están
adyacentes, no sólo en la memoria virtual, sino también en la memoria física. Esto
evita verificar si se dispone en cierto momento de todas las páginas necesarias
dentro del buffer y elimina la espera de las mismas si no estuvieran dentro del
buffer.
Segmentos
Los procesos disponen de varias llamadas al sistema para el manejo de los
segmentos. Entre las más importantes están las que permiten crear, destruir, leer y
escribir segmentos. Al crear un segmento, el proceso que hizo la llamada recibe a
cambio una posibilidad, la cual es utilizada para la lectura y escritura del segmento,
así como para las demás llamadas relacionadas con el segmento.
Un segmento recién creado recibe un tamaño inicial, el cual puede cambiar durante
la ejecución del proceso. También puede tener un valor inicial, ya sea de otro
segmento o de algún archivo.
Puesto que los segmentos se pueden leer o escribir, es posible utilizarlos para
construir un servidor de archivos de la memoria principal. Para comenzar, el
servidor crea un segmento del mayor tamaño posible.
Puede determinar ese tamaño máximo preguntando al núcleo. Este segmento se
utilizará como un disco simulado. Después, el servidor le da formato al segmento
como un sistema de archivos, con todas las estructuras necesarias para llevar el
registro de los archivos. Después de todo eso, se abre al público para aceptar y
procesar solicitudes de los clientes.
14
Segmentos asociados
Los espacios de direcciones virtuales en Amoeba se construyen a partir de los
segmentos.
Al iniciar un proceso, éste debe tener al menos un segmento. Sin embargo, durante
su ejecución, un proceso puede crear más segmentos y asociarlos con su espacio de
direcciones en cualquier dirección virtual no utilizada.
Comunicación en Amoeba
En todos los procesos el núcleo también pueden comunicarse con un estándar de
RPC (Llamada a procedimiento remoto) de la interfaz. Sólo hay tres funciones para
alcanzar este objetivo:
15
La primera función es utilizada por el cliente para enviar un mensaje a un servidor,
y recibe una respuesta del servidor en esta solicitud. La solicitud y respuesta son
buffers de memoria genérica (char). La solicitud y los encabezados respuesta son
estructuras de datos simples para describir la solicitud y la capacidad del
servidor. Por otro lado, el servidor de llamadas dentro de un bucle infinito utiliza la
función getreq.
Cada vez que un cliente envía al servidor (determinado por un puerto del servidor)
un mensaje, el getreq devuelve los datos del cliente y llena en El búfer de solicitud,
en su caso. El encabezado de la solicitud contiene la información sobre la solicitud
del cliente.
Debido a que el cliente espera una respuesta, el servidor debe enviar una respuesta
(ya sea con o sin datos de respuesta) utilizando la respuesta de la función.
16
Bibliografía
17