2.3.1 Modelo de dos estados
El modelo más sencillo que puede construirse tiene en cuenta que, en un momento dado, un proceso puede estar ejecutándose en el procesador o no. Así pues, un proceso puede estar en uno de dos estados: Ejecución o No Ejecución. Esto queda ilustrado en la figura 2.3.1.
Cuando el sistema operativo crea un nuevo proceso, éste entra en el sistema en estado de No Ejecución. De este modo, el proceso existe, es conocido por el sistema operativo y está esperando la oportunidad de ejecutarse. De cuando en cuando, el proceso que está ejecutando será interrumpido y el programa distribuidor del sistema operativo seleccionará un nuevo proceso para que se ejecute. El proceso anterior pasa del estado de Ejecución al estado de No Ejecución y uno de los demás procesos pasará al estado de Ejecución.
Incluso en este modelo tan simple, ya se comienzan a apreciar algunos de los elementos de diseño del sistema operativo. Cada proceso debe representarse de forma que el sistema operativo pueda seguirle la pista. Esto es, debe haber información relativa a cada proceso, incluyendo su estado actual y su posición en memoria. Aquellos procesos que no están ejecutándose tienen que guardarse en algún tipo de cola, para que esperen su turno de ejecución.
Fig.2.3.1 Esquema de un diagrama de dos estados.
Aquellos procesos que no estén en estado de ejecución deberán almacenarse en algún tipo de estructura de datos mientras esperan que el sistema operativo les otorgue el control sobre el procesador. La siguiente figura 2.3.2 propone una estructura basada en una cola de procesos.
Fig.2.3.2 Esquema de un sistema de cola FIFO.
Dicha cola consiste en una lista enlazada de bloques en la que cada uno de estos bloques representa a un proceso. Cada bloque consistirá en un puntero a la estructura de datos donde el SO guarda toda la información relativa al proceso. El comportamiento del SO, en este caso, es similar al de un gestor de colas.
Así, cada vez que el SO cree un nuevo proceso se introducirá el correspondiente bloque al final de la cola, acción que también se llevará a cabo cuando un proceso sea expropiado del procesador en favor de otro o cuando se bloquee en espera de que se complete una operación de E/S. Cuando un proceso termine su ejecución, será descartado del sistema. Si todos los procesos estuvieran siempre listos para ejecutar, la disciplina de comportamiento de cola presentada sería eficaz.
El modelo de cola sigue un comportamiento FIFO (First In-First Out) y el procesador opera siguiendo un turno rotatorio con los procesos disponibles. De esta forma, a cada proceso de la cola se le otorga una cierta cantidad de tiempo para ejecutar. Si no se presentan bloqueos y transcurrido éste volverá a la cola para optar de nuevo a tener control sobre el procesador. Sin embargo, esta implementación no es adecuada debido a que algunos procesos en estado de no ejecución estarán listos para ejecutar, mientras que otros se encontrarán a la espera de obtener algún recurso solicitado o a que se complete una operación de E/S. Así pues, el SO puede no entregar el procesador al proceso que se encuentre al frente de la cola. Si éste está bloqueado, tendrá que recorrer la cola buscando el primer proceso que no lo esté y que lleve más tiempo en espera.
Una forma más natural de afrontar esta situación es dividir el estado de no ejecución en dos; los estados listo y bloqueado. Además, se añadirán dos nuevos estados al sistema. Estos estados son: nuevo y terminado, que resultan de utilidad para las labores de gestión de procesos. Así se dará lugar al modelo de 5 estados.