1 / 38

Estructura de MINIX3

MINIX3 INTRODUCCION Cátedra: Diseño e Implementación de Sistemas Operativos UTN-FRSF Tomado de: Operating Systems Design and Implementation, Third Edition. Estructura de MINIX3. Estructura de MINIX3. KERNEL

kaspar
Download Presentation

Estructura de MINIX3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MINIX3INTRODUCCIONCátedra: Diseño e Implementación de Sistemas Operativos UTN-FRSFTomado de: Operating Systems Design and Implementation, Third Edition

  2. Estructura de MINIX3

  3. Estructura de MINIX3 KERNEL • Es la capa más baja encargada de gestionar procesos y las transiciones entre los estados READY, RUNNING y BLOCKED • Implementa las primitivas básicas de IPC (send y receive) verificando la legalidad de los destinatarios, de los espacios de memoria de los buffers, verificación de Bloqueos y de copiar los mensajes. • Gestión de interrupciones de E/S utilizando instrucciones privilegiadas (modo kernel)

  4. Estructura de MINIX3 • CLOCK TASK: Es un Device Driver de un dispositivo de E/S denominado Timer que genera señales de interrupcione periódicas. Solo interacciona con el Kernel. • SYSTEM TASK: Responsable de servir las Kernel Calls, utilizadas por los Device Drivers en modo Usuario para llevar a cabo operaciones privilegiadas. Ejemplo de estas operaciones son la escritura/lectura en puertos de E/S, la copia de datos entre distintos espacios de direcciones, etc. • CLOCK TASK & SYSTEM TASK: Ambas son compiladas en conjunto y comparten el espacio de direcciones del Kernel. Ambas son planificadas como procesos separados.

  5. Estructura de MINIX3 • DEVICE DRIVERS (DD) • Son responsables de la gestión de dispositivos de E/S. • Uno DD por cada tipo de Dispositivo • Estan implementados como procesos independientes. • Deben solicitar operaciones privilegiadas a la SYSTEM TASK a través de Kernel Calls.

  6. Estructura de MINIX3 SERVIDORES PROCESS MANAGER (PM): El PM es responsable de servir las System Calls relacionadas con la creación y finalización de procesos tales como el fork, exec y exit. Tambien aquellas relacionadas a señales y gestión de memoria. FILE SYSTEM (FS): El FS es responsible de servir las System Calls relacionadas con las operaciones de sistemas de archivos, directorios, archivos, tuberias, etc.

  7. Estructura de MINIX3 SERVIDORES INFORMATION SERVER (IS): Responsable de la gestión de tareas tales como brindar información sobre el estado de DD y Servers. REINCARNATION SERVER (RS): Responsable de arrancar o rearrancar DD que no fueron cargados al mismo tiempo que el Kernel. NETWORK SERVER (INET): Implementa los protocolos de comunicaciones de redes. Es opcional.

  8. Secuencia de Booteo • Al encender el equipo, la PC busca un disco con el número mágico (0xAA55) en la posición 510 bytes de su primer sector • La BIOS copia éste primer sector de la primer pista del disco de booteo en la memoria (posición LOADOFF) y comienza a ejecutar el codigo que allí se encuentra (masterboot.s) • En un diskette es el programa bootstrap que luego carga el programa de booteo. • En el Disco Rígido el primer sector contiene un pequeño programa (masterboot.s) y la Tabla de Particiones. Esto forma elMaster Boot Record.

  9. Secuencia de Booteo

  10. Secuencia de Booteo • El MBR tiene indicada la partición activa. • La partición activa contiene un programa de booteo propio al igual que un diskette (bootblock.s) el que es responsible de cargar el boot Monitor en BOOTSEG y ejecuta BOOTSEG:BOOTOFF • Los archivos boothead.s, boot.c, bootimage.c, y rawfs.c constituyen el boot Monitor. • Los CD-ROMs pueden cargar varios sectores en memoria para comenzar con el proceso de booteo. • Tipicamente desde un CD-ROM se carga una copia exacta el diskette de booteo el cual es copiado en memoria y utiliza un disco RAM.

  11. Secuencia de Booteo • El programa de booteo de MINIX 3 espera un archivo de multiples partes y va cargando esas partes en la memoria. Esta es al imagen de booteo. • El Kernel + Clock Task + System Task • Process Manager • File System • Disk Driver • Reincarnation Server • RAM disk • Init

  12. Arbol de Procesos

  13. Secuencia de Booteo http://www.swartzbaugh.net/

  14. Secuencia de Booteo • El primer proceso de “usuario” es init (PID 1),pero no es el primer proceso “en espacio de usuario”. • El primer proceso de espacio de usuario es el Process Manager (PID 0). • Init es hijo del Reincarnation Server (RS) • Init ejecuta el script /etc/rc el cual carga los Device Drivers y Servers que no fueron cargados durante el proceso de Booteo (generalmente desde /sbin). • Uno de los primeros programas que se carga es service que es una interface en modo usuario del RS

  15. Secuencia de Booteo • El RS toma programas ordinarios y los convierte en procesos del sistema. • Al final init lee el archivo /etc/ttytab, el cual dispone de la lista de todas las posibles terminales e init hace un fork por cada una de las terminales listadas. • Normalmente, cada proceso es /usr/bin/getty, que imprime un mensaje a la espera del ingreso del nombre de usuario • Luego se llama a /usr/bin/login con el nombre como primer argumento y este verifica la contraseña según especifica /etc/passwd • Después del login, se ejecuta el proceso que se ha especificado en el /etc/passwd, usualmente una shell

  16. Secuencia de Booteo

  17. Secuencia de Booteo

  18. IPC • Comunicación con Mensajes (Rendevous) • send(): Cuando un proceso envia un mensaje a otro que no lo está esperando el emisor se bloquea (RUNNING->BLOCKED) • receive(): Cuando un proceso intenta recibir un mensaje que todavia no le fue enviado el receptor se bloquea (RUNNING->BLOCKED) • sendrec(): Resume un send() y un receive() en una única primitiva produciendo así un solo par de cambio de contexto USER>KERNEL>USER

  19. IPC • notify(dest): • Permite notificar que algo importante ha sucedido. Es una primitiva NO BLOQUEANTE y por lo tanto no requiere que el proceso destino esté haciendo un receive(). • Con solo un simple bit se indica que hay una notificación pendiente. Cada proceso tiene un bitmap de notificaciones pendientes el cual es verificado la siguiente vez que el destinatario realiza una operación receive(). Hay un bit por cada proceso del sistema. • Cuando la notificación es generada para informar una interrupción, el bitmap de todas las posibles fuentes de interrupción es incluido en el mensaje.

  20. Planificación de Procesos • En cada interrupción o finalización de proceso, el kernel invoca al planificador (preemptive) • MINIX3 utiliza 16 colas de prioridades

  21. Planificación de Procesos • Clock Task y System Task se ubican en las colas de máximas prioridades. • Device Drivers en colas se ubican en las colas de prioridades debajo de máximas prioridades. • Los Servers se ubican en las colas de prioridades por debajo de los DD y por encima de las de Usuarios. • Los procesos de Usuario se ubican en colas de prioridades intermedias. • En la cola de menor prioridad solo se ubica el proceso IDLE que solo ejecuta cuando no hay nada mas por hacer.

  22. Planificación de Procesos • Para los procesos de usuarios se puede fijar un quantum (timeslice). • Los procesos que consumen su quantum son reinsertados al final de la cola • Los que se bloquean son reinsertados luego a la cabeza de la cola de READY correspondiente a la prioridad con un quantum igual al remanente que disponían antes de bloquearse. • Tasks, DD y Servers ejecutarán hasta bloquearse aunque tienen un quantum muy superior al requerido a los efectos de implementar un mecanismo de watchdog por mal funcionamiento.

  23. Planificación de Procesos • Cuando un proceso se bloquea (dequeue()) esperando una E/S o un servicio, se puede ejecutar otro proceso. • Cuando el requerimiento es satisfecho, el proceso bloquado se pone en estado LISTO (enqueue()). • El reloj genera interrupciones periódicas en las cuales verifica si se ha vencido el quantum de un proceso de usuario en ejecución. • El kernel oculta las interrupciones transformandolas en transferencias de mensajes hacia las Tareas.

  24. Organización del Código • /usr/include/ • /arpa: definiciones de tipos de datos IP • /ibm: definiciones específicas para IBM PC • /minix: headers del Sistema Operativo • /net: definiciones relacionadas a Ethernet/IP • /netinet: definiciones relacionadas direcciones IP • /sys: POSIX headers

  25. Organización del Código • /usr/src/ • /boot: El código para bootear MINIX3. • /drivers: layer 2 (device drivers discos, consola, etc.). • /etc • /include • /kernel: layer 1 (planificación, IPC, clock y system tasks). • /lib: código de procedimientos de bibliotecas(open, read, etc). • /man • /servers: layer 3 (process manager, file system, etc). • /test • /tools: scripts para compilar el kernel de MINIX3 • /commands

  26. Organización del Código Makefile • Cada directorio del arbol de códigos fuentes contiene un archivo Makefile • Los Makefiles son utilizados por la aplicación make. • Make controla la compilación de archivos de uno o mas directorios • Permite ahorrar tiempo compilando solo aquellos fuentes modificados desde la última compilación.

  27. Organización de Memoria

  28. Compilación de MINIX 3 • Si ejecutamos “make” dentro del directorio scr/tools aparecen todas las opciones disponibles para compilar MINIX 3. • “make install” es una opción habitual para compilar MINIX 3

  29. Compilación de MINIX 3 • Copia src/include en /usr/include. • Genera archivos objetos de src/kernel y algunos subdirectorios de src/drivers y src/server. • Todos los archivos objetos de src/kernel se montan juntos para generar un único ejecutable “kernel”. • Todos los archivos objetos de src/servers/pm se montan juntos para generar “pm”. • Todos los archivos objetos de src/servers/fs se montan juntos para generar “fs”.

  30. Compilación de MINIX 3 • Otros programas que pertenecen a la imagen de arranque (“boot”) son compilados y montados en sus subdirectorios (rs, init, en src/servers, memory/, log/ tty/ en src/drivers). • El componente designado “driver” en la imagen de arranque puede ser cualquiera de los manejadores de disco (habitualmente disco duro). • Para instalar todo puede llamarse a installboot, en src/boot (supuestamente los hace make install), el cual concatena todo en un fichero ejecutable que puede ser copiado en el directorio /boot o en /boot/image. Posteriormente un programa cargador puede ubicarlo en memoria y darle control.

  31. Ejecutando MINIX 3 • La siguiente vez que se arranque MINIX hay que seleccionar: • Start Custom MINIX 3 (o no teclear nada ya que es la opción por defecto)

  32. Curiosidades del código MINIX 3 • include/ansi.h determina si el compilador utilizado cumple los requerimientos de C standard. Define la macro _PROTOTYPE para compiladores ANSI y K&R. Si el compilador es ANSI, los prototipos de funciones se especifican indicando el tipo de retorno y de los parámetros. • En MINIX se definen muchos tipos de datos (ej. include/sys/types.h), pero el compilador funciona correctamente si sustituimos los mismos por los tipos subyacentes. El objetivo es únicamente hacer el código más legible.

  33. Curiosidades del código MINIX 3 • Todos los tipos declarados acaban en _t y hay dos versiones, una para el compilador ansi que empieza por minúscula (ej. dev_t) • Es necesario destacar que en const.h (y en otros archivos) se utiliza la macro EXTERN, la cual es expandida como extern. Ello permite utilizar variables globales sin caer en múltiples redefiniciones de las mismas. En el fichero table.c de cada componente se provoca la redefinición de la macro EXTERN como string vacío (al definir _TABLE), de forma que exista una única definición para cada variable global, generalmente ubicada en el fichero glo.h.

  34. Inicialización de MINIX 3 • El cargador ha introducido en la pila datos necesarios y de interés para el núcleo. • mpx386 prepara el marco de pila para poder llamar a cstart() (start.c). • Inicializa GDT e IDT y copia los parámetros de la pila (pasados por el cargador) a memoria del núcleo. • Hace efectivas GDT e IDT con lgdt y lidt. • mpx386.s salta (jmp) a main.

  35. Archivos de Encabezado • include/minix/: contiene archivos especificos de MINIX3 • com.h: Archivos de constantes comunes del kernel (ID de procesos y mensajes especiales,etc) • config.h: Archivo de configuración principal de MINIX3 • const.h: Constantes límites • devio.h: Constantes para E/S de dispositivos • dl_eth.h: Constantes para placa Ethernet • dmap.h: Constantes relacionadas con Dispositivos de Bloques • fslib.h: Constantes para soporte de Filesystem V1 y V2 • ioctl.h: Constantes para soporte de System Calls IOCTL • ipc.h: Constantes y estructuras relativas a la transferencia de mensajes

  36. Archivos de Encabezado • ipc.h: Constantes y estructuras relativas a la transferencia de mensajes • keymap.h: Constantes relacionadas con el mapeo de teclado • minlib.h: Constantes misceláneas • partition.h: Estructuras relacionadas con particiones de disco • paths.h: Path de archivos especificos • sound.h: Constantes y estructuras usadas por audio y mixer. • swap.h: Constantes y estructuras de las particiones de swap. • sys_config.h: Archivo con constantes de configuracion (Número de procesos, prioridades, etc) • syslib.h: Prototipos de taskcalls y otras funciones del sistema. • sysutil.h: Utilidades para drivers y tasks. • type.h: Tipos y estructuras básicas de MINIX3 • u64.h: Manipulación de estructuras de 64 bits de discos

  37. Tipos de Mensajes en MINIX3

  38. Codigo Fuente Navegable http://www.raspberryginger.com/jbailey/minix/html/index.html

More Related