|
| |
Up Definición de Proceso Modelo de Procesos Operaciones sobre Procesos Cambio de Contexto Procesos Cooperantes Threads
Modelo de Procesos
Para permitir la multiprogramación y la concurrenciase requiere
de un modelo de procesos que ofrezca el soporte necesario para proveerla.
Cuando se habla de concurrencia entre procesos se refiere al
hecho de poder tener varios procesos usuarios parcialmente ejecutados en un momento
determinado, con la sensación de que todos los procesos estuvieran corriendo
simultáneamente (por el tiempo compartido) aunque realmente sólo un proceso a la vez se
ejecuta en el CPU.
Las operaciones de E/S son acciones que se ejecutan en paralelo
con las acciones del CPU. Esto es paralelismo real. Muchas veces, a la concurrencia
también se le llama ``paralelismo virtual''.
Este modelo de procesos es seguido por la mayoría de los sitemas
de operación de hoy en día y considera los siguientes aspectos:
- PCB (Process Control Block)
Es
una estructura usada por el sistema de operación para mantener la información necesaria
de cada proceso. El contenido varía de acuerdo al sistema de operación pero la
información general que debe contener se puede resumir en:
- Identificadores númericos:
- Identificador del procesos en si
- Identificador del proceso padre (quién lo creó)
- Identificador del usuario.
- Información del manejo de memoria:
- Registros base y límite
- Tabla de páginas o de segmentos
- Información del estado del procesador:
- Registros visibles al usuario
- Registros de estado y control: pc, modo de ejecución, flags, etc.
- Apuntadores del stack
- Información de control de proceso:
- Información de estado y planificación: estado del proceso,
prioridad, evento por el cual espera, etc.
- Estructuración de datos: formación de anillos con otros
procesos, apuntador de secuencia de listas, apuntadores a los archivos, archivos abietos.
- Comunicación entre procesos
- Privilegios del proceso
- Administración de memoria
- Utilización de recursos.
En el PCB se guarda la información sobre todo el edo. del
proceso cuando éste es suspendido o cuando es interrumpido. Esto asegura que cuando el
proceso vuelva a ejecución tendrá exactamente el mismo estado anterior a la
interrupción.
El PCB es la estructura más importante dentro del sistema de
operación.
- Tabla de Procesos
Es la
estructura donde se mantienen los PCBs de los procesos usuarios. Aqui se encuentran
registrados los procesos que ya fueron reconocidos por el sistema de operación,
independientemente del estado en que se encuentren. Se actualiza a medida que se van
creando procesos, eliminando procesos o se producen transiciones entre los estados.
- Estados y Transiciones de los Procesos
Caracterizan el comportamiento de los procesos.
new terminated
admit interrupcion exit
Halt
error
ready running
termina E/S despachar E/S o evento de espera
waiting
- New: El proceso está siendo creado pero aún no ha sido
admitido al pool de procesos ejecutables por el sistema de operación.
- Running: El proceso está ejecutando instrucciones. En un
sistema con un solo procesador, sólo habrá un proceso en estado running
- Waiting o Blocked: El proceso espera por algún
evento
- Ready: El proceso está listo para ser ejecutado y espera
por que se le asigne tiempo de CPU.
- Terminated o Exit: Ha finalizado su ejecución ya
sea de forma normal o anormal. En este estado los procesos permanecen mientras el sistema
de operación desasigna sus recursos y extrae información necesaria para tareas de
contabilidad.
Normalmente estos estados son implementados con estructuras como
colas y listas, y lo que realmente mantienen son los PCBs de los procesos.
Las posibles transiciones entre los estados son:
- New a Ready: el sistema de operación moverá un
proceso del estado New al estado Ready cuando esté preparado para tomar un
proceso adicional.
- Ready a Running: cuando es tiempo de seleccionar un
nuevo proceso para correr, el sistema de operación selecciona uno de los procesos en el
estado Ready (despachar).
- Running a Terminated: el proceso que estaba
corriendo actualmente es terminado por el sistema de operación en forma normal o anormal.
- Running a Ready: Cuando se le agota el tiempo de CPU
al proceso que está corriendo y ocurre la interrupción del timer, este proceso
pasa a estado Ready a esperar una próxima oportunidad.
- Running a Waiting: un proceso se pone en estado de
espera si requiere algo por lo cual debe esperar. Normalmente este requerimiento es
realizado a través de llamadas al sistema (por operaciones de E/S, por ejemplo).
- Waiting a Ready: un proceso realiza esta transición
cuando ocurre el evento por el cual estaba bloqueado.
- Ready a Exit: un proceso padre puede terminar un
proceso hijo en cualquier momento, o si el padre termina, todos los procesos hijos
asociados con el padre pueden terminar.
- Waiting a Exit: bajo las mismas condiciones de la
transición anterior.
Todas las transiciones son iniciadas por el sistema de
operación, la única que además, puede ser iniciada por el mismo proceso usuario es la
de running a waiting.
Los tres principales estados descritos hasta aquí (Running,
Ready y Waiting) proveen una forma sistemática de modelar el comportamiento
de procesos y guiar la implementación del sistema de operación. Muchos sistemas de
operación están construidos usando sólo estos tres estados.
Sin embargo, hay buenas razones y justificaciones para agregar
otros estados al modelo. Tales como los estados:
- Waiting Suspend: el proceso está en memoria secundaria
suspendido y esperando por un evento.
- Ready Suspend: el proceso está en memoria secundaria
suspendido temporalmente, pero listo para ejecución, una vez que se reanude.
Cuando un proceso está en un estado suspendido tiene las
siguientes características:
- No está inmediatamente disponible para ejecución.
- Puede o no estar esperando por un evento. Si está esperando por
un evento, la condición de bloqueado es independiente de la condición suspendido, y la
ocurrencia del evento no habilita al proceso para ser ejecutado.
- Fue colocado en estado suspendido por un agente: por él mismo, el
proceso padre o el sistema de operación.
- No puede ser removido de este estado hasta que un agente
explícitamente ordene la reanudación y pase de nuevo a la cola Ready o Waiting.
Nuevas transiciones
- Waiting a Waiting Suspend: si no hay procesos en la
cola Ready, entonces al menos un proceso de la cola Waiting es swapped
out para dar espacio a otro proceso que no esté bloqueado. Esta transición puede ser
hecha aún si hay procesos en Ready disponibles, si el sistema de operación
determina que el proceso que está es estado Running o los que están es estado Ready
requieren más memoria principal para mantener un desempeņo adecuado.
- Waiting Suspend a Ready Suspend: esta transición la
realiza un proceso cuando el evento por el cual estaba esperando ocurre. Esto requiere que
la información de estado concerniente a los procesos suspendidos debe estar al alcance
del sistema de operación.
- Ready Suspend a Ready: cuando no hay procesos Ready
en memoria principal, el sistema de operación requerirá traer uno para que continue su
ejecución. En adición, podría ser el caso que un proceso en la cola Ready Suspend
tenga mayor prioridad que los que están en cola Ready.
- Ready a Ready Suspend: Normalmente el sistema de
operación podría podría preferir suspender un proceso bloqueado en lugar de uno que
esté listo para ejecución. Sin embargo podría ser necesario suspender un proceso listo,
si es la única forma de liberar suficiente espacio de memoria.
- Waiting Suspend a Waiting: se reanuda un proceso
previamente suspendido y aun no ha ocurrido el evento por el cual esperaba. Normalmente
cuando se requiere traer un proceso de nuevo a memoria principal, el sistema de operación
seleccionará uno que esté listo para correr (ya sea de Ready Suspend o de New.
Así, que esta transición no debería ser de las más comunes.
- Running a Ready Suspend: esta transición sucede si
el proceso que está actualmente corriendo se suspende voluntariamente.
Razones para suspender un proceso
- Necesidades de swapping: El sistema de operación necesita
liberar suficiente memoria principal para traer otro proceso que está listo para
ejecución. Si a un proceso se le hace swap out se baja de memoria principal a
memoria secundaria, donde permanece parcialmente ejecutado. En algún momento posterior,
el sistema de operación lo volverá a cargar a memoria principal (swap in) para
que continue su ejecución.
Supongamos que en un sistema
hay muchos procesos con E/S, en este caso la mayoría del tiempo estos procesos estarán
en las colas Waiting y el CPU probablemente estará ocioso. Este es el caso en que
las colas de espera estarán congestionadas y la cola Ready vacía. Ante esta baja
utilización de CPU, el sistema de operación puede decidir hacer swap out a uno o
más procesos bloqueados, colocarlos en la cola Waiting Suspend y darle paso a
otros procesos que están en la cola New listos para correr.
Otra razón para requerir swapping es para graduar el
grado de multiprogramación.
El grado de multiprogramación está dado por el número de
procesos que actualmente están cargados en memoria principal (en cualquier estado) y
eventualmente pueden correr.
El sistema de operación podría decidir bajar el grado de
multiprogramación para mejorar el desempeņo de ciertos procesos.
- El sistema de operación puede suspender un proceso background,
un proceso utilitario o un proceso del cual se sospeche esté causando problemas.
- Un usuario puede desear suspender la ejecución de un proceso para
própositos de depuración o por el uso de un recurso no disponible.
- Un proceso puede ejecutarse periodicamente (por ejemplo, un
proceso que monitorea el sistema) y suspenderse mientras espera por el próximo intervalo
de tiempo de ejecución.
- Un proceso padre puede requerir la suspención de la ejecución de
un descendiente para examinar o modificar el proceso suspendido o coordinar la actividad
de varios descendientes.
Note que no todos los casos requieren hacer el swap out
del proceso suspendido. Los estados suspendidos pueden ser usados para evitar la
ejecución de ciertos procesos sin tener que bajarlos de memoria principal.
Ejemplo: Diagrama de estado y transiciones de los procesos en
Unix.
suspendido
signal signal
inicializa asigna CPU exit
idle ready running zombified
ocurre espera por evento
el evento
waiting/
sleeping
Procesos huérfanos:
Cuando un proceso padre muere antes que el proceso hijo, este
proceso queda huérfano y es adoptado por el proceso ``init''
Procesos zombies:
Un proceso que termina no puede abandonar el sistema hasta que su
padre acepte su código de retorno. Si el proceso padre ya está muerto, es adoptado por
el proceso ``init'' el cual siempre acepta los códigos de retorno de sus hijos. Sin
embargo, si el proceso padre está vivo pero nunca ejecuta un wait(), el código de
retorno del proceso nunca será aceptado y tal proceso se convierte en zombie.
Un proceso zombie no tiene ni código, ni stack, ni datos, pero
continua habitando en la tabla de procesos (que es de tamaņo fijo)
- Vector de Interrupciones
Contiene
la dirección del procedimiento del servicio de interrupción. Este representa todas las
direcciones de los procesos del sistema de operación.
Normalmente se encuentra alojado en la parte más baja de la
memoria.
Yudith Cardinale
Wed Sep 30 11:36:05 AST 1998
|