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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!