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:

wpe1.jpg (7556 bytes)

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.

wpe2.jpg (8333 bytes)

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.

wpe3.jpg (50882 bytes)

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.

núcleo

manejador de memoria

sistema de ficheros

registros                 contador programa    palabra estado     stack pointer       estado proceso t.comienzo proceso tiempo uso CPU          t. uso CPU por hijo      t. próxima alarma puntero cola Mensajes señales pendientes    id proceso                bits de flags

puntero al segmento código puntero al segmento datos puntero al segmento bss estado salida              estado señales    identificador proceso proceso padre              grupo de procesos            uid real                             uid efectivo                       gid real                             gid efectivo                    mapa bits para señales   bits de flags

Máscara umask directorio raíz directorio de trabajo descriptor fichero  uid efectiva            gid efectiva parámetros llamadas bits de flags

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.