Escolar Documentos
Profissional Documentos
Cultura Documentos
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