ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Sistema operativo nachos

christopherj043Trabajo29 de Julio de 2019

3.289 Palabras (14 Páginas)838 Visitas

Página 1 de 14

INTRODUCION

Nachos es un software de instrucción que permite a los estudiantes estudiar y modificar un sistema operativo real. La única diferencia entre Nachos y un sistema operativo "real" es que Nachos se ejecuta como un solo proceso de Unix, mientras que los sistemas operativos reales se ejecutan en máquinas simples. Sin embargo, Nachos simula las instalaciones generales de bajo nivel de las máquinas típicas, incluidas las interrupciones, la memoria virtual y la E / S de dispositivos controlados por interrupciones.


¿Qué es nachOS?

Nachos simula una máquina que se aproxima aproximadamente a la arquitectura MIPS. La máquina tiene registros, memoria y un cpu. Además, un reloj simulado controlado por eventos proporciona un mecanismo para programar interrupciones y ejecutarlas posteriormente. La máquina MIPS simulada puede ejecutar programas arbitrarios. Uno simplemente carga las instrucciones en la memoria de la máquina, inicializa los registros (incluido el contador de programas PCReg) y luego le dice a la máquina que comience a ejecutar las instrucciones. La máquina obtiene la instrucción a la que PCReg apunta, la descodifica y la ejecuta. El proceso se repite indefinidamente, hasta que se realiza una operación ilegal o se genera una interrupción de hardware. Cuando se produce una captura o interrupción, la ejecución de las instrucciones MIPS se suspende y se invoca una rutina de servicio de interrupción de Nachos para tratar la condición.

Conceptualmente, Nachos tiene dos modos de ejecución, uno de los cuales es el simulador MIPS. Nachos ejecuta procesos de nivel de usuario al cargarlos en la memoria del simulador, inicializar los registros del simulador y luego ejecutar el simulador. Los programas de usuario solo pueden acceder a la memoria asociada con la máquina simulada. El segundo modo corresponde al "kernel" de Nachos. El núcleo se ejecuta cuando Nachos se inicia por primera vez, o cuando un programa de usuario ejecuta una instrucción que causa una captura de hardware (por ejemplo, instrucción ilegal, error de página, llamada al sistema, etc.) ). En `` modo kernel '', Nachos ejecuta la forma en que se ejecutan los procesos Unix normales. Es decir, las declaraciones correspondientes al código fuente de Nachos se ejecutan, y la memoria a la que se accede corresponde a la memoria asignada a las variables de Nachos.

Nachos no tiene que ejecutar programas de nivel de usuario para realizar cosas útiles. Nachos admite subprocesos del kernel, lo que permite que varios subprocesos se ejecuten simultáneamente. En este contexto, Nachos se comporta de manera análoga a otros paquetes de hilos. De hecho, los procesos de nivel de usuario se ejecutan haciendo que un subproceso del núcleo invoque el simulador. Así, la multiprogramación hace uso de múltiples hilos; cada proceso de nivel de usuario tiene un subproceso de núcleo de Nachos asociado para proporcionar un contexto para ejecutar el simulador MIPS.

Componentes de la máquina

La máquina Nachos / MIPS es implementada por el objeto Máquina , una instancia de la cual se crea cuando Nachos se inicia por primera vez. El objeto Máquina exporta una serie de operaciones y variables públicas a las que el núcleo de Nachos accede directamente. A continuación, describimos algunas de las variables importantes del objeto Máquina ; describir su rol ayuda a explicar lo que hace el hardware simulado.

El objeto de la máquina Nachos proporciona registros, memoria física, soporte de memoria virtual, así como operaciones para ejecutar la máquina o examinar su estado  actual. Cuando Nachos se inicia por primera vez, crea una instancia del objeto Máquina y lo hace disponible a través de la máquina de variable global . Las siguientes variables públicas son accesibles al núcleo de Nachos:

registros:

Una matriz de 40 registros, que incluyen registros especiales como un puntero de pila, un registro doble para resultados de multiplicación, un contador de programa, un contador de programa siguiente (para demoras de ramificación), un objetivo de registro para cargas demoradas, un valor para cargar en una carga retrasada y la dirección virtual incorrecta después de un error de traducción. Los registros son el número 0-39; vea el archivo machine.h para obtener los nombres simbólicos de los registros que tienen un significado especial (p. ej., PCReg ).

Aunque se puede acceder a los registros directamente a través de machine-> registers [x] , el objeto Machine proporciona rutinas especiales ReadRegister () y WriteRegister () para este fin (que se describen con más detalle a continuación).

memoria principal:

La memoria es direccionable por bytes y organizada en páginas de 128 bytes, del mismo tamaño que los sectores de disco. Se puede acceder a la memoria correspondiente a la dirección física x en Nachos en machine-> mainMemory [x] . Por defecto, la máquina MIPS de Nachos tiene 31 páginas de memoria física. El número real de páginas utilizadas es controlado por el NumPhysPages variable en machine.h .

