lunes, 21 de noviembre de 2016

Chorus

Chorus
Historia de Chorus
Chorus surgió del instituto francés de investigación INRIA en 1980, como proyecto de investigación en sistemas distribuidos. Desde entonces han aparecido cuatro versiones, numeradas del 0 al 3. La idea detrás de la versión 0 era la de modelar aplicaciones distribuidas como colección de actores, en esencia procesos estructurados, cada uno de los cuales alternaban entre la realización de una transacción atómica y la ejecución de un paso de comunicación.
La versión 1, que se utilizó de 1982 a 1984, se centró en la investigación del multiprocesador. Fue escrita para el multiprocesador francés SM90, que constaba de 8 CPU 68020de Motorola en un bus común.
La versión 2 (1984-1986) fue una reescritura fundamental del sistema, en C. Se diseñó de modo que las llamadas al sistema fuesen compatibles con UNIX en el nivel del código fuente. El núcleo de la versión 2 se rediseñó por completo, pasando la mayor funcionalidad posible de éste al código del usuario, y cambiando el núcleo por lo que ahora se conoce como micronúcleo.
La versión 3 se inició en 1987. Esta versión marcó la transición de un sistema de investigación a un producto comercial, ya que los diseñadores de Chorus salieron de INRIA y formaron una compañía, Chorus Systémes, para seguir desarrollando y comercializar Chorus.
Objetivos de Chorus
Los objetivos del proyecto Chorus han evolucionado junto con el sistema. En un principio,
se trataba de una investigación puramente académica, diseñada para explorar nuevas
ideas en el cómputo distribuido con base en el modelo del actor. Al pasar el tiempo, se
volvió más comercial, y se cambió el énfasis. Los objetivos actuales se pueden resumir
como sigue:
1. Emulación de UNIX de alto rendimiento.
2. Uso en sistemas distribuidos.
3. Aplicaciones de tiempo real.
4. Integración de la programación orientada a objetos en Chorus.
Estructura del sistema
Chorus está estructurado en capas En la parte inferior está el micronúcleo (llamado sólo núcleo en la documentación de Chorus). Proporciona la mínima administración de los nombres, procesos, hilos, memoria y comunicación. Se tiene acceso a estos servicios mediante llamadas al micronúcleo. Existen más de 100 llamadas. Los procesos de las capas superiores proporcionan el resto del sistema operativo. Cada máquina de un sistema distribuido basado en Chorus ejecuta una copia idéntica del micronúcleo de Chorus.
Abstracciones del núcleo
El núcleo proporciona y controla seis abstracciones fundamentales que forman la base de Chorus. Estos conceptos son los procesos, los hilos, las regiones, los mensajes, los puertos, los grupos de puerto y los identificadores únicos.
Cada proceso tiene un espacio de direcciones, que por lo general van de 0 a cierta dirección máxima. Todos los hilos de un proceso tienen acceso a este espacio de direcciones. Un rango consecutivo de direcciones es una región.
Estructura del núcleo
En la parte inferior está el supervisor, que controla el hardware y atrapa los señalamientos, las excepciones, las interrupciones y demás detalles del hardware, además de controlar el intercambio de contexto. Está escrito parcialmente en ensamblador y debe volverse a crear si Chorus se lleva a un nuevo hardware. Posteriormente esta el administrador de la memoria virtual, que controla la parte de bajo nivel del sistema de paginación.

