|
Un proceso puede crear un proceso hijo, y este a su vez otros procesos, obteniéndose un árbol de procesos. Todos los procesos de usuario son parte de un árbol cuya cabeza es el proceso init. Veamos como arranca MINIX: Cuando el computador se enciende, la BIOS lee el primer sector del cilindro cero del disco, que contiene el masterboot, que se carga en memoria y se ejecuta. El masterboot carga en memoria el bootstrap desde el primer sector de la partición activa que ejecuta el boot que carga el sistema operativo con sus partes kernel, mm, fs, init el primer proceso de usuario. El kernel se ejecuta inicializa el sistema y lanza todas las tareas de los manejadores, que una vez inicializadas se bloquean en espera de trabajo, luego se lanza el mm, el fs, y finalmente se ejecuta init. Init, primeramente lee el fichero /etc/ttytab para ver cuantos terminales hay, y mediante FORK crea un proceso hijo para cada terminal. En nuestro caso solo la consola. Cada proceso hijo ejecuta /usr/bin/getty que presenta un mensaje y espera que se teclee un nombre. Cuando alguien entra en el sistema, se ejecuta /usr/bin/login/ con el nombre como argumento y se ejecuta el Shell de ese usuario, especificado en /etc/passwd, normalmente /bin/sh. El Shell espera por un comando y luego lanza un FORK y un EXEC por cada comando. De esta forma el Shell es el hijo de init, y los procesos de usuario los nietos, y todos los procesos en el sistema son parte de un mismo árbol. Cuando se ejecuta un programa, se le asigna un trozo de memoria, que la retiene a la largo de su vida y cuyo tamaño está especificado en el encabezamiento del programa (palabra 6). Toda la información de un proceso creado se guarda en la tabla de procesos, dividida en tres partes el núcleo, manejo de memoria y sistema de ficheros.
Cuando un proceso se crea o se destruye, el manejador de memoria, actualiza la tabla de procesos y envía mensajes al núcleo y al sistema de ficheros para que actualicen su tabla.
|