Sunteți pe pagina 1din 18

Administracin de Procesos

Sistemas Operativos

2.- Administracin de Procesos


Los conceptos de Proceso , Procesamiento concurrente y Procesamiento paralelo son fundamentales para el entendimiento y comprensin de los sistemas operativos modernos. Un proceso es una abstraccin de un programa en ejecucin y es la unidad de trabajo del sistema. El sistema, a su vez, est formado por un conjunto de procesos que se ejecutan concurrentemente, y bsicamente el sistema maneja tanto procesos del sistema operativo (aquellos que ejecutan cdigo del sistema), como procesos de los usuarios (aquellos que ejecutan el cdigo de los usuarios). En este captulo hablaremos del concepto de proceso como modelo e identificaremos los estados posibles en que ste se puede encontrar. Otro de los conceptos importantes de los sis temas operativos modernos, est muy relacionado con el concepto de proceso, este concepto se le conoce como Hebra de control o bien Proceso Liviano. Este concepto ha surgido en los ltimos aos, y viene incorporado en algunos sistemas, en su ncleo o bien son paquetes que se montan en modo usuario. Adems, este captulo contempla la exposicin de varios mtodos que se utilizan para la administracin de procesos, planificacin de la CPU, la comunicacin y sincronizacin de procesos.

2.1.- Conceptos fundamentales


El primer concepto que analizaremos en esta seccin corresponde a proceso , que es la base para entender muchos otros conceptos que se manejan en el sistema operativo. Proceso Como ya se mencion en el captulo anterior, un proceso es una abstraccin de un programa en ejecucin, compuesto por el cdigo ejecutable, una seccin de datos que contiene las variables globales, una seccin de stack o pila que contiene datos temporales, tales como parmetros de subrutinas, direcciones de retornos y variables temporales; y el estado de los registros del procesador. El programa corresponde a una entidad pasiva, en cambio el proceso corresponde a una entidad activa. Hablando de los recursos que utilizan ambos conceptos, podemos decir, que el programa utiliza nicamente memoria secundaria, en cambio el proceso utiliza memoria principal y procesador. En la siguiente figura se aprecian ambos conceptos.
int a; void main() { ... } int X () { ... } int a; void main() { ... } int X () { . .. } cdigo ejecutable

DATOS PILA

registros PC

PROGRAMA PROCESO En los sistemas multiprogramados, de tiempo compartido que operan sobre un computador con un procesador se produce el fenmeno denominado Procesamiento concurrente. Este fenmeno, consiste en que la CPU alterna la ejecucin de los procesos en porciones fijas de tiempo, este fenmeno se le conoce como Seudoparalelismo , en el sentido que ante los ojos de los usuarios dueos de los procesos, la ejecucin de sus procesos es paralela; esta ilusin es producto de que el tiempo fijo que asigna el sistema a cada uno de los procesos es muy pequeo, y por lo tanto difcil de ser percibido por el hombre. Cuando el sistema computacional est provisto de varios procesadores, entonces l puede realizar lo que se denomina Procesamiento paralelo, esto implica que los procesos pueden ser ejecutados efectivamente en distintos procesadores en forma paralela. En la siguiente figura se refleja el fenmeno de la concurrencia:
Un contador de programa A B A C tiempo D Multiprogramacin Modelo conceptual B C D cuatro contadores de programa

La alternancia de los procesos en el sistema es regulada por el administrador de procesos y obedece a un algoritmo de planificacin.
1

Administracin de Procesos

Sistemas Operativos

Estados de procesos Dado que en un sistema de tiempo compartido coexiste en forma concurrente un conjunto de procesos en el sistema, en donde se incluyen procesos del sistema y procesos de los usuarios. Esta concurrencia produce que los procesos se puedan encontrar en diferentes estados, ya que por ejemplo, en un momento dado solo un proceso puede estar en ejecucin. A continuacin se presenta una figura que refleja la relacin entre los distintos estados posibles que puede presentar un proceso.

en ejecucin despachar time-out

bloqueo

listo despertar

bloqueado

fig.: estados y transiciones

Los tres estados bsicos son: 1. En ejecucin: Proceso esta utilizando la CPU, las instrucciones se estn ejecutando. 2. Listo: Proceso est en condiciones de ejecutarse, pero esta esperando que se le asigne tiempo de CPU. 3. Bloqueado : Proceso est esperando que ocurra un evento externo (como la terminacin de una E/S). Los procesos pueden tomar cualquiera de los estados mencionados y la transicin entre uno y otro estado tiene su explicacin. Las siguientes son las transiciones posibles: Ejecucin - Bloqueado: Un proceso pasa de ejecucin a bloqueado cuando ejecuta una instruccin que implica la espera de un evento, por ejemplo debe esperar que ocurra efectivamente la E/S, espera por la activacin de un semforo, etc. Ejecucin - Listo: Un proceso pasa de ejecucin a listo, cuando se le acaba el tiempo asignado por el planificador de procesos del sistema, en este momento el sistema debe asignar el procesador a otro proceso. Listo - Ejecucin: Un proceso pasa de listo a ejecucin cuando el sistema le otorga un tiempo de CPU. Bloqueado - Listo : Un proceso pasa de bloqueado a listo cuando el evento externo que esperaba sucede. Tabla de Procesos Para manejar la informacin de todos los procesos, el sistema operativo maneja una tabla de procesos, la que contiene una entrada por la informacin de cada proceso, a cada una de estas entradas en la tabla de procesos se le conoce con el nombre de PCB (Process Control Block). Por lo general esta estructura posee diversa informacin asociada al proceso, en general esta informacin incluye: Estado del proceso: El estado puede ser en ejecucin, listo o bloqueado. Contador de programas : El PC contiene la direccin de la siguiente instruccin a ejecutar por el proceso. Informacin de planificacin: Esta informacin incluye prioridad del proceso, apuntadores a colas de planificacin, etc. Informacin contable: Esta informacin incluye cantidad de tiempo de CPU asignado, hora de inicio del proceso, etc. Informacin de planificacin de memoria: Esta informacin incluye informacin de registros lmites de acceso, punteros a segmentos de datos, cdigos, etc. Informacin del Sistema de archivos : Esta informacin incluye protecciones, identificacin de usuario, grupo, etc. Informacin del estado de E/S: Esta informacin incluye, solicitudes pendientes de E/S, dispositivos de E/S asignados al proceso, etc. Cambio de Contexto Otro concepto muy importante que incluye el concepto de proceso, es el denominado cambio de contexto. Este concepto esta directamente relacionado con la idea de los sistemas de tiempo compartido. En un sistema de tiempo compartido, existen muchos procesos ejecutndose concurrentemente, el sistema se encarga de asignar a cada uno de los procesos un tiempo fijo de ejecucin, cuando el proceso no termina de ejecutarse en ese tiempo el sistema debe guardar la informacin que le corresponde a dicho proceso para poder recuperarla posteriormente cuando le asigne otra cantidad de tiempo de ejecucin. Se denomina conmutacin de contexto al mecanismo mediante el cual el sistema almacena la informacin del proceso que se est ejecutando y recupera la informacin del proceso que ejecutar enseguida. A continuacin se presenta un esquema explicativo de este mecanismo.

Administracin de Procesos

Sistemas Operativos

proceso1 Ejecucin interrupcin llamada al sistema

sistema operativo

proceso2 inactivo

guardar PCB proceso1 recuperar PCB proceso2 interrupcin llamada al sistema Inactivo interrupcin llamada al sistema guardar PCB proceso2 recuperar PCB proceso1 interrupcin llamada al sistema Ejecucin inactivo ejecucin