El subsistema UNIX
La compatibilidad es tanto a nivel fuente como nivel binario La implantación del subsistema MiX es más modular que UNIX. Consta de cuatro procesos, uno para la administración de procesos, uno para la administración de archivos, uno para la administración de dispositivos y uno para los flujos y la comunicación entre procesos. Estos procesos no comparten variables ni memoria, y se comunican de manera exclusiva mediante las llamadas a procedimientos remotos.
Administración de procesos en Chorus
Procesos
Un proceso en Chorus es una colección de elementos activos y pasivos que funcionan juntos para realizar cierto cálculo. Los elementos activos son los hilos. Los elementos pasivos son un espacio de direcciones y una colección de puertos Un proceso con un hilo es como proceso tradicional en UNIX. Un proceso sin hilos no puede realizar algo útil, y por lo general existe sólo durante un intervalo muy corto, mientras se crea un proceso.
Los procesos del núcleo son los más poderosos. Se ejecutan en modo núcleo y todos comparten el mismo espacio de direcciones entre sí y con el micronúcleo. Se cargan o descargan durante la ejecución, pero fuera de ello, se pueden pensar como extensiones del propio micronúcleo.
Hilos
Cada proceso activo en Chorus tiene uno o más hilos que ejecutan código. Cada hilo tiene su propio contexto privado, que se guarda cuando el hilo se bloquea en espera de cierto evento y se restaura cuando se reasume de nuevo el hilo.
Los hilos se comunican entre sí enviando y recibiendo mensajes. No importa si el emisor y el receptor están en el mismo proceso o si están en máquinas diferentes. Se distinguen los siguientes estados, que no son mutuamente excluyentes:
1. Activo: El hilo es lógicamente capaz de ejecutarse.
2. Suspendido: El hilo se ha suspendido de manera intencional.
3. Detenido : El proceso del hilo ha sido suspendido.
4. En espera: El hilo está esperando que ocurra cierto evento.
Planificación
La planificación de los CPU se realiza mediante el uso de prioridades con base en los hilos. Cada proceso tiene prioridad y cada hilo tiene prioridad relativa dentro de su proceso. La prioridad absoluta de un hilo es la suma de la prioridad de su proceso y su prioridad relativa. El núcleo mantiene un registro de la prioridad de cada hilo en estado activo y ejecuta el que tiene la máxima prioridad absoluta.
Administración de memoria de Chorus
Regiones y segmentos
Una región es un rango adyacente de direcciones virtuales una región puede comenzar o terminar en cualquier dirección virtual, pero para hacer algo útil, una región debe estar alineada con respecto de las páginas y tener una longitud igual.a cierto número entero de páginas.
Un segmento es una colección adyacente de bytes que reciben el nombre y protección de una posibilidad. Los archivos y las áreas de intercambio son los tipos más comunes de segmentos. Los segmentos se pueden leer o escribir en ellos utilizando llamadas al sistema que proporcionen la posibilidad, el desplazamiento, el número de bytes, el buffer y la dirección de transferencia del segmento.
Asociadores
Chorus soporta paginadores externos del estilo de Mách, llamados asociadores. Cada asociador controla uno o más segmentos que son asociados con regiones. Un segmento se asocia con varias regiones, incluso en diferentes espacios de direcciones al mismo tiempo. El administrador de la memoria virtual en cada núcleo mantiene un caché de página y lleva un registro de la página correspondiente a cada segmento. Las páginas en el caché local pertenecen a segmentos con nombre, como archivo, o sin nombre, como las áreas de intercambio.
Memoria compartida distribuida
Chorus soporta la memoria compartida distribuida paginada con el estilo IVY. La unidad para compartir entre las diversas máquinas es el segmento. Los segmentos se dividen en fragmentos de una o más páginas. En cualquier instante, cada fragmento es exclusivo para lectura, y en potencia está presente en varias máquinas; o bien, sirve para lectura y escritura, y sólo está presente en una máquina.
Llamadas al núcleo para la administración de memoria
La administración de memoria en Chorus soporta 26 llamadas al sistema diferentes, más algunas otras llamadas del núcleo a los asociadores.
Comunicación en Chorus
Mensajes
Cada mensaje contiene un encabezado una parte fija opcional y un cuerpo opcional. El encabezado identifica la fuente y destino y contiene varios identificadores de protección y banderas. La parte fija, si está presente, siempre tiene una longitud de 64 bytes y está por completo bajo el control del usuario.
Puertos
Los mensajes se envían a los puertos, cada uno de los cuales contiene un espacio para guardar cierto número de mensajes.
Cool: Un subsistema orientado a objetos
El subsistema UNIX no es más que una colección de procesos de Chorus marcados como un subsistema.
La arquitectura COOL
Desde el punto de vista conceptual, COOL proporciona una capa base COOL que genera las fronteras de la máquina. Esta capa proporciona una forma de espacio de direcciones que es visible a todos los procesos COOL, sin importar el lugar donde se ejecuten, casi en la forma en que un sistema distribuido de archivos proporciona un espacio global de archivos. Sobre esta capa está el sistema genérico de tiempo de ejecución, que también es global al sistema.

1 comentario: