Você está na página 1de 4

Algoritmo Detallado para la Llamada al Sistema Operativo.

Hay disponibles recursos suficientes para poder completar la llamada a fork con
xito?
Estado
Creado (8)
en el diagrama completo de transicin de estados de un proceso
UNIX.
Recurso 1: Sistema swapping
hay espacio en memoria o disco para el
proceso hijo.
+ Si hay memoria principal suficiente
Proceso en estado Listo para
ejecutarse en
Memoria Principal
(3).
+ Si no hay memoria principal suficiente
Swapper
Proceso en
estado Listo para ejecutarse en el rea de swap en memoria
secundaria (5).
Recurso 2: El sistema demanda pginas (Paginacin)
tambin
espacio para tablas auxiliares.
NO
ERROR.
SI
Construccin del contexto del nivel de usuario (segmentos de cdigo, datos
y pila, zonas de
memoria compartida que se encuentran en la zona de direcciones virtuales
del proceso y las
partes del espacio de direcciones virtuales que peridicamente no
residen en memoria principal debido al swapping o a la paginacin) y la
parte esttica del contexto del nivel de sistema (entrada en la tabla de
procesos, el rea de usuario y las entradas de la tabla de regiones por
proceso (pregion), tabla de regiones y tabla de pginas) del proceso hijo.
+ Comprobaciones de la existencia de los recursos necesarios en el
proceso padre para que pueden ser copiados en el proceso hijo y
actualizados a nivel global.
+ Buscar una entrada libre en la tabla de procesos para el proceso hijo
Buscar una entrada libre en la tabla de procesos y la reserva para el
proceso hijo.
+ Nmero de ID (PID) nico para el proceso nuevo. Determinar un
identificador de proceso para el proceso hijo. Este nmero es nico e
invariable durante toda la vida del proceso y es la clave para poder
controlarlo desde otros procesos.
+ Proceso hijo en estado Creado, aunque necesita completar algunos
parmetros para pasar al estado de Listo para su ejecucin en
memoria principal o en el rea de swap.
+ Inicializar la entrada del proceso hijo en la tabla de procesos
copiar
la entrada en la tabla de procesos del proceso padre.
+ Asignar el ID (PID) del proceso hijo a la entrada de la tabla de
procesos del proceso padre y al proceso hijo el PID 0.
+ Inicializar parmetros para la planificacin (scheduler).
+ Incrementar la cuenta de referencias (contadores) al inodo del
directorio actual y la raz del proceso padre
En las tablas globales
del kernel, tabla de archivos y la tabla de inodos, se incrementan los
contadores que indican cuntos procesos tienen abiertos esos archivos.
+ El proceso hijo hereda la raz del proceso padre.
+ Asociar al proceso hijo los archivos asociados al proceso padre
Copiar del proceso padre al proceso hijo la tabla de control de archivos
locales al proceso, como puede ser la tabla de descriptores de archivos.
+ Reservar memoria para u-Area, regiones y tablas de pginas para el
proceso hijo.
+ Duplicar cada regin del proceso padre asignndosela al proceso hijo.

+ Sistema swapping
Duplicar regiones de memoria no compartidas
en el rea de swap.
+ Las secciones que deben ser compartidas, como el cdigo o las
zonas de memoria
compartida, no se copian, sino que se incrementan los contadores
asociados a ellas que indican cuntos procesos comparten esas zonas.
+ Las reas de usuario (u-Areas) son iguales excepto en el puntero de
entrada a la tabla de procesos.
Construccin de la parte dinmica del contexto del proceso hijo a nivel de
sistema (la pila kernel que contiene marcos de pila de las funciones
ejecutadas en modo kernel por el proceso y una serie de capas que se
almacenan en forma de pila, que contiene la informacin necesaria para
poder recuperar la capa anterior incluyendo el contexto de nivel de
registros de la capa anterior).
+ El kernel copia o apila la capa (1) del proceso padre.
* Contexto de nivel de registros de usuario salvados.
* Capa de la pila kernel para la llamada al sistema, Operativo .
+ El kernel crea y apila una capa de contexto falsa (2) para el proceso
hijo.
* Contexto de nivel de registros salvado para la capa (1).
* Datos necesarios para permitir al proceso hijo reconocerse y
empezar
la ejecucin desde este momento cuando sea
planificado por el kernel a travs del scheduler (contador del
programa, PC (registro de estado del procesador que especifica el
estado del hardware), puntero de la pila, otros registros, etc.).
if (proceso padre)
+ El kernel cambia el estado del proceso hijo de Creado a Listo para
su ejecucin en
memoria principal o Listo para su ejecucin en el rea
de swap.
+ El kernel retorna el PID del proceso creado (hijo) al proceso padre, y al
proceso hijo le devuelve el valor 0.
else
+ Inicializa los campos de tiempo en el u-Area (rea de usuario).
+ retorna 0

Observaciones sobre la Creacin de un Proceso


(Padre e Hijo).
Las u-Areas son iguales a excepcin del puntero a la Tabla de
Procesos. Una vez creado el contexto esttico va por el dinmico. El
kernel copia la primera capa (capa 1) que contiene el nivel de
usuario y tambin la pila del kernel (con la capa de llamada a fork). Si
la implementacin incluye pila del kernel en la uArea ya en el punto
anterior se hace esta copia (en cualquier caso la pila del padre e hijo
son iguales). Ahora hace una copia falsa en la pila del hijo para simular
que se ha ejecutado antes. En esta capa se debe incluir el contexto de
registros de la capa 1.
Observar que padre e hijo comparten los archivos abiertos antes del
fork (los que se abran despus ya van a cuenta de cada proceso), por
lo que en el siguiente cdigo ejemplo los dos procesos jams leen o
escriben en el mismo offset de los archivos descritos por fr y fw.
En este caso ambos procesos compartirn las tablas de archivos cada
uno con los valores para fr y fw apuntando a la misma entrada en la
Tabla de Archivos. Aunque de la apariencia que se copia el archivo
por dos veces, lo cierto es que el contenido del archivo destino
depender de como se planifiquen los procesos.

Você também pode gostar