120 likes | 321 Views
Inicialización del sistema. Aldo Daniel Ortiz Cruz J onathan Rafael Patiño López Dulce Irene Valdivia Martínez. . MINIX para máquinas tipo IBM PC se puede compilar en modo de 16 ó 32 bits usando el mismo código fuente en C. En minix / config.h se define la macro _WORD_SIZE.
E N D
Inicialización del sistema Aldo Daniel Ortiz Cruz Jonathan Rafael Patiño López Dulce Irene Valdivia Martínez
MINIX para máquinas tipo IBM PC se puede compilar en modo de 16 ó 32 bits usando el mismo código fuente en C. En minix/config.h se define la macro _WORD_SIZE.
Inicio de MINIX El inicio de MINIX implica varias transferencias de control entre rutinas en lenguaje ensamblador y rutinas escritas en C contenidas en los archivos start.c y main.c.
mpx386.s Una vez que el proceso de autoarranque ha cargado se transfiere el control a la etiqueta MINIX:
mpx386.s • 1ª instrucción: se pasan por alto algunos bytes que incluyen banderas, información del monitor de arranque. • El monitor de arranque siempre inicia en modo de 16 bits pero conmuta en 32 si es necesario. • El monitor prepara una pila. • El código en lenguaje ensamblador prepara un soporte de pila para el código compilado en C, copia las tablas enviadas por los procesadores para definir los segmentos de memoria y configura los registros del procesador.
mpx386.s Al terminar el trabajo del código en ensamblador, se invoca a la función cstart. Cstart : Invoca una rutina para inicializar la tabla de descriptores globales para supervisar la protección de memoria y la tabla de interrupciones. Al finalizar Igdt e Iidt hacen efectivas las tablas cargando los registros.
mpx386.s El código de inicialización de mpx386.s termina con la instrucción: jmpf CS_ SELECTOR:csinit. La cual obliga a usar las estructuras recién inicializadas.
Funciones de inicialización de C en nivel más alto Cstart (start.c): Configura los mecanismos de protección del CPU y tablas de interrupciones mediante una invocación a prat_mit. Determina el tipo de pantalla. Tamaño de Memoria. Tipo de máquina. Modo de operación del procesador. Todo esto se almacena en variables globales para que sea accesible en cualquier parte del código del Kernel.
main.c Main(main.c): Completa la inicialización e inicia ejecución normal del sistema. Configura el hardware de control de interrupciones invocando a intr_init. intr_initprepara los dispositivos de E/S inhabilitando las interrupciones hasta ser inicializado por su propia rutina. Se invoca mem_init que inicializa un arreglo que define la ubicación y el tamaño de cada región de memoria disponible en el sistema.
main.c La parte más extensa del código de main.c, prepara la tabla de procesos, sus mapas de memoria y registros. Dos entradas de la tabla de procesos que se planifican de manera especial son IDLE y HARDWARE: IDLE es un ciclo que no hace nada y se ejecuta cuando ningún proceso está activo. HARDWARE tiene propósitos de contabilización de tiempo. Se le acredita el tiempo usado mientras se atiende una interrupción.
main.c Para finalizar, se inicializa cada ranura de la tabla de procesos invocando a alloc_segment. Una vez inicializada la tabla de procesos, para todas las tareas los servidores y el mit, el sistema ya casi está listo para ponerse a trabajar. La variable bill_ptr se encarga de guardar el tiempo en que cada proceso ha estado estado ejecutándose . lock_pick_procinicializa bill_ptr y hace que la variable prne_ptrapunte a la tabla de procesos. Fin de Main. . . . E l c o n t r o l n u n c a v o l v e r á a l M a i n . . .
main.c Dos rutinas importantes incluidas en start.c k_atoi: convierte una cadena en entero k_gtenv: encontrar entradas en el entorno del Kernel. Otro procedimiento importante en main.c es: panic: (!!!!!) que se invoca cuando el sistema encuentra una condición que el impide continuar.