Jerarqua de Procesos El diseo y funcionamiento de un sistema operativo que maneje el concepto de proceso debe ser flexible y ofrecer capacidades a los programadores. En este sentido, debe proveer los mecanismos mediante los cuales los programadores puedan crear aplicaciones en donde puedan trabajar con ms de un proceso. Para lograr esto, el sistema operativo proporciona llamados a sistema mediante los cuales los programadores pueden crear o destruir procesos. Particularmente, el sistema operativo UNIX proporciona la llamada a sistema fork() , la cual permite crear un proceso, que se ejecuta concurrentemente con el proceso que lo cre. Cuando un proceso crea a otro, al proceso creado se le denomina proceso hijo y al proceso que cre, se le denomina proceso padre. El nuevo proceso hijo tambin puede crear otros procesos. De esta manera es posible tener una jerarqua de procesos en donde se tienen (entre comillas), procesos abuelos, procesos padres y procesos hijos; o alguna jerarqua de mayor anidacin. EL sistema Unix, proporciona varias llamadas a sistema que le permite a los programadores desarrollar aplicaciones que manejen varios procesos. La llamada fork() , crea un proceso hijo, copiando toda la caracterizacin del proceso padre en el hijo (en otro espacio de direccin), es decir, el hijo resulta ser una copia del padre, con el mismo cdigo, datos, pila y conjunto de registros. Cuando se ejecuta el fork() retorna el valor 0 para el hijo y un valor mayor que cero para el padre, este valor corresponde al identificador del proceso (pid) hijo. Una vez que el proceso hijo es creado, tanto el padre como el hijo comienzan a ejecutarse en forma concurrente. Luego si alguno de estos procesos modifica sus respectivos datos, estos cambios no son reflejados en el otro proceso. Sin embargo, los recursos obtenidos por el padre son heredados al hijo, as por ejemplo, si el padre antes de crear al hijo tena un archivo abierto, ste permanecer abierto en el hijo. Si el proceso padre desea cambiar la imagen del proceso hijo, es decir, quiere asignarle otra tarea, entonces debe ejecutar otra llamada a sistema que le permita hacerlo. Esto es posible mediante la llamada exec() y sus variantes. Hay un punto importante en la relacin de procesos padres e hijos. El proceso padre no debe terminar antes que cualquiera de sus hijos, si esto sucede, entonces los procesos hijos quedan hurfanos (defunct o zombie). Este tipo de proceso no es posible de eliminar el sistema, slo se pueden matar bajando el sistema. Existen otras llamadas a sistema que les permite a los procesos padres esperar por la muerte de sus hijos: wait , wait3 y waitpid . Por otro lado, cada hijo le avisa a su padre cuando termina a travs de una llamada a sistema exit. Tambin en Unix es frecuente encontrar procesos denominados demonios (daemon), los cuales se ejecutan cuando el sistema parte y se ejecutan en forma asncrona, permanecen en estado bloqueado esperando por la ocurrencia de un evento, por tiempo (cron), por la llegada o salida de mensajes, por trabajos para imprimir, etc. Desde el punto de vista de procesos padres y procesos hijos, el intrprete de comandos, Shell , es un programa que cuando se ejecuta proporciona una interfaz mediante la cual los usuarios pueden interactuar con l. Cuando un usuario utiliza el comando cp para copiar archivos, la shell crea un proceso hijo y le asigna la tarea de copiar, as si el usuario le especific que se ejecutara en background entonces tanto el proceso padre (shell) como el hijo (cp) se ejecutan concurrentemente, si no se le indica ejecucin background entonces el proceso shell espera a que el proceso cp termine. Dado que los procesos poseen espacios de direccin independientes, si se desean comunicar deben hacerlo a travs de algn mecanismo, como los tubos (pipes), seales (Signal), memoria compartida, colas de mensajes, socket, etc.
3

Administracin de Procesos

Sistemas Operativos

Hebras de Control Como se mencion anteriormente un proceso consta bsicamente de una parte esttica (cdigo y datos), y una parte dinmica formada por el estado del conjunto de registros y la pila asociados al tiempo de ejecucin. Tradicionalmente un proceso tiene una hebra de control, sin embargo es posible asociarle a un proceso ms de una hebra. Las hebras pertenecientes a un mismo proceso se pueden comunicar a travs de la seccin de datos que almacena las variables globales. Dado que las hebras pertenecen a un mismo proceso, se dice que ellas comparten el mismo espacio de direccin a travs del cual se pueden comunicar. Este tipo de mecanismo proporciona una concurrencia a nivel de proceso, que permite realizarla con menos costo asociado al sistema. Las hebras de control, pueden ser apoyadas por el ncleo (como en el sistema operativo Match o en Solaris), en este caso el sistema operativo proporciona llamadas a sistema que permiten ser utilizadas por los programadores. O bien pueden ser apoyadas en modo usuario, a travs de un conjunto de llamadas de biblioteca (como en el sistema Linux). A continuacin se presenta una figura que ilustra los conceptos de proceso y de hebra de control:
PROCESO CODIGO EJECUTABLE DATOS HEBRA1 PILA REG. PILA HEBRA2 REG.

En cuanto a los recursos que utilizan las hebras respecto a los procesos a continuacin se presenta la siguiente tabla: Elementos por Hebra Elementos por Proceso PC Espacio de Direccin Pila Datos (Variables globales) Cjto de Registros Archivos Abiertos Estado Procesos Hijos Hebras de los hijos Semforos Seales La utilizacin de las Hebras se incluye en variados modelos de cooperacin. Entre estos modelos se encuentran: Modelo Servidor/Trabajador. Este consiste en que el servidor es el encargado de analizar los requerimientos y elige a un trabajador para que realice la tarea. Modelo Equipo. Este consiste en que existe un conjunto de hebras iguales, donde cada una obtiene y procesa sus propias solicitudes, no hay servidor. En este caso, se puede utilizar una cola de trabajo, la cual contiene todos los trabajos pendientes. Con este esquema cada hebra debe verificar primero la cola de trabajo, antes de ver los requerimientos actuales. Modelo Pipeline. En este caso se tiene una cooperacin directa entre las hebras. Primero una hebra procesa ciertos datos que luego proporciona a la siguiente hebra que los requiere, esta siguiente hebra tambin procesar datos que luego pasar a una siguiente hebra. A continuacin se presenta un esquema de estos 3 modelos:
MODELO SERVIDOR/TRABAJADOR MODELO EQUIPO MODELO PIPELINE

LLEGADA DE SOLICITUDES

Con respecto a la implementacin de hebras, actualmente se encuentran dos tipos: Implementacin como biblioteca. En este caso las hebras se implementan en modo usuario. Ejemplo, Pthreads de Linux
4

Administracin de Procesos

Sistemas Operativos

Implementacin en el ncleo. En este caso la implementacin opera en modo supervisor. Ejemplo, Hebras de Solaris.

2.2.- Planificacin de Procesos


En un sistema multiprogramado, de tiempo compartido existe la posibilidad de tener muchos procesos ejecutndose en el sistema concurrentemente. La concurrencia de procesos se logra en base a la comparticin de recursos. Dado que un proceso incluye recursos, tales como memoria, para almacenar datos, pila y cdigo ejecutable, tambin involucra el recurso para el procesamiento que est reflejado en el procesador y los registros que l maneja. Esta comparticin es regulada y controlada por el sistema operativo. El control del sistema operativo debe asegurar que los procesos no sean interferidos unos con otros. Esto significa que el S.O. debe garantizar que los procesos tengan acceso a los recursos de memoria y CPU, y adems debe asegurar la proteccin, de manera que un proceso no pueda arbitrariamente modificar el estado de otro. La utilizacin de la multiprogramacin tiene como consecuencia la mayor utilizacin de la CPU y una mayor productividad. La productividad es una medida que esta relacionada con la cantidad de trabajos realizados en un rango de tiempo. De esta manera si un proceso se ejecuta completamente en 2 minutos, pero durante ese tiemp o, el tiempo que espera por E/S es de 1,5 minutos, entonces se esta desperdiciando 1,5 minutos de tiempo de CPU. Con la multiprogramacin ese tiempo perdido puede ser aprovechado con la ejecucin de otros procesos que requieran de atencin de CPU. El sistema operativo utiliza para la planificacin de procesos Colas de planificacin. Para explicar como el sistema operativo opera con colas, recordemos que los procesos pueden encontrarse en uno de tres estados (en ejecucin, listo y bloqueado). En este sentido, si un proceso est en ejecucin implica que est utilizando el recurso de CPU; si un proceso esta en estado listo significa que est esperando por la CPU, luego este estado permite que exista una cola de procesos que estn esperando por la CPU; si un proceso est bloqueado significa que espera por un evento externo, luego este estado tambin puede tener una cola de procesos que esperen por los eventos que les corresponden. A continuacin se presenta un diagrama que muestra como funciona esto.

procesos listos P7 P6 P2 P0

procesos en ejecucin

procesos bloqueados P5 P4 P3 P1

En la figura se aprecian los siguientes cambios: Si a un proceso en ejecucin se le acaba su tiempo asignado pasa a la cola de procesos listos Si un proceso en ejecucin requiere esperar por un evento pasa a la cola de bloqueados Si un proceso de la cola de bloqueados recibe el evento esperado pasa a la cola de procesos listos Las funciones de la planificacin de procesos son realizadas mediante dos mdulos principales, uno est relacionado con los criterios considerados para la decisin de que proceso de la cola de listos se le asignar CPU; y un segundo mdulo que tiene como labor efectiva de ejecutar el proceso elegido. El primer mdulo depende del tipo de planificacin que adopta el sistema en trminos generales y en particular del algoritmo especfico que se utilizar para la eleccin del proceso a ser despachado. El segundo mdulo corresponde a uno conocido como Despachador, cuya labor se refleja a travs del siguiente algoritmo. while (true) do Cambiar de contexto Cambiar a modo usuario Saltar a la direccin de memoria de la instruccin a ejecutar end Por otro lado, las funciones relacionadas con la planificacin de procesos obedecen a los siguientes objetivos: 1. Equidad : Este objetivo consiste en compartir la CPU equitativamente, sin privilegiar notoriamente algn tipo de proceso. 2. Maximizar la utilizacin de la CPU: Las funciones que realice el planificador de procesos tienden a mantener la CPU utilizada la mayor parte del tiempo. 3. Maximizar la productividad: La productividad es una medida del rendimiento, que se refleja con la cantidad de tareas que puede realizar la CPU en un intervalo de tiempo. 4. Minimizar el tiempo de espera : Este tiempo corresponde al tiempo en que un proceso est en la cola de procesos listos, es un tiempo de espera por asignacin de CPU. 1. 2. 3.
5

Administracin de Procesos

Sistemas Operativos

5. 6.

Minimizar el tiempo de retorno: Este tiempo corresponde al tiempo total en que se utiliza para la ejecucin completa del proceso. Este tiempo se asocia en general al tiempo de ejecucin de los procesos por lotes (batch). Minimizar el tiempo de respuesta: Tiempo relacionado con los tiempos de respuesta parciales de los procesos interactivos, debido a que estos procesos interactan con el medio constantemente durante la ejecucin del proceso.

Niveles de Planificacin Planificacin de alto nivel o de largo plazo o long-term : o planificacin de trabajo, determina cuales trabajos podrn competir activamente por los recursos del sistema. Planificacin de nivel intermedio : determina que procesos pueden competir por la CPU. Responde a fluctuaciones temporales en la carga del sistema mediante la suspencin temporal y la activacin de procesos.
medium-term bloqueados long-term Batch short-term listos cpu

Planificacin de bajo nivel o de corto plazo o short-term : determina a cual proceso listo se le asignar la CPU cuando sta se encuentre disponible. Se dice que despacha la CPU al proceso mediante el despachador. En trminos generales, la planificacin de procesos de un sistema operativo puede adoptar uno de dos conceptos de planificacin. Estos conceptos de tipo de planificacin se presentan a continuacin: 1. Planificacin No apropiativa : Este tipo consiste en que el planificador de procesos puede quitar la CPU a un proceso, slo en dos casos: cuando un proceso cambia de estado de ejecucin a bloqueado, y cuando un proceso termina. 2. Planificacin Apropiativa : Este tipo consiste en que el planificador tiene las facultades de quitar la CPU a un proceso que est en ejecucin Cada uno de estos tipos de planificacin tienen asociados un conjunto de algoritmos que veremos en las siguientes secciones. 2.2.1.- Algoritmos de Planificacin No Apropiativa Como ya se mencion en la seccin anterior, este tipo de planificacin no posee las facultades de quitar la CPU al proceso que la est utilizando, sino que slo lo puede hacer cuando el proceso cambia de ejecucin a bloqueado o cuando el proceso termina. Este tipo de caracterstica no es atractiva para los sistemas multiusuarios, en donde, muchos de los procesos que ellos ejecutan son de naturaleza interactiva. Por otro lado, en este tipo de planificacin, puede darse repetidamente que si un proceso utiliza mucho tiempo de ejecucin, sin cambios de estado, inhabilita la ejecucin del resto de los procesos del sistema. Sin embargo, este tipo de planificacin es sencilla en cuanto a su implementacin, puesto que no es necesario ocupar el manejo de interrupciones que le permitan al sistema interrumpir la ejecucin de los procesos. Existen diversos algoritmos de planificacin no apropiativa, cada uno de ellos tiene propiedades diferentes que pueden favorecer a un tipo de proceso, muchas veces en desmedro de otros tipos de procesos. Algoritmo FIFO o FCFS(First-Come First-Served) Este algoritmo consiste en que se otorga la CPU al primer proceso que la requiere. Su implementacin es sencilla pues basta tener una cola FIFO. Cuando un proceso entra a la cola de procesos listos, su PCB se agrega al final de la cola, y cuando la CPU queda libre es asignada al primer proceso de la cola de listos, eliminando por ende, el PCB asociado al proceso que entra en ejecucin. El tiempo de espera promedio en este tipo de algoritmo es muy variable, pues el tiempo de espera de cada uno de los procesos que estn en la cola de listos depende del orden de dichos procesos en la cola. Consideremos el siguiente ejemplo:

Proceso P1 P2 P3

Tiempo ejecucin 20 5 7
6

Administracin de Procesos

Sistemas Operativos

