TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Diseño <strong>de</strong> Sistemas Operativos<br />
Tema <strong>2.</strong> Gestión <strong>de</strong> Procesos<br />
<strong>2.</strong>7.1.<strong>2.</strong> Algoritmo Detallado para la Llamada al Sistema fork.<br />
• ¿Hay disponibles recursos suficientes para po<strong>de</strong>r completar la llamada a fork con éxito? ⇒ Estado<br />
“Creado” (8) ⇒ en el diagrama completo <strong>de</strong> transición <strong>de</strong> estados <strong>de</strong> un proceso UNIX.<br />
– Recurso 1: Sistema swapping ⇒ hay espacio en memoria o disco para el proceso hijo.<br />
+ Si hay memoria principal suficiente ⇒ Proceso en estado “Listo para ejecutarse en<br />
Memoria Principal” (3).<br />
+ Si no hay memoria principal suficiente ⇒ Swapper ⇒ Proceso en estado “Listo para<br />
ejecutarse en el área <strong>de</strong> swap en memoria secundaria” (5).<br />
– Recurso 2: El sistema <strong>de</strong>manda páginas (Paginación) ⇒ también espacio para tablas<br />
auxiliares.<br />
• NO<br />
– ERROR.<br />
• SI<br />
– Construcción <strong>de</strong>l contexto <strong>de</strong>l nivel <strong>de</strong> usuario (segmentos <strong>de</strong> código, datos y pila, zonas <strong>de</strong><br />
memoria compartida que se encuentran en la zona <strong>de</strong> direcciones virtuales <strong>de</strong>l proceso y las<br />
partes <strong>de</strong>l espacio <strong>de</strong> direcciones virtuales que periódicamente no resi<strong>de</strong>n en memoria<br />
principal <strong>de</strong>bido al swapping o a la paginación) y la parte estática <strong>de</strong>l contexto <strong>de</strong>l nivel <strong>de</strong><br />
sistema (entrada en la tabla <strong>de</strong> procesos, el área <strong>de</strong> usuario y las entradas <strong>de</strong> la tabla <strong>de</strong><br />
regiones por proceso (pregion), tabla <strong>de</strong> regiones y tabla <strong>de</strong> páginas) <strong>de</strong>l proceso hijo.<br />
+ Comprobaciones <strong>de</strong> la existencia <strong>de</strong> los recursos necesarios en el proceso padre para<br />
que pue<strong>de</strong>n ser copiados en el proceso hijo y actualizados a nivel global.<br />
+ Buscar una entrada libre en la tabla <strong>de</strong> procesos para el proceso hijo ⇒ Buscar una<br />
entrada libre en la tabla <strong>de</strong> procesos y la reserva para el proceso hijo.<br />
+ Número <strong>de</strong> ID (PID) único para el proceso nuevo. Determinar un i<strong>de</strong>ntificador <strong>de</strong><br />
proceso para el proceso hijo. Este número es único e invariable durante toda la vida<br />
<strong>de</strong>l proceso y es la clave para po<strong>de</strong>r controlarlo <strong>de</strong>s<strong>de</strong> otros procesos.<br />
+ Proceso hijo en estado “Creado”, aunque necesita completar algunos parámetros para<br />
pasar al estado <strong>de</strong> “Listo para su ejecución en memoria principal o en el área <strong>de</strong><br />
swap”.<br />
+ Inicializar la entrada <strong>de</strong>l proceso hijo en la tabla <strong>de</strong> procesos ⇒ copiar la entrada en la<br />
tabla <strong>de</strong> procesos <strong>de</strong>l proceso padre.<br />
+ Asignar el ID (PID) <strong>de</strong>l proceso hijo a la entrada <strong>de</strong> la tabla <strong>de</strong> procesos <strong>de</strong>l proceso<br />
padre y al proceso hijo el PID 0.<br />
+ Inicializar parámetros para la planificación (scheduler).<br />
+ Incrementar la cuenta <strong>de</strong> referencias (contadores) al inodo <strong>de</strong>l directorio actual y la<br />
raíz <strong>de</strong>l proceso padre ⇒ En las tablas globales <strong>de</strong>l kernel, tabla <strong>de</strong> archivos y la tabla<br />
<strong>de</strong> inodos, se incrementan los contadores que indican cuántos procesos tienen abiertos<br />
esos archivos.<br />
+ El proceso hijo hereda la raíz <strong>de</strong>l proceso padre.<br />
+ Asociar al proceso hijo los archivos asociados al proceso padre ⇒ Copiar <strong>de</strong>l proceso<br />
padre al proceso hijo la tabla <strong>de</strong> control <strong>de</strong> archivos locales al proceso, como pue<strong>de</strong> ser<br />
la tabla <strong>de</strong> <strong>de</strong>scriptores <strong>de</strong> archivos.<br />
+ Reservar memoria para u-Area, regiones y tablas <strong>de</strong> páginas para el proceso hijo.<br />
+ Duplicar cada región <strong>de</strong>l proceso padre asignándosela al proceso hijo.<br />
+ Sistema swapping ⇒ Duplicar regiones <strong>de</strong> memoria no compartidas en el área <strong>de</strong><br />
swap.<br />
+ Las secciones que <strong>de</strong>ben ser compartidas, como el código o las zonas <strong>de</strong> memoria<br />
compartida, no se copian, sino que se incrementan los contadores asociados a ellas que<br />
indican cuántos procesos comparten esas zonas.<br />
+ Las áreas <strong>de</strong> usuario (u-Areas) son iguales excepto en el puntero <strong>de</strong> entrada a la tabla<br />
<strong>de</strong> procesos.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>30