Memoria virtual

Nachos admite VM a través de una única tabla de páginas lineales o un TLB administrado por software (aunque no simultáneamente). La elección de lo que está en vigencia se controla al inicializar las variables tlb o pageTable de la clase de máquina . Al ejecutar las instrucciones, el objeto Máquina utiliza lo que esté definido, después de verificar que no están configurados simultáneamente.

En este punto, sabemos lo suficiente sobre el objeto Máquina para explicar cómo ejecuta programas de usuario arbitrarios. Primero, cargamos las instrucciones del programa en la memoria física de la máquina (por ejemplo, la variable máquina-> mainMemory ). A continuación, inicializamos las tablas de páginas de la máquina y los registros. Finalmente, invocamos machine-> Run () , que comienza el ciclo fetch-execute para la máquina.

El objeto Máquina proporciona las siguientes operaciones:

Máquina (depuración bool)

El constructor de la máquina toma un solo argumento de depuración . Cuando la depuración es VERDADERA, el simulador MIPS ejecuta las instrucciones en el modo de un solo paso, invocando al depurador después de que se ejecuta cada instrucción. El depurador le permite a uno examinar de forma interactiva el estado de la máquina para verificar (por ejemplo) que los registros o la memoria contienen valores esperados.

Por defecto, el paso a paso está deshabilitado. Se habilita especificando la opción de línea de comando `` -s '' al iniciar Nachos up.

Traducción de ExceptionType (int virtAddr, int * physAddr, int size, bool writing)

convierte la dirección virtual virtAddr en su dirección física correspondiente physAddr . Traducir examina las tablas de traducción de la máquina (descritas en detalle en la Sección 2.4) para realizar la traducción. Cuando tiene éxito, Traducir devuelve la dirección física correspondiente en physAddr . De lo contrario, devuelve un código que indica el motivo del error (p. Ej., Error de página, violación de protección, etc.) Cada vez que falla una traducción, el simulador MIPS invoca la rutina RaiseException de Nachos para resolver el problema. RaiseException es responsable de manejar todas las condiciones de captura de hardware. Cuando RaiseExceptionAl regresar, la máquina de Nachos asume que la condición se ha corregido y se reanuda su ciclo de búsqueda y ejecución.

Tenga en cuenta que, desde la perspectiva de un proceso de nivel de usuario, las trampas tienen lugar de la misma manera que si el programa se estuviera ejecutando en una máquina simple; se invoca un controlador de trampas para solucionar el problema. Sin embargo, desde la perspectiva de Nachos, el simulador MIPS llama a RaiseException a través de una llamada de procedimiento normal.

OneInstruction ()

hace el trabajo real de ejecutar una instrucción. Obtiene la dirección de instrucción actual del registro de PC, la recupera de la memoria, la descodifica y finalmente la ejecuta. Todas las direcciones a las que se hace referencia como parte del ciclo de búsqueda / ejecución (incluida la dirección de instrucción dada por PCReg) se traducen en direcciones físicas a través de la rutina de Translate () antes de que se acceda realmente a la memoria física.

Correr()

`` enciende '' la máquina MIPS, iniciando el ciclo de búsqueda y ejecución. Esta rutina solo debe llamarse después de que los registros de la máquina y la memoria se hayan inicializado correctamente. Simplemente entra en un bucle infinito de búsqueda y ejecución.

El bucle principal en Ejecutar hace tres cosas: 1) invoca OneInstruction para ejecutar realmente una instrucción, 2) invoca al depurador, si el usuario ha solicitado el modo de un solo paso en la línea de comando, y 3) incrementa un reloj simulado después de cada instrucción El reloj, que se utiliza para simular interrupciones, se describe en la siguiente sección.

int ReadRegister (int num)

recoge el valor almacenado en el registro num .

void WriteRegister (int num, int valor)

coloca el valor en el registro núm .

bool ReadMem (int addr, int size, int * value)

Recupera 1, 2 o 4 bytes de memoria en la dirección virtual addr . Tenga en cuenta que addr es la dirección virtual del programa de nivel de usuario que se ejecuta actualmente ; ReadMem invoca a Translate antes de que acceda a la memoria física.

Un punto que debe tenerse en cuenta es que ReadMem falla (devolviendo FALSO), si la traducción de la dirección falla (por cualquier motivo). Por lo tanto, si la página no está presente en la memoria física, ReadMem falla. ReadMem qué no distinguir los fallos temporales (por ejemplo, no la página en la memoria) de errores de hardware (por ejemplo, dirección virtual no válido) gif.

...

Descargar como (para miembros actualizados) txt (21 Kb) pdf (119 Kb) docx (15 Kb)
Leer 13 páginas más »
Disponible sólo en Clubensayos.com