Segn la tabla presentada, el tiempo de espera por proceso es el siguiente: Tpo espera P1 = 0 Tpo espera P2 = 20 Tpo espera P3 = 25 Tpo espera Prom = 15 Si cambiamos el orden de llegada de los procesos, producindose la siguiente secuencia de llegada P2, P3, P1 el tiempo de espera promedio, de la siguiente manera: Tpo espera P1 = 12 Tpo espera P2 = 0 Tpo espera P3 = 5 Tpo espera Prom = 5,66 Luego, se puede concluir el tiempo de espera promedio no es mnimo y puede variar mucho debido, por una parte a las diferencias por requerimiento de tiempo de CPU y por el orden de llegada de los procesos a la cola de procesos listos. La utilizacin del algoritmo FCFS no es apta para los sistemas interactivos, pues esto requieren que se le otorgue un pequeo tiempo a cada proceso en forma regular. Algoritmo SJF (Short Job First) Este algoritmo consiste en que el planificador elige aquellos procesos que requieran menor cantidad de tiempo para ejecutarse y luego los despacha de acuerdo a ese orden. En el caso en que dos o ms procesos se demoren el mismo tiempo se usa el criterio de FCFS. Este algoritmo tiene la ventaja que se minimiza el tiempo espera promedio, pero tiene el grave inconveniente de que no es posible predecir cual ser el siguiente tiempo requerido por algn proceso. Sin embargo, existen algunos mecanismos matemticos que hacen posible una aproximacin considerando datos histricos de la ejecucin. Este algoritmo puede ser del tipo No apropiativo o Apropiativo. Esto significa que si es No apropiativo, la decisin del orden de ejecucin en un momento es fija, no vara de acuerdo a los nuevos requerimientos, en cambio, en una planificacin apropiativa el orden de ejecucin de los procesos puede variar dependiendo de los siguientes requerimientos. A continuacin se presenta un ejemplo: Proceso Momento de llegada Tiempo ejecucin P1 0 10 P2 0 4 P3 1 7 P4 2 5 Caso: No apropiativo: Caso: Apropiativo: Tpo espera P1 = 4 Tpo espera P1 = 16 Tpo espera P2 = 0 Tpo espera P2 = 0 Tpo espera P3 = 13 Tpo espera P3 = 8 Tpo espera P4 = 17 Tpo espera P4 = 2 Tpo espera prom = 8,75 Tpo espera prom = 7,25 2.2.2.- Planificacin Apropiativa Como ya se mencion anteriormente la planificacin apropiativa implica que el sistema tiene las facultades para quitar el procesador al proceso que lo est ejecutando. Este tipo de planificacin es apropiado para sistemas multiusuarios e interactivos, pues en este caso el sistema puede hacer que los procesos de los usuarios se ejecuten de tal manera que el usuario tenga respuestas rpidas a sus requerimientos. Sin embargo, la implementacin de este tipo de planificacin, comparativamente es ms compleja que la no apropiativa, pues debe proporcionar los mecanismos mediante el cual el sistema pueda efectuar la interrupcin de procesos y la conmutacin de contexto en los momentos que defina el algoritmo particular. A continuacin se presentan algunos de los algoritmos apropiativos ms conocidos: Algoritmo RR(Round Robin) Este algoritmo fue diseado para sistemas de tiempo compartido y est basado en la asignacin de un tiempo de procesador a cada proceso del sistema; a este tiempo se le denomina Quantum. El algoritmo consiste en tener una cola tipo FIFO de procesos listos, proceso que llega a la cola se ubica al final de ella. El planificador de procesos toma el primer proceso de la cola, programa un cronmetro para que interrumpa despus de un quantum de tiempo y despacha el proceso en la CPU. Posteriormente puede suceder una de dos alternativas. Si el proceso ocupa en ejecucin menos tiempo que el quantum, entonces el proceso libera voluntariamente la CPU y el planificador continua con la planificacin del siguiente proceso listo.
7

Administracin de Procesos

Sistemas Operativos

Si el proceso requiere para su ejecucin ms tiempo que el otorgado a travs de un quantum, se produce la interrupcin del cronmetro cuando su tiempo expira, en ese momento el planificador detiene la ejecucin del proceso, lo pone al final de la cola de proceso listos, y realiza la conmutacin de contexto para la ejecucin, por un quantum, del siguiente proceso de la cola FIFO. El rendimiento del algoritmo depende mucho del tamao del quantum. Si es muy grande este algoritmo se traduce al algoritmo FCFS y los tiempos de respuesta se ven desmejorados, y si es muy pequeo la razn entre el tiempo de utilizacin efectiva de CPU y cambio de contexto es muy baja. El compromiso que se debe tomar, en este algoritmo es un quantum, que sea grande respecto al tiempo de contexto, pero no demasiado para no caer en el algoritmo FCFS. Lo razonable es que el quantum se fije de manera tal que el cambio de contexto este cercano al 5% del quantum. Habitualmente el cambio de contexto toma aproximadamente 1 y 5 [mseg], luego un tiempo razonable para el quantum est entre 50 y 100 [mseg]. Este tiempo alcanza para realizar 5.000.000 de instrucciones en un Pentium de 100 MHz. A continuacin se presenta un ejemplo de como opera este algoritmo. Considere un quantum = 4 [mseg] y el tiempo de cambio de contexto considrelo despreciable. Proceso Tiempo ejecucin P1 10 P2 5 P3 7 Segn la tabla presentada, el tiempo de espera por proceso es el siguiente: Tpo espera P1 = 12 Tpo espera P2 = 12 Tpo espera P3 = 13 Tpo espera Prom = 12,3 Haga el mismo ejercicio considerando un tiempo en cambio de contexto de 1 [mseg]. Algoritmo por Prioridades Este algoritmo consiste en asociarle a cada proceso una prioridad, los procesos que poseen mayor prioridad se ejecutarn primero, si dos o ms proceso posee la misma prioridad entonces se aplica poltica FCFS. No se ha llegado a un acuerdo en la representacin con nmeros grandes o pequeos. Aqu consideraremos los nmeros pequeos como aquellos de mayor prioridad. El algoritmo de planificacin por prioridades puede ser apropiativo o No apropiativo. En el caso de un algoritmo apropiativo significa lo siguiente. Si un proceso, que llega a la cola de procesos listos, posee mayor prioridad que el proceso que se esta ejecutando, entonces se le quitar la CPU a ese proceso y se le otorgar al proceso que llega. En cambio en un algoritmo No apropiativo, el procesador no es quitado al proceso que la est utilizando, sino lo que solamente ocurre es que el proceso que llega se coloca al inicio de la cola de procesos listos. Un problema que surge en este tipo de algoritmos es que puede suceder el aplazamiento indefinido de los procesos de prioridades baja. Esto se puede dar en sistemas que tienen mucha demanda por procesamiento, en donde muchos procesos son de alta prioridad, esto provocar que continuamente se incorporan en la lista de procesos listos procesos de alta prioridad que van desplazando la posibilidad de ejecucin de los procesos de prioridad baja. Un mecanismo que se utiliza para evitar el aplazamiento indefinido de los procesos de baja prioridad es el envejecimiento, el cual consiste en aumentar gradualmente en el tiempo la prioridad de los procesos que esperan durante mucho tiempo en el sistema. Un ejemplo de como funciona este algoritmo, es el siguiente: Proceso P1 P2 P3 P4 Tiempo ejecucin 10 5 7 8 Prioridad 3 2 1 2

Caso No apropiativo: Tpo espera P1 = 20 Tpo espera P2 = 7 Tpo espera P3 = 0 Tpo espera P4 = 12 Tpo espera prom = 9.75 Cmo seran los tiempos de espera para el caso Apropiativo?...
8

Administracin de Procesos

Sistemas Operativos

Algoritmo de colas de Prioridades mltiples Este algoritmo surge para tratar de dar un mejor servicio a los usuarios interactivos y est basado en una mezcla entre algoritmos ya vistos y el algoritmo por prioridades, lo usual es que se mezcle el algoritmo RR y l por prioridades. Este algoritmo contempla distintas colas de procesos en donde a cada una de ellas se le asigna una determinada prioridad; y se utiliza el algoritmo RR para la planificacin de procesos pertenecientes a una misma cola. La operacin del algoritmo es como sigue: la CPU es asignada a los procesos pertenecientes a las colas de mayor prioridad, cuando la cola queda vaca se pasa a la cola de procesos asociada a siguiente prioridad.
prioridad 4 mxima prioridad

prioridad 3

prioridad 2

prioridad 1

minima prioridad

