Este documento describe los conceptos básicos de los procesos en sistemas operativos, incluyendo los estados de los procesos, diagramas de formación de procesos, modelos de estados, procesos suspendidos, comunicación entre procesos, e implementación y planificación de procesos. El documento también cubre temas como niveles de planificación, problemas del productor y consumidor, y exclusión mutua.
1. Universidad Autonoma de Santo Domingo (UASD)
Facultad de Ciencias
Escuela de Informatica
Sistemas Operativos
Clave: INF-324
Sesion: 01
Profesor: Jose Binet
Estudiante:
Oscar Sanchez
Amarylis Sanchez
Matricula:
BF-0076
Blog: http://oscar-sanchez-d.blogspot.com/
Tema: Procesos
2. Indice
1. Introducción
2. Procesos
3. Estados de un Proceso
3.1 Diagrama de Formacion de un Proceso.
3.2 Modelo de Dos Estados
3.3 Modelo de Cinco Estados
4. Procesos Supendidos (Hold)
5. Implantación de los procesos
6. Comunicación entre procesos
7. Planificación de procesos
8. Niveles de planificación
9. Planificación a largo plazo
10. Planificación a mediano plazo
11. Colas multiples
12. Procesos ligeros
13. Señales
14. Conclusion.
15. Infografia / Bibliografia
3.
4. Introducción
El siguiente documento describe las características que presentan los sistemas operativos para la
administración de procesos en los sistemas mono y multiprocesadores. Se comienza con una
introducción sobre la funcionalidad de un proceso para luego entrar en los detalles de implementación
típicos de los sistemas operativos.
Procesos
¿Qué es un proceso?
Un proceso es un programa en ejecución. Un proceso simple tiene un hilo de ejecución, por el
momento dejemos esta última definición como un concepto, luego se verá en más detalle el concepto
de hilo. Una vez definido que es un proceso nos podríamos preguntar cuál es la diferencia entre un
programa y un proceso, y básicamente la diferencia es que un proceso es una actividad de cierto tipo
que contiene un programa, entradas salidas y estados.
Los procesos pueden ser cooperantes o independientes, en el primer caso se entiende que los procesos
interactúan entre sí y pertenecen a una misma aplicación. En el caso de procesos independientes en
general se debe a que no interactúan y un proceso no requiere información de otros o bien porque son
procesos que pertenecen a distintos usuarios.
5. Estados de los procesos
Un proceso puede estar en cualquiera de los siguientes tres estados: Listo, En ejecución y
Bloqueado.
Los procesos en el estado listo son los que pueden pasar a estado de ejecución si el planificador los
selecciona. Los procesos en el estado ejecución son los que se están ejecutando en el procesador en ese
momento dado. Los procesos que se encuentran en estado bloqueado están esperando la respuesta de
algún otro proceso para poder continuar con su ejecución. Por ejemplo operación de E/S.
El principal trabajo del procesador es ejecutar las instrucciones de máquina que se encuentran en
memoria principal. Estas instrucciones se encuentran en forma de programas. Para que un programa
pueda ser ejecutado, el sistema operativo crea un nuevo proceso, y el procesador ejecuta una tras otra
las instrucciones del mismo. En un entorno de multiprogramación, el procesador intercalará la
ejecución de instrucciones de varios programas que se encuentran en memoria. El sistema operativo es
el responsable de determinar las pautas de intercalado y asignación de recursos a cada proceso.
Un proceso es un programa en ejecución, los procesos son gestionados por el sistema operativo y están
formados por:
• Las instrucciones de un programa destinadas a ser ejecutadas por el microprocesador.
• Su estado de ejecución en un momento dado, esto es, los valores de los registros de la CPU para
dicho programa.
• Su memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos.
• Otra información que permite al sistema operativo su planificación.
Esta definición varía ligeramente en el caso de sistemas operativos multihilo, donde un proceso consta
de uno o más hilos, la memoria de trabajo (compartida por todos los hilos) y la información de
planificación. Cada hilo consta de instrucciones y estado de ejecución.
Los procesos son creados y destruidos por el sistema operativo, así como también este se debe hacer
cargo de la comunicación entre procesos, pero lo hace a petición de otros procesos. El mecanismo por
el cual un proceso crea otro proceso se denomina bifurcación (fork). Los nuevos procesos pueden ser
independientes y no compartir el espacio de memoria con el proceso que los ha creado o ser creados en
el mismo espacio de memoria.
En los sistemas operativos multihilo es posible crear tanto hilos como procesos. La diferencia estriba en
que un proceso solamente puede crear hilos para sí mismo y en que dichos hilos comparten toda la
memoria reservada para el proceso.
6. Diagrama de formación de un proceso
Se trata de la utilización de dos archivos, un objeto ejecutable y una biblioteca del sistema, que después
se colocan en la imagen del proceso dentro de la memoria RAM y posteriormente también se dan de
alta dentro de la tabla de procesos, Bloque de control del proceso.
Modelo de dos estados
El modelo de estados más simple es el de dos estados. En este modelo, un proceso puede estar
ejecutándose o no. Cuando se crea un nuevo proceso, se pone en estado de No ejecución. En algún
momento el proceso que se está ejecutando pasará al estado No ejecución y otro proceso se elegirá de
la lista de procesos listos para ejecutar para ponerlo en estado Ejecución. De esta explicación se
desprende que es necesario que el sistema operativo pueda seguirle la pista a los procesos, conociendo
su estado y el lugar que ocupa en memoria. Además los procesos que no se están ejecutando deben
guardarse en algún tipo de cola mientras esperan su turno para ejecutar.
7. Modelo de cinco estados
Diagrama de 5 estados
El modelo anterior de 2 estados funcionaría bien con una cola FIFO y planificación por turno rotatorio
para los procesos que no están en ejecución, si los procesos estuvieran siempre listos para ejecutar. En
la realidad, los procesos utilizan datos para operar con ellos, y puede suceder que no se encuentren
listos, o que se deba esperar algún suceso antes de continuar, como una operación de Entrada/Salida. Es
por esto que se necesita un estado donde los procesos permanezcan esperando la realización de la
operación de Entrada Salida por parte del Sistema Operativo hasta que puedan proseguir. Se divide
entonces al estado No ejecución en dos estados: Listo y Espera. Se agregan además un estado Nuevo y
otro Terminado.
Los cinco estados de este diagrama son los siguientes según Osëliyo:
• Ejecución: el proceso está actualmente en ejecución.
• Listo: el proceso está listo para ser ejecutado, sólo está esperando que el planificador de corto
plazo así lo disponga.
• Espera: el proceso no puede ejecutar hasta que no se produzca cierto suceso, como la
finalización de una operación de Entrada/Salida solicitada por una llamada al sistema operativo.
• Nuevo: El proceso recién fue creado y todavía no fue admitido por el sistema operativo. En
general los procesos que se encuentran en este estado todavía no fueron cargados en la memoria
principal.
• Terminado: El proceso fue expulsado del grupo de procesos ejecutables, ya sea porque terminó
o por algún fallo, como un error de protección, aritmético, etc.
Los nuevos estados Nuevo y Terminado son útiles para la gestión de procesos. En este modelo los
estados Espera y Listo tienen ambos colas de espera. Cuando un nuevo proceso es admitido por el
sistema operativo, se sitúa en la cola de listos. A falta de un esquema de prioridades ésta puede ser una
cola FIFO. Cuando se da un suceso se pasan a la cola de listos los procesos que esperaban por ese
suceso.
Si existe un esquema con diferentes niveles de prioridad de procesos es conveniente mantener varias
colas de procesos listos, una para cada nivel de prioridad, lo que ayuda a determinar cuál es el proceso
que más conviene ejecutar a continuación.
8. Asimismo, existen varias colas en estado de espera, como mínimo una por cada periférico.
Una de las razones para implementar el estado Espera era poder hacer que los procesos se puedan
mantener esperando algún suceso, por ejemplo una Entrada/Salida. Sin embargo, al ser mucho más
lentas estas operaciones, puede suceder que en nuestro modelo de cinco estados todos los procesos en
memoria estén esperando en el estado Espera y que no haya más memoria disponible para nuevos
procesos. Podría conseguirse más memoria, aunque es probable que esto sólo permita procesos más
grandes y no necesariamente nuevos procesos. Además hay un costo asociado a la memoria y de
cualquier forma es probable que se llegaría al mismo estado con el tiempo. Otra solución es el
intercambio. El intercambio se lleva a cabo moviendo una parte de un proceso o un proceso completo
desde la memoria principal al disco, quedando en el estado Suspendido. Después del intercambio, se
puede aceptar un nuevo proceso o traer a memoria un proceso suspendido anteriormente. El problema
que se presenta ahora es que puede ser que si se decide traer a memoria un proceso que está en el
estado Suspendido, el mismo todavía se encuentre en espera. Sólo convendría traerlo cuando ya está
listo para ejecutar, esto implica que ya aconteció el suceso que estaba esperando. Para tener esta
diferenciación entre procesos suspendidos, ya sean listos como en espera, se utilizan cuatro estados:
Listo, Espera, Espera y suspendido y Listo y suspendido.
Procesos Suspendidos (Hold)
Dos o más procesos pueden cooperar mediante señales de forma que uno obliga a detenerse a los otros
hasta que reciban una señal para continuar.
• Se usa una variable de tipo Semáforo para sincronizar los procesos.
• Si un proceso está esperando una señal, se suspende (Hold) hasta que la señal se envíe
(SIGNAL).
• Se mantiene una cola de procesos en espera en el semáforo.
• La forma de elegir los procesos de la cola en ESPERA es mediante una política FIFO (First In
First Out) también llamada FCFS (First Come First Served), Round Robin, etc.
La sincronización explícita entre procesos es un caso particular del estado "bloqueado". En este caso, el
suceso que permite desbloquear un proceso no es una operación de entrada/salida, sino una señal
generada a propósito por el programador desde otro proceso.
9. Implantación de los procesos
La implementación del modelo de procesos se logra debido a que el sistema operativo almacena en una
tabla denominada tabla de control de procesos información relativa a cada proceso que se esta
ejecutando en el procesador. Cada línea de esta tabla representa a un proceso.
La información que se almacena es la siguiente:
1) Identificación del proceso.
2) Identificación del proceso padre.
3) Información sobre el usuario y grupo.
4) Estado del procesador.
5) Información de control de proceso
6) Información del planificador.
7) Segmentos de memoria asignados.
8) Recursos asignados.
Comunicación entre procesos
Condiciones de competencia
Las condiciones de competencia se dan cuando dos o más procesos intentan acceder a un mismo
recurso.
10. Secciones críticas
Para solucionar las condiciones de competencia se implementó un modelo para prohibir que dos
procesos accedan al mismo recurso. El modelo en cuestión se denomina exclusión mutua.
Exclusión mutua con espera ocupada
Las soluciones con espera ocupada funcionan de la siguiente manera, cuando un proceso intenta
ingresar a su región crítica, verifica si esta permitida la entrada. Si no, el proceso se queda esperando
hasta obtener el permiso.
Desactivación de interrupciones
El método más simple para evitar las condiciones de competencia es hacer que cada proceso
desactive todas sus interrupciones antes de entrar a su sección crítica y las active una vez que salio de
la misma. Este modelo como se puede observar tiene un gran problema y es que si se produce una falla
mientras que el proceso esta en la región crítica no se puede salir de la misma y el sistema operativo no
recuperaría el control.
Variables cerradura
En éste caso se genera una variable la cual puede tener dos valores o bien 0 (no hay ningún proceso
en su sección crítica) o bien 1 (indicando que la sección crítica está ocupada) entonces cada proceso
antes de ingresar a la sección crítica verifica el estado de la variable de cerradura y en caso de que la
misma este en 0, le cambia el valor e ingresa a la misma y en caso de que la misma sea 1 el proceso se
queda verificando el estado de la misma hasta que el mismo sea 0.
11. El problema aquí se presenta si dos procesos verifican al mismo tiempo que la variable cerradura esta
en 0 e ingresan a la región crítica.
Alternancia estricta
El algoritmo de alternancia estricta no bloquea el ingreso a la región crítica cuando otro proceso se
esta ejecutando. El problema de ésta solución es que cuando un proceso no esta en la sección crítica
igualmente tiene bloqueado el acceso a la misma y por lo tanto no permite que otro proceso que
requiera ingresar a la misma logre hacerlo.
Dormir y despertar
El modelo de espera acotada tienen el inconveniente que se desperdicia tiempo de procesador.
El problema del productor y el consumidor
El problema del productor y el consumidor describe el echo de que cuando hay dos o más procesos
interactuando a través de un buffer común habiendo procesos que ponen información o datos y otros
que los sacan se pueden llegar a dar condiciones en las cuales los procesos que ingresan los datos no
puedan hacerlo debido a que el buffer ya se encuentra lleno y para el caso de los que sacan los datos del
buffer intenten sacar datos cuando ya no hay nada que sacar. Para evitar estas condiciones se
desarrollaron métodos de comunicación/sincronización entre procesos en los cuales se impide que esto
suceda haciendo que el proceso productor "duerma" si el buffer está lleno y una vez que exista espacio
el proceso "consumidor" despierte al productor para que siga generando o viceversa.
Planificación de procesos
12. La planificación es el proceso por el cual el sistema operativo selecciona que proceso ejecutar. La
selección del proceso se basa en alguno de los algoritmos de planificación que se describen más abajo.
Niveles de Planificación
La planificación de la CPU, en el sentido de conmutarla entre los distintos procesos, es una de las
funciones del sistema operativo. Este despacho es llevado a cabo por un pequeño programa llamado
planificador a corto plazo o dispatcher (despachador). La misión del dispatcher consiste en asignar la
CPU a uno de los procesos ejecutables del sistema, para ello sigue un determinado algoritmo. En
secciones posteriores estudiaremos algunos algoritmos posibles. Para que el dispatcher conmute el
procesador entre dos procesos es necesario realizar un cambio de proceso.
Los acontecimientos que pueden provocar la llamada al dispatcher dependen del sistema (son un
subconjunto de las interrupciones), pero son alguno de estos:
• El proceso en ejecución acaba su ejecución o no puede seguir ejecutándose (por una E/S,
operación WAIT, etc).
• Un elemento del sistema operativo ordena el bloqueo del proceso en ejecución (ver estados de
un proceso).
• El proceso en ejecución agota su cuantum o cuanto de estancia en la CPU.
• Un proceso pasa a estado listo.
Hay que destacar el hecho de que cuanto menos se llame al dispatcher menos tiempo ocupa la CPU
un programa del sistema operativo, y, por tanto, se dedica más tiempo a los procesos del usuario (un
cambio de proceso lleva bastante tiempo).
Así, si sólo se activa el dispatcher como consecuencia de los 2 primeros acontecimientos se estará
haciendo un buen uso del procesador. Este criterio es acertado en sistemas por lotes en los que los
programas no son interactivos. Sin embargo, en un sistema de tiempo compartido no es adecuado, pues
un proceso que se dedicara a realizar cálculos, y no realizara E/S, monopolizaría el uso de la CPU. En
estos sistemas hay que tener en cuenta el conjunto de todos los procesos, activándose el dispatcher con
la circunstancia tercera y, posiblemente, la cuarta. Los sistema operativos en que las dos siguientes
circunstancias no provocan la activación del dispatcher muestran preferencia por el proceso en
ejecución, si no ocurre esto se tiene más en cuenta el conjunto de todos los procesos
13. Se puede definir el scheduling -algunas veces traducido como -planificación- como el conjunto de
políticas y mecanismos construidos dentro del sistema operativo que gobiernan la forma de conseguir
que los procesos a ejecutar lleguen a ejecutarse.
El scheduling está asociado a las cuestiones de:
• Cuándo introducir un nuevo proceso en el Sistema.
• Determinar el orden de ejecución de los procesos del sistema.
14. El scheduling está muy relacionado con la gestión de los recursos. Existen tres niveles de scheduling,
como se ilustra en la figura 1.1, estos niveles son:
• Planificador de la CPU o a corto plazo.
• Planificador a medio plazo.
Planificador a largo plazo.
Planificación a largo plazo
Este planificador está presente en algunos sistemas que admiten además de procesos interactivos
trabajos por lotes. Usualmente , se les asigna una prioridad baja a los trabajos por lotes, utilizándose
estos para mantener ocupados a los recursos del sistema durante períodos de baja actividad de los
procesos interactivos. Normalmente, los trabajos por lotes realizan tareas rutinarias como el cálculo de
nóminas; en este tipo de tareas el programador puede estimar su gasto en recursos, indicándoselo al
sistema. Esto facilita el funcionamiento del planificador a largo plazo.
El objetivo primordial del planificador a largo plazo es el de dar al planificador de la CPU una
mezcla equilibrada de trabajos, tales como los limitados por la CPU (utilizan mucho la CPU) o la E/S.
Así, por ejemplo, cuando la utilización de la CPU es baja, el planificador puede admitir más trabajos
para aumentar el número de procesos listos y, con ello, la probabilidad de tener algún trabajo útil en
espera de que se le asigne la CPU. A la inversa, cuando la utilización de la CPU llega a ser alta, y el
tiempo de respuesta comienza a reflejarlo, el planificador a largo plazo puede optar por reducir la
frecuencia de admisión de trabajos.
Normalmente, se invoca al planificador a largo plazo siempre que un proceso termina. La frecuencia de
invocación depende, pues, de la carga del sistema, pero generalmente es mucho menor que la de los
otros dos planificadores. Esta baja frecuencia de uso hace que este planificador pueda permitirse
utilizar algoritmos complejos, basados en las estimaciones de los nuevos trabajos.
15. Planificación a Medio Plazo
En los sistemas de multiprogramación y tiempo compartido varios procesos residen en la
memoria principal. El tamaño limitado de ésta hace que el número de procesos que residen en ella sea
finito. Puede ocurrir que todos los procesos en memoria estén bloqueados, desperdiciándose así la
CPU. En algunos sistemas se intercambian procesos enteros (swap) entre memoria principal y memoria
secundaria (normalmente discos), con esto se aumenta el número de procesos, y, por tanto, la
probabilidad de una mayor utilización de la CPU.
El planificador a medio plazo es el encargado de regir las transiciones de procesos entre memoria
principal y secundaria, actúa intentando maximizar la utilización de los recursos. Por ejemplo,
transfiriendo siempre a memoria secundaria procesos bloqueados, o transfiriendo a memoria principal
procesos bloqueados únicamente por no tener memoria.
Expulsión
Es la característica por el cual el sistema operativo puede o no expulsar del estado de ejecución a un
proceso dado. En este sentido entonces tenemos la planificación apropiativa en la cual el sistema
operativo puede cortar en cualquier momento la ejecución de un proceso y la planificación no
apropiativa en la cual una vez que el proceso esta en ejecución el sistema operativo no puede sacarlo de
ese estado.
Objetivos de la planificación
Los objetivos de la planificación de proceso son:
• Equidad, todos los procesos deben poder ejecutarse
• Eficacia, mantener ocupada la CPU un 100% del tiempo
• Tiempo de respuesta, minimizar el tiempo de respuesta al usuario
• Tiempo de regreso, minimizar el tiempo que deben esperar los usuarios por lotes para obtener
sus resultados
• Rendimiento, maximizar el número de tareas procesadas por hora.
16. Algoritmos de planificación
Los algoritmos de planificación son los que definen que política se va a seguir para que un proceso
pase al estado de ejecución.
Planificación Round-Robin
En este tipo de planificación cada proceso tiene asignado un quantum de tiempo para ejecutarse y en
el caso de que no pueda terminar la ejecución en su quantum el proceso pasa de nuevo a la cola de
procesos para ser ejecutado por otro quantum luego de recorrer la cola para asegurarse que todos los
procesos reciban ese quantum de procesamiento.
Planificación por prioridad
En la planificación round-robin todos los procesos son tratados con la misma prioridad. Para el caso
de este tipo de planificación a cada proceso se le asigna una prioridad y los mismos son ejecutados
Colas múltiples
Las colas múltiples están basadas en una pila que sirve como índice de una lista de procesos que se
tienen que ejecutar.
Primero el trabajo más corto
Este tipo de algoritmo de planificación se usa para trabajos en batch o de procesamiento or lotes en
los cuales se puede saber cual es el tiempo de duración de la ejecución de cada proceso y entonces se
puede seleccionar primero el trabajo más corto. El problema que se presenta con éste algoritmo es que
los grandes procesos podrían sufrir de inanición dado que cualquier proceso pequeño se "cuela" sobre
uno de mayor tamaño y como resultado final se podría dar el caso que el proceso grande nunca obtenga
procesamiento.
Planificación garantizada
17. En este modelo de planificación se tiene en cuenta la cantidad de usuarios en el sistema y se le
asigna a cada uno el tiempo de ejecución de 1/n (siendo n la cantidad total de usuarios) de esa forma el
planificador tiene que llevar cuenta del tiempo de ejecución de los procesos y balancear el tiempo que
están utilizando el procesador para cumplir con la ecuación previa.
Procesos ligeros
Los procesos ligeros son programas en ejecución son básicamente procesos pero a diferencia de éstos
últimos que solo tienen un hilo de ejecución los primeros tienen el hilo principal más hilos secundarios
o hijos, en éste caso todos los procesos hijos comparten la información del hilo principal pero además
puede cada hilo tener su información privada.
Dentro de la información propia tenemos:
• Contador de programa
• Pila
• Registros.
• Estado del proceso ligero.
• Dentro de la información compartida tenemos:
• Variables globales.
• Archivos abiertos
• Señales
• Semáforos.
• Contabilidad.
Señales
Las señales son el mecanismo de comunicación que se establece entre los procesos. Para comparar se
puede decir que las señales son a los procesos lo que las interrupciones son al procesador. Cuando un
proceso recibe una señal detiene su ejecución, bifurca a la rutina del tratamiento de la señal que esta en
el mismo proceso y luego una vez finalizado sigue la ejecución en el punto que había bifurcado
anteriormente.
Las señales se pueden originar en un proceso o bien en el sistema operativo. Las señales se pueden
enviar entre procesos, solo los que tengan el mismo uid, o bien el sistema operativo puede enviarle una
señal a un proceso, por ejemplo excepciones de ejecución.
18. Conclusion
Ya conocimos que es un proceso, ya sabemos quien controla los procesos de nuestro computador pero
también podemos decir que:
o Loprocesos son creados y destruidos por el sistema operativo, así como también este se debe
hacer cargo de la comunicación entre procesos.
o El mecanismo por el cual un proceso crea otro proceso se denomina bifurcación.
o El sistema operativo es el responsable de determinar las pautas de intercalado y asignación de
recursos a cada proceso.
o Si existe un esquema con diferentes niveles de prioridad de procesos es conveniente mantener
varias colas de procesos listos, una para cada nivel de prioridad, lo que ayuda a determinar cuál
es el proceso que más conviene ejecutar a continuación.
o La sincronización explícita entre procesos es un caso particular del estado "bloqueado". En
este caso, el suceso que permite desbloquear un proceso no es una operación de entrada/salida,
sino una señal generada a propósito por el programador desde otro proceso.