titulo.jpg (22800 bytes)

 

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