Algoritmo de colas de mltiples niveles con realimentacin Este algoritmo bsicamente es igual al anterior solo que los procesos pueden moverse de una cola de menor a una de mayor prioridad y viceversa. La idea en este algoritmo es diferenciar los tipos de procesos de acuerdo a sus requerimientos en tiempos de ejecucin; si un proceso utiliza demasiado tiempo de CPU, se pasa a una cola de menor prioridad. De la misma manera, si un proceso espera demasiado tiempo en una cola de menor prioridad se puede mover a una cola de mayor prioridad, esta es una manera de evitar el bloqueo indefido producto del envejecimiento. Este esquema permite dejar los procesos interactivos en las colas de mayor prioridad. Los procesos interactivos requieren tiempos de respuesta pequeos y necesitan ser atendidos con mayor frecuencia, los procesos por lotes en cambio no requieren interactuar con el sistema y bsicamente lo que les interesa es ejecutar su tarea completamente en un tiempo de retorno razonable. De esta manera, lo que sucede en este algoritmo es que cada una de las colas posee una prioridad asociada y la planificacin de los procesos que le pertenecen se realiza mediante RR. Sin embargo, el quantum no es el mismo en ambas colas, siendo ms pequeo para los procesos de mayor prioridad que corresponde a los procesos interactivos, y mayores para las prioridades ms bajas. Planificacin de dos niveles Los algoritmos de planificacin vistos hasta ahora, consideran que la cantidad de memoria disponible es ilimitada. Sin embargo, en los sistemas reales el recurso Memoria es limitado y por lo tanto debe ser utilizado de la mejor manera posible. Como ya sabemos para que un proceso se pueda ejecutar las instrucciones que definen su accin deben estar almacenadas en memoria, luego, si no se dispone de suficiente memoria es necesario que algunos de los procesos o porciones de ellos se encuentren en memoria secundaria. Desde el punto de vista de planificacin de procesos esta es una situacin que debe ser considerada, ya que el tiempo involucrado para ejecutar un proceso que esta en dis co es mucho mayor que el tiempo requerido para ejecutar un proceso que esta en memoria, puesto que necesariamente hay que traspasar el proceso de disco a memoria antes de ejecutarlo.
a, b, c, d e, f, g, h b, c, f, g

memoria

e, f, g, h

disco

a, b, c, d

a, d, e, h

t1

t2

t3

La planificacin de dos niveles se realiza mediante, un planificador de largo plazo o bien planificador de nivel alto que es el que selecciona los procesos de disco para cargarlos en memoria y viceversa; y el planificador de corto plazo o bien planificador de nivel bajo , que es l selecciona un proceso listo y le asigna CPU. La principal diferencia entre estos dos planificadores es la frecuencia de su ejecucin. El planificador de corto plazo debe seleccionar con mucha frecuencia un nuevo proceso para asignacin de CPU. Como este planificador debe asegurar una rpida alternancia entre procesos la seleccin de cada proceso y la asignacin de la CPU propiamente tal debe realizarla muy rpidamente.
9

Administracin de Procesos

Sistemas Operativos

Por otro lado, el planificador de largo plazo se ejecuta con mucha menos frecuencia que el de corto plazo. Este planificador es el encargado de controlar el grado de multiprogramacin (el nmero de procesos en memoria). Si el grado de programacin se mantiene mas o menos estable entonces el planificador debe velar porque la cantidad de procesos que entran a memoria sea mas o menos igual a la cantidad de procesos que salen de memoria. El algoritmo funciona de la siguiente manera. Primero se cargan en memoria un conjunto de procesos, el planificador de bajo nivel se encarga entonces, por un periodo de tiempo, de planificar dichos procesos en la CPU. Luego, peridicamente se llama al planificador de alto nivel para que saque de memoria el conjunto de procesos de memoria e intercambie de disco a memoria un muevo conjunto de procesos. Posteriormente se repite este ciclo. El siguiente esquema refleja como funciona este algoritmo.

Disco

Planif Largo Plazo

Memoria

Intercambia procesos en memoria con baja frecuencia

Intercambia procesos en CPU Con alta frecuencia Planif Corto Plazo

CPU

Algunos de los parmetros que se analizan para decidir que procesos se intercambian de disco a memoria y viceversa son: Tiempo que proceso ha permanecido en memoria o disco. Tiempo que proceso ha utilizado CPU. Prioridad del proceso Tamao del proceso

2.3.- Comunicacin y Sincronizacin de Procesos


Partiendo de la base del concepto de proceso, en donde cada uno de ellos posee un espacio de direccin independiente, cuando uno o ms procesos desean comunicarse deben emplear mecanismos adicionales para poder realizarla. En el caso de las hebras de control no sucede lo mismo. Por qu?..... En muchos casos, los procesos se renen para realizar tareas en conjunto, a este tipo de relacin se le llama procesos cooperativos, en tal caso muchas veces se emplean espacios de almacenamiento comn. En esos casos, para lograr correctamente la comunicacin, los procesos deben sincronizarse, pues de no ser as pueden surgir problemas no deseados. Para ilustrar mejor estas ideas considere el siguiente ejemplo. Suponga que los procesos que desean mandar a imprimir sus archivos escriben sus requerimientos en un espacio de almacenamiento comn, de donde un proceso servidor de impresora lee dichos requerimientos y procede con la impresin. El servidor de impresora va leyendo los requerimientos segn el orden de llegada y los va atendiendo. Suponga que el espacio de almacenamiento comn esta conformado por una cola en donde los procesos que requieren de impresin lo hacen en el siguiente tem vaco de ella y el servidor de impresin va extrayendo los requerimientos del inicio de la cola. Que puede suceder si se produce el siguiente caso. Un proceso A desea escribir su requerimiento en la cola, para ello obtiene la direccin del siguiente tem vaco, x, en la cola. Luego copia dicho valor en una variable local, justo antes de escribir su requerimiento es interrumpido por el planificador el cual le otorga la cpu a un proceso B que tambin desea hacer un requerimiento de impresin, por lo tanto este nuevo proceso obtiene de la cola la direccin del siguiente tem vaco (x), la copia en su variable local y escribe su requerimiento, una vez hecho esto el planificador lo interrumpe y le otorga la cpu al proceso A. Este continua en donde haba quedado y escribe en la posicin apuntada por x. Luego, que sucedi?... se perdi el requerimiento de proceso B. En condiciones normales este problema no se produce, es decir si proceso A escribe su requerimiento antes que el proceso B lo hiciera. De acuerdo a lo presentado en los prrafos anteriores, surgen algunos conceptos que son necesarios tener claros para comprender lo que veremos en las siguientes secciones. Condicin de carrera o competencia Este problema es una condicin que puede darse aleatoriamente y bsicamente consiste en que pueden producirse diversos resultados en la ejecucin de un mismo cdigo. Se supone que la ejecucin de un segmento de cdigo debe ser absoluta, no debe cambiar de acuerdo a las condiciones del sistema, si un programa especifica un algoritmo de multiplicacin de matrices, este debe realizarse siempre, en el caso presentado anteriormente, si un proceso hace un requerimiento de impresin esta debe efectuarse
10

Administracin de Procesos

Sistemas Operativos

