12.10.2014 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!