siempre, no debe depender de la ejecucin de otros procesos. Luego, en el ejemplo presentado anteriormente se produce una condicin de carrera pues el proceso B, a pesar de haber realizado su requerimiento correctamente no es atendido, y ni siquiera se entera del por qu. Exclusin mutua La exclusin mutua se entiende por aquellos mecanismos que se implementan tendientes a evitar situaciones de carrera, es decir, asegurar que el cdigo sea ejecutado correctamente sin ser interferido por la ejecucin de otros procesos. Esto lo realiza garantizando que si una variable o recurso es compartido entre uno o ms procesos, sea utilizado slo por un proceso a la vez. Seccin crtica La seccin crtica se entiende por aquel segmento de cdigo, en donde estn las instrucciones que hacen uso de un recurso compartido, cuya utilizacin, en tiempo de ejecucin, pueda producir condiciones de carrera. Existen cuatro condiciones bajo los cuales la comunicacin y sincronizacin entre procesos se efecte correctamente : Dos procesos no pueden encontrarse simultneamente dentro de sus respectivas secciones crticas. No se debe suponer acerca de las velocidades ni nmeros de las CPUs. Ningn proceso que no este dentro de su seccin crtica debe evitar que otro proceso entre a su seccin crtica. Ningn proceso debe esperar indefinidamente para entrar en su seccin crtica. 2.3.1.- Problemas Tpicos En un sistema multiprogramado de tiempo compartido existen varios problemas tpicos que se pueden producir ya sean aplicaciones del sistema o bien aplicaciones construidas por los programadores. A continuacin presentaremos algunos de los problemas ms conocidos: Problema Productor/Consumidor El problema productor/consumidor es muy conocido y se presenta en muchas aplicaciones habituales en los sistemas operativos. Conceptualmente un proceso productor es aquel que genera informacin que ser aprovechada por el proceso consumidor. Un sistema puede estar caracterizado por uno o varios procesos productores y uno o varios procesos consumidores. Para permitir que los procesos productores y consumidores se ejecuten concurrentemente, se debe disponer de un buffer que puedan llenar los productores y puedan extraer los consumidores. Un productor puede producir un tem en el buffer mientras el consumidor consume otro tem del buffer. Sin embargo, dado que el buffer es compartido no puede darse el caso en que el consumidor este extrayendo un tem que esta siendo introducido por un productor, ni viceversa. Cuando se tiene que el buffer es limitado, debe evitarse que el productor intente introducir un tem cuando el buffer este lleno, ni tampoco debe permitirse que el consumidor intente extraer un tem del buffer cuando ste est vaco. Luego, cuando el buffer este lleno el productor debe esperar por un hueco en el buffer, as mismo si el buffer esta vaco el consumidor debe esperar por que se introduzca un tem. Luego, en el problema productor/consumidor se tiene procesos productores, consumidores y un buffer compartido de tamao limitado. A continuacin se presenta un esquema de esta situacin y los problemas que pueden surgir.
P1 a=x interrupcin [a]=Req P1 x b=x [b]=Req P2 P2 Req P1 Req P2 C

En la figura se observan los siguientes posibles problemas. Que sucede si el productor 1 quiere escribir un tem en la cola, para ello obtiene la direccin del siguiente slot vaco, x, el productor 1 copia la direccin de x en una variable local, inmediatamente despus el planificador de CPU, interrumpe la ejecucin del productor 1 para otorga la CPU al productor 2, este desea poner su tem en la cola, y obtiene para ello la direccin del siguiente slot vaco, esta direccin aun es x por lo tanto luego copia esa direccin en una variable local y luego ingresa el tem. Inmediatamente despus el planificador le quita la CPU al productor 2 y se la entrega al productor 1 enseguida este continua la ejecucin en donde estaba. Que sucedi?..... El tem que haba escrito el productor 2 se pierde pues el productor 1 sobreescribi la misma posicin Otro problema que puede surgir, es cuando la cola esta llena, en este caso los productores no pueden escribir mas requerimientos y deben esperar a que se produzca un hueco en la cola.
11

Administracin de Procesos

Sistemas Operativos

Por ltimo cuando un consumidor desea sacar un tem de la cola vaca no lo puede hacer, debe esperar porque exista un tem que sacar, y esto sucede cuando un productor coloca uno en ella.

Problema de los filsofos comensales Este problema tambin es un ejemplo clsico de sincronizacin de procesos. Este consiste en que se renen a cenar 5 filsofos, como por naturaleza estos son pensadores cuando estn sentados en la mesa se dedican a pensar, luego de un rato de estar en esta labor comienzan a sentir hambre, para lo cual se sirven sus respectivos platos. El problema que surge entre ellos se debe al tipo de comida que tienen servido... son espaghetti...., luego cada uno de ellos solo tiene disponible solo un tenedor. Luego, como solucionan sus problemas .... cada uno de ellos intenta tomar el tenedor propio mas el tenedor de su vecino. En definitiva, los cinco filsofos no pueden servirse sus respectivos platos simultneamente, y todos ellos podrn comer solo si consiguen ambos tenedores. Problema del Barbero durmiente Este es otro problema tpico. Este consiste bsicamente en que hay una peluquera en donde hay un barbero que duerme si no tiene clientes, cuando un cliente llega entonces despierta y lo atiende. Si mientras l atiende llegan nuevos clientes, entonces estos esperan en las sillas de espera. Si las sillas de espera se agotan los siguientes clientes que llegan se van o bien pueden esperar a que una de las sillas se desocupe. Cuando el barbero termina con un cliente entonces atiende al siguiente segn su turno de llegada. 2.3.2.- Mecanismos de exclusin mutua con espera ocupada Estos mecanismos se caracterizan porque cuando un proceso solicita un recurso que esta siendo utilizado en ese momento debe esperar porque este sea liberado. Mientras el proceso espera por la liberacin del recurso sigue utilizando ciclos de CPU, no cambia de estado sino que permanece en la cola de procesos listos esperando el otorgamiento de la CPU, para poder ejecutar las instrucciones necesarias que le permitan conseguir el recurso. Desde el punto de vista de utilizacin de CPU, estas tcnicas no son las mejores, pues se est haciendo uso de la CPU para efecto de consulta solamente. Lo ideal sera que los procesos cambiaran de estado listo a bloqueado hasta que el recurso fuera liberado. A continuacin presentamos algunas de las tcnicas de exclusin mutua con espera ocupada. Desactivacin de Interrupciones Variables de Bloqueo Alternancia Estricta Solucin de Peterson Instruccin TSL (Test and Set Lock) Desactivacin de Interrupciones Este mecanismo se caracteriza porque justo antes de ingresar a seccin crtica proceso deshabilita todas las interrupciones, y justo despus de salir las rehabilita. Si durante el periodo en que el proceso esta dentro de la seccin crtica, y por lo tanto, las interrupciones estn deshabilitadas, otro proceso desea entrar en su seccin crtica simplemente no podr entrar hasta que el primer proceso las rehabilite. Si bien este mecanismo puede resolver el problema, no es el ms recomendable de ser utilizado, puesto que se le da demasiado control a los programadores y en muchos casos estos pueden producir daos en el comportamiento del sistema. Variables de Bloqueo Este tipo de mecanismo es una solucin por software y consiste bsicamente en tener una variable compartida encargada de controlar los accesos a las secciones crticas de los procesos concurrentes que accesan un recurso compartido. A continuacin se presenta una seccin de cdigo que representa como funciona este mecanismo:
Programa while(1){ while(b==1); b=1; seccion_critica(); b=0; seccion_nocritica(); }

Este segmento de programa refleja que si proceso se ejecuta repetidamente para que pueda ingresar a su seccin crtica se debe cumplir que el valor de la variable de bloqueo sea 0, mientras la variable sea 1 el proceso espera. Una vez que la variable de bloqueo se hace 0 el proceso puede continuar y de tal manera puede ingresar a su seccin crtica.

12

Administracin de Procesos

Sistemas Operativos

Cul es el problema?, el problema radica en que de todas maneras se puede producir el problema de condicin de carrera pues que sucede en el caso en que el proceso 1 es interrumpido justo antes que el proceso cambie el valor de la variable de control a 1?. Analice el problema que ocurre usted mismo. Alternancia Es tricta En este caso se tiene un mecanismo en que se asegura la exclusin mutua, pero con el costo de ejecucin alternada de los procesos, es decir que se ejecuta el proceso 1, luego el 2, luego el 1, luego el 2, y as sucesivamente. El siguiente segmento de cdigo refleja como funciona este mecanismo.
Programa1 while(1){ while(turno !=0); seccion_critica1(); turno=1; seccion_nocritica(); } Programa 2 while(1){ while(turno!=1); seccion_critica2(); turno=0; seccion_nocritica(); }

Si suponemos que ambos programas son ejecutados concurrentemente, se tienen las siguientes observaciones al mecanismo. La variable turno controla la ejecucin alternada de los procesos, si suponemos que el valor inicial de turno es de 0 tenemos que el proceso 1 es el primero en ejecutarse y una vez que este coloca la variable turno en 1 entonces puede entrar a su respectiva seccin crtica el proceso 2, periodo de tiempo anterior esta en espera de esa condicin. Este mecanismo evita las condiciones de carrera, pero presenta condiciones no deseadas. Por ejemplo, que no es posible que un proceso se ejecute dos veces continuadas. Por otro lado, si uno de los procesos es muy lento el otro proceso debe esperar. Suponga por ejemplo, que el proceso 1 entre a su seccin crtica, luego coloque la variable turno en 1 y luego pase a su seccin no crtica; suponga que una vez que la variable turn se hizo 1 entr en ejecucin el proceso 2 ejecutando su seccin crtica, poniendo turn en 0 y terminando su seccin no crtica rpidamente, quedando en condiciones de ejecutarse nuevamente; que sucede si el proceso 1 an no termina su seccin no crtica. En este caso se tiene que la tercera condicin de un buen mecanismo de exclusin mutua no se cumple. En definitiva este mecanismo de exclusin mutua no es un buen candidato de solucin. Solucin de Peterson Esta solucin fue propuesta por P eterson y corresponde a una mejora realizada sobre el algoritmo de Dekker (primera solucin en software que no requiere alternancia estricta). El algoritmo de Peterson se refleja en el siguiente segmento de cdigo.
int turn; int interesado[2]; void entra_region(int proceso){ int otro; otro = 1 - proceso; interesado[proceso] = 1; turno = proceso; while(turno == proceso && interesado[otro] == 1); } void salir_region(int proceso){ interesado[proceso]=0; }

El algoritmo consiste en que cada proceso antes de ingresar a su seccin crtica llame a la funcin entrar_region, y despus de ejecutar la seccin crtica llame a la funcin salir_region. El comportamiento del algoritmo es como sigue. Cuando el proceso 0 llama a funcin entrar_region manifiesta su inters y hace el turno =0 y entra a su seccin crtica; si ahora el proceso 1 quiere ingresar a su seccin critica slo lo podr hacer cuando el proceso 0 manifieste su desinters colocando el interesado[0] = 0. Ahora si ambos procesos se ejecutan simultneamente la variable turno se quedar con el ltimo proceso que ejecute la instruccin, luego obligadamente esperar para el ingreso a su seccin crtica el ltimo proceso que la modifique. Este algoritmo soluciona los problemas, pero hay un desperdicio en el tiempo de la CPU.
13

Administracin de Procesos

Sistemas Operativos

Instruccin TSL (Test and Set Lock) Esta solucin consiste en que existe una instruccin (TSL), que lee el contenido de una palabra de memoria en un registro y luego almacena un valor distinto de cero en esa posicin de memoria. Las dos partes de esta instruccin se ejecutan atmicamente, sin ser interrumpidas, la lectura y escritura de esta posicin de memoria no son interrump idas, ninguno de los procesadores tiene acceso a esta palabra hasta que dichas acciones sean concluidas. Dado que es el bus a memoria el que se bloquea durante este periodo, se dice que esta instruccin proporciona exclusin mutua por soporte hardware. La utilizacin de esta instruccin para la proporcin de la exclusin mutua se refleja mediante el siguiente segmento de cdigo: entra_region: ret tsl register, flag salir_region: cmp register,#0 mov flag,#0 jnz entra_region: ret Dado que la instruccin TSL es indivisible, si un proceso esta en su seccin crtica ningn otro proceso entrar en su seccin crtica mientras el primer proceso no salga, cuando este salga el flag ser 0, luego este se copiar en register y as podr entrar el siguiente proceso. Mientras el flag sea distinto de cero el proceso correspondiente continuar esperando. 2.3.3.- Semforos En la seccin anterior analizamos diversos mecanismos de exclusin mutua con espera ocupada. Estos mecanismos se caracterizan porque la utilizacin de la CPU no es la ms conveniente, pues todos ellos incurren en tiempo de CPU en espera por la liberacin de los recursos. Por otro lado, con la utilizacin de aquellos mecanismos pueden producirse situaciones no deseadas. Una situacin que puede presentarse es una denominada como Inversin de prioridades; suponga que existen 2 procesos en ejecucin una de alta prioridad y una de baja, que necesitan sincronizarse para accesar un recurso. La planificacin de los procesos se realiza mediante un algoritmo de prioridades dinmica. Luego, que puede suceder con los procesos?.... Suponga que el proceso de mayor prioridad requiere hacer una E/S, y que el proceso de baja prioridad se ejecuta y entra en su seccin crtica, cuando este proceso aun no sale de su seccin crtica el proceso de mayor prioridad termina su E/S y pasa a listo, en ese momento el planificador quita la CPU al proceso de menor prioridad y se la otorga a proceso de mayor prioridad, sin embargo este proceso no puede entrar a su seccin crtica y espera porque se libere el recurso, pero el recurso no se puede liberar porque el proceso no se puede ejecutar. Para evitar este tipo de problemas se crearon mecanismos de exclusin mutua sin espera ocupada, es decir, mecanismos que permitan a los procesos esperar por la liberacin de los recursos en estado bloqueado. Las primitivas ms sencillas que permiten a los procesos cambiar de estado mientras esperan son sleep()y wakeup() . La primera permite pasar un proceso de listo a bloqueado y la segunda permite pasar un proceso de bloqueado a listo. A continuacin veremos el problema del productor/consumidor resuelto con estas primitivas.
#define N 100 int count = 0; void productor(void) { int tem; while(1){ produce_item(tem); if (count == N)sleep(); enter_item(tem); count = count+1; if (count==1)wakeup(consumidor); } }

void consumidor(void) { int tem; while(1){ if (count==0)sleep(); remove_item(tem); count=count-1; if(count==N-1)wakeup(productor); consume_item(tem); } }

Sin embargo, esta solucin tambin tiene un problema de competencia. Analcelo y de un ejemplo de como se podra producir. Exclusin mutua y Sincronizacin con semforos Los semforos fueron inventados por Dijkstra en 1965 y usan una variable de sincronizacin que toma valores enteros no negativos. La implementacin de los semforos es realizada en el sistema bajo el concepto de llamada a sistema. Los semforos tienen dos operaciones asociadas, cada una de las cuales se ejecuta en forma atmica:
14

Administracin de Procesos

Sistemas Operativos

P(s) o Down(s) : Esta operacin es una generalizacin de sleep(), y segn el valor de s acta. Si s > 0, s = s - 1 Si s = 0, proceso duerme

V(s) o Up(s): Esta operacin es una generalizacin de wakeup(), y lo que hace es incrementar el valor de s . Si uno o ms procesos estn esperando ser despertados por este semforo, el sistema elige cualquiera de ellos para que el down(), correspondiente le sea exitoso y pueda continuar en ejecucin. Existen bsicamente dos tipos de semforos: Semforos contadores: Toman valores positivos mayores o iguales a 0. Se utilizan para sincronizacin de procesos. Semforos binarios: Toman los valores 0 1 y se utilizan para exclusin mutua. A continuacin se presenta una solucin mediante semforos del problema productor/consumidor.

#define N 100 semaphore mutex = 1; semaphore empty = N; semaphore full = 0; void productor(void) { int tem; while(1){ produce_item(tem); down(empty); down(mutex); enter_item(tem); up(mutex); up(full); } }

void consumidor(void) { int tem; while(1){ down(full); down(mutex); remove_item(&tem); up(mutex); up(empty); consume_item(tem); } }

En este caso tenemos la utilizacin de 3 semforos, uno destinado al control de la exclusin mutua y los otros dos destinados a la sincronizacin de los procesos para el control de buffer lleno y vaco. 2.3.4.- Monitores Los semforos son primitivas de sincronizacin de bajo nivel, y su utilizacin a nivel de programacin puede ser peligrosa, si no son utilizados correctamente. En general, los problemas de concurrencia no son fciles de reproducir, por lo tanto si no son insertados en los programas en la manera debida, puede que en general no se detecten los problemas, pero en algunas ocasiones se pueden producir los problemas y la aplicacin construida puede dejar de funcionar. Para explicar en mejor forma este problema suponga que en el problema de productor consumidor visto en la seccin anterior, que sucede?, si el cdigo del productor se escribe de la siguiente manera:
void productor(void) { int tem; while(1){ produce_item(tem); down(mutex); down(empty); enter_item(tem); up(mutex); up(full); } }

Suponga que el buffer este lleno, el productor hara un down() sobre el mutex, luego un down() sobre el empty, como esta lleno el productor se bloquea. Si en ese momento el consumidor quiere sacar un tem no puede hacerlo porque el mutex esta en 0, por lo tanto el consumidor tambin se duerme. Luego, tanto el productor como el consumidor se bloquean y se produce un fenmeno denominado como Deadlock (bloqueo mortal). Los monitores, desarrollados por C.A.R. Hoare, proporcionan abstracciones separadas para la exclusin mutua y para la sincronizacin. Constituyen un mecanismo de sincronizacin de alto nivel. Los monitores constituyen un conjunto de variables, estructuras de datos y procedimientos que actan sobre los datos.
15

Administracin de Procesos

Sistemas Operativos

En otras palabras los monitores son abstracciones que combinan tres caractersticas: Comparten datos Poseen operaciones sobre los datos Permiten la sincronizacin y la planificacin Los procesos pueden llamar los procedimientos del monitor cuando lo deseen, pero no pueden accesar los datos directamente. Una de las principales propiedades de los monitores es que cuando un proceso esta ejecutando uno de los procedimientos de l, ningn otro proceso puede entrar al monitor. Luego, la construccin del monitor debe contemplar en las primeras instrucciones la verificacin si hay otro proceso activo dentro del monitor, si no hay otro proceso activo en el monitor el proceso que lo esta requiriendo podr entrar. Dado que los monitores son proporcionados por el lenguaje de programacin la tarea de exclusin mutua es realizada por el compilador, para tal efecto este utiliza un semforo binario. El programador no se preocupa por la exclusin mutua pues esa tarea la har el compilador. Algunos de los lenguajes concurrentes que poseen estas estructuras son: Modula 2, modula 3, Pascal concurrente, C concurrente, Java, etc. Supongamos que C++ soportara monitores. Podramos entonces usarlos para implementar una cola:
monitor cola { public: void enter_item(char tem); char remove_item; private: condition full, empty; int count; };

Los monitores son un mecanismo de exclusin mutua, pero no permiten controlar situaciones de sincronizacin, como el caso del uso de los semforos full y empty para la solucin del problema productor/consumidor ya vista. Para controlar este tipo de situaciones los monitores introducen las Variables de Condicin. En general, las variables de condicin se pueden reflejar como una de las siguientes primitivas: Wait(condicin): Libera el semforo binario del monitor y pone al proceso a dormir. Cuando el proceso despierta de nuevo, trata de readquirir el semforo binario inmediatamente. Signal(condicin): Despierta un proceso que estaba esperando por la variable de condicin. Si no hay ninguno, no hace nada. Broadcast(condicin): Despierta todos los procesos que esperan por la variable de condicin. Si no hay ninguno, no hace nada. A continuacin se muestra una posible solucin al problema productor/consumidor usando monitores, en C++, con el supuesto que este lenguaje tuviera incorporado este concepto.
monitor cola { public: void enter_item(char tem); char remove_item; private: condition full, empty; int count; }; void cola::enter_item(char tem) { if (count == N) wait(full); insert_item; count = count + 1; if (count == 1) signal(empty); } void cola::remove_item { if (count == 0) wait(empty); delete_item; count = count - 1; if (count == N-1) signal(full); } . . . cola prod_cons; procedure productor; { while(1){ produce_item; prod_cons.enter_item(tem); } } procedure consumidor; { while(1){ prod_cons.remove_item; consume_item; } }
16

Administracin de Procesos

Sistemas Operativos

2.3.5.- Contadores de Eventos Los contadores de eventos constituyen una alternativa de solucin para problemas con secciones crticas sin que se requiera la exclusin mutua. Los contadores de eventos son variables especiales sobre las cuales se definen 3 tipos de operaciones posibles: Read(e) : retorna el valor actual de e; Advance(e): Incrementa indivisiblemente el valor de e; Await(v,e): Espera hasta que e tenga el valor de v o mayor. Los contadores de eventos se caracterizan porque siempre aumentan nunca disminuyen. El problema de productor/consumidor se soluciona mediante contadores de eventos y con las operaciones advance y await . A continuacin se presenta el cdigo donde se refleja dicha solucin.
event_counter in = 0; event_counter out = 0; void productor(void) { int tem, sequence = 0; while(1){ produce_item(tem); sequence = sequence + 1; await(out,sequence - N); enter_iten(tem); advance(in); } } void consumidor(void) { int tem, sequence = 0; while(1){ sequence = sequence + 1; await(in,sequence); remove_item(tem); advance(out); consume_item(tem); } }

Haga el anlisis del comportamiento de esta solucin. 2.3.6.- Mensajes Tanto los semforos como los contadores de evento y los monitores estn limitados por el alcance que tienen, es decir son primitivas y abstracciones que operan sobre un computador aislado. Cuando se desea trabajar sobre un sistema distribuido, en un ambiente de red, estos mecanismos ya no sirven, no permiten comunicar procesos residentes en computadores distintos. Por esta razn existen otros tipos de comunicacin entre procesos, en donde no es necesario que los procesos se encuentren en la misma mquina. Dentro de estos mecanismos se encuentran: Paso de mensajes Pipes RPC En esta seccin hablaremos en trminos generales, de los mensajes. Consideraremos que un mensaje es una pieza de informacin que es pasada de un proceso a otro. Adems diremos que un Mailbox es un lugar donde se almacenan los mensajes a medida que estos se envan y reciben. Por otro lado, existen dos posibles operaciones sobre los mensajes, que son las siguientes. send(destino,&mensaje): copia un mensaje en un mailbox, si el mailbox esta lleno, espera a que exista un espacio en el y lo enva a destino. receive(origen, &mensaje): recibe mensaje del origen lo saca del mailbox, si el mailbox esta vaco espera a que llegue un mensaje. A continuacin se presenta la siguiente figura. mailbox emisor receptor Existen dos tipos de pasos de mensajes, a travs de pipes, mensajes en una sola direccin y a travs de rpc, mensajes en ambas direcciones. A continuacin se presenta el problema productor/consumidor resuelto mediante mensajes.

17

Administracin de Procesos

Sistemas Operativos

#define N 100 #define MAILBOX 4; typedef int message[MAILBOX]; void productor(void) { int item; message m; while(1){ produce_item(item); receive(consumidor,&m); construir_mensaje; send(consumidor,&m); } }

void consumidor(void) { int item, i; message m; for (i=0;i<N;i++) send(productor,&m); while(1){ receive(productor,&m); extrae_mensaje; send(productor,&m); consume_item(item); } }

18

S-ar putea să vă placă și