Você está na página 1de 35

Administracion de Procesos y El Procesador

2.1 Concepto de Procesos

Todos los programas cuya ejecucion solicitan los usuarios, se ejecutan en forma de procesos, de ahi la import

para le informatico de conocerlos en detalle. El proceso se puede definir como un programa de gestion por el
operativo. Durante su eleccion el proceso va modificandoen ejecucion y, de una forma un poco mas precisa,

unidad de procesamiento los registro del modelo de programacion de la computadora, de acuerdo a las intrusi
maquina involucradas.

El sistema operativo mantiene por cada proceso una serie de estructuras de informacion que permiten identific

caracteristicas de este, asi como los recursos que tiene asignados. En esta ultima categoria entran los descrip

los segmentos de memoria asignados, los descriptores de los archivos abiertos, los descriptores de los puerto
comunicaciones, etc.

Una parte muy importante de esta informacion se encuentra normalmente como en el llamadobloque de cont

procesos (BCP). El sistema operativo mantiene una tabla de procesos con todos los BCP de los procesos. Po

razones de eficiencia, la tabla de procesos se construyen normalmente como una estructura estatica, que tien

determinado numero de BCP, todos ellos del mismo tamano. La informacion que compone un proceso es la si

Contenido de los segmentos de memoria en los que residen el codigo y los datos del proceso. A esta
informacion se le denomina imagen de memoria o core image.

Contenido de los registros del modelo de programacion

Contenido del BCP.

2.2 Estado y Transiciones del Proceso

Como se indico anteriormente, el proceso es la unidad de procesamiento gestionada por el sistema operativo.

poder realizar este cometido, el proceso tiene asociado una serie de elementos de informacion, que se resum

Figura 3.8, que se analizan seguidamente. Estos elementos se organizan en tres grupos: estado del procesad
imagen de memoria y tablas del sistema operativo.
Estado del procesador

El estado del procesador esta formado por el contenido de todos sus registros, que se enumeran seguidamen

Registros generales. De existir registros especificos de coma flotante tambien se incluyen aqui.

Contador de programa.

Informacion del proceso

Puntero de pila.

Registro o registros de estado.

Registros especiales. Como puede ser el RIED (registro identificador de espacio de direccionamiento)

El estado del procesador de un proceso reside en los registros del procesador, cuando el proceso esta en ejec
en el bloque de control de proceso (BCP), cuando el proceso no esta en ejecucion.

Cuando el proceso esta ejecutando, el estado del procesador varia de acuerdo al flujo de instrucciones maqui

ejecutado. En este caso, la copia del estado del procesador que reside en el BCP no esta actualizada. Tengas

cuenta que los registros de la maquina se utilizan para no tener que acceder a la informacion de memoria, dad

mucho mas lenta. Por tanto, no tiene sentido plantear que, en cada modificacion de un registro, se actualice s
en el BCP, puesto que esta en memoria.

Sin embargo, cuando se detiene la ejecucion de un proceso, como consecuencia de la ejecucion de una interr

es muy importante que el sistema operativo actualice la copia del estado del procesador en su BCP. En termin

concretos, la rutina del sistema operativo que trata las Interrupciones lo primero que ha de hacer es salvar el e
del procesador en el BCP del proceso interrumpido.

2.3 Procesos Ligeros (Hilos o Hebras)

Un proceso ligero, o thread, es un programa en ejecucion (flujo de ejecucion) que comparte la imagen de mem
otras informaciones con otros procesos ligeros. Como muestra la Figura , un proceso puede contener un solo
ejecucion, como ocurre en los procesos clasicos, o mas de un flujo de ejecucion (procesos ligeros).

Desde el punto de vista de la programacion, un proceso ligero se define como una funcion cuya ejecucion se p
lanzar en paralelo con otras. El hilo de ejecucion primario, o proceso ligero primario, corresponde a la funcion

Cada proceso ligero tiene informaciones que le son propias y que no comparte con otros procesos ligeros. Las

informaciones propias se refieren fundamentalmente al contexto de ejecucion, pudiendose destacar las siguie

Contador de programa.

Pila.

Registros.

Estado del proceso ligero (ejecutando, listo o bloqueado).

Todos los procesos ligeros de un mismo proceso comparten la informacion del mismo. En concreto, comparten

Espacio de memoria.

Variables globales.

Archivos abiertos.

Procesos hijos.

Temporizadores.

Senales y semaforos.

Contabilidad.

Es importante destacar que todos los procesos ligeros de un mismo proceso comparten el mismo espacio de

direcciones de memoria, que incluye el codigo, los datos y las pilas de los diferentes procesos ligeros. Esto ha

no exista proteccion de memoria entre los procesos ligeros de un mismo proceso, algo que si ocurre con los p
convencionales.

El proceso ligero constituye la unidad ejecutable en Windows NT. La Figura representa de forma esquematica
estructura de un proceso de Windows NT con sus procesos ligeros.

Proceso ligero

2.4 Concurrencia y Secuenciabilidad

Los procesos son concurrentes si existen simultaneamente. Los procesos concurrentes pueden funcionar en

totalmente independiente unos de otros, o pueden ser asincronos, lo cual significa que en ocasiones requieren
sincronizacion o cooperacion.

Cuando dos o mas procesos llegan al mismo tiempo a ejecutarse, se dice que se ha presentado una concurre

procesos. Es importante mencionar que para que dos o mas procesos sean concurrentes , es necesario que t

alguna relacion entre ellos como puede ser la cooperacion para un determinado trabajo o el uso de informacio

recursos compartidos, por ejemplo: en un sistema de un procesador , la multiprogramacion es una condicion n


pero no suficiente para que exista concurrencia, ya que los procesos pueden ejecutarse de forma totalmente
independiente.

Por otro lado en un sistema de varios procesos se puede presentar la concurrencia siempre y cuando las activ
necesiten actuar entre si ya sea para utilizar informacion en comun o para cualquier otra cosa.
Existen tres formas modelos de computadora en los que se puede pueden ejecutar procesos concurrentes:

Multiprogramacion con un unico procesador.

En este modelo todos los procesos concurrentes ejecutan sobre un unico procesador. El sistema operativo se

de ir repartiendo el tiempo del procesador entre los distintos procesos, intercalando la ejecucion de los mismo
dar asi una apariencia de ejecucion simultanea.
Multiprocesador.

Un multiprocesador es una maquina formada por un conjunto de procesadores que comparten memoria princi
este tipo de arquitecturas, los procesos concurrentes no solo pueden intercalar su ejecucion sino tambien

superponerla. En este caso si existe una verdadera ejecucion simultanea de procesos, al coincidir las fases de

procesamiento de distintos procesos. En un instante dado se pueden ejecutar de forma simultanea tantos proc
como procesadores haya.
Multicomputadora.
Una multicomputadora es una maquina de memoria distribuida, en contraposicion con el multiprocesador que
memoria compartida. Esta formada por una serie de computadoras completas con su UCP, memoria principal

caso, periferia. Cada uno de estos procesadores completo se denomina nodo. Los nodos se encuentran cone

se comunican entre si a traves de una red de interconexion, empleando el metodo de paso de mensajes. En e

de arquitecturas tambien es posible la ejecucion simultanea de los procesos sobre los distintos procesadores.

En general la concurrencia sera aparente siempre que el numero de procesos sea mayor que el de procesado

disponibles, es decir, cuando haya mas de un proceso por procesador. La concurrencia sera real cuando haya
proceso por procesador

2.4.1 Exclusion Mutua de Seccion Critica

El metodo mas sencillo de comunicacion entre los procesos de un programa concurrente es el uso comun de

variables de datos. Esta forma tan sencilla de comunicacion puede llevar, no obstante, a errores en el program

el acceso concurrente puede hacer que la accion de un proceso interfiera en las acciones de otro de una form

adecuada. Aunque nos vamos a fijar en variables de datos, todo lo que sigue seria valido con cualquier otro re
del sistema que solo pueda ser utilizado por un proceso a la vez.

Por ejemplo una variable x compartida entre dos procesos A y B que pueden incrementar o decrementar la va
dependiendo de un determinado suceso. Este situacion se plantea, por ejemplo, en un problema tipico de la

programacion concurrente conocido como el Problema de los Jardines. En este problema se supone que se d

controlar el numero de visitantes a unos jardines. La entrada y la salida a los jardines se puede realizar por do
que disponen de puertas giratorias. Se desea poder conocer en cualquier momento el numero de visitantes a

jardines, por lo que se dispone de un computador con conexion en cada uno de los dos puntos de entrada que
informan cada vez que se produce una entrada o una salida.

Asociamos el proceso P1 a un punto de entrada y el proceso P2 al otro punto de entrada. Ambosprocesos se


de forma concurrente y utilizan una unica variable x para llevar la cuenta del numero de visitantes.

El incremento o decremento de la variable se produce cada vez que un visitante entra o sale por una de las pu
Asi, la entrada de un visitante por una de las puertas hace que se ejecute la instruccion

x:=x+1
mientras que la salida de un visitante hace que se ejecute la instruccion
x:=x-1
Si ambas instrucciones se realizaran como una unica instruccion hardware, no se plantearia ningun problema

programa podria funcionar siempre correctamente. Esto es asi por que en un sistema con un unico procesado

puede realizar una instruccion cada vez y en un sistema multiprocesador se arbitran mecanismos que impiden

varios procesadores accedan a la vez a una misma posicion de memoria. El resultado seria que el incremento
decremento de la variable se produciria de forma secuencial pero sin interferencia de un proceso en la accion

Sin embargo, si se produce interferencia de un proceso en el otro si la actualizacion de la variable se realiza m


la ejecucion de otras instrucciones mas sencillas, como son las usuales de:

copiar el valor de x en un registro del procesador

incrementar el valor del registro

almacenar el resultado en la direccion donde se guarda x

Aunque el proceso P1 y el P2 se suponen ejecutados en distintos procesadores (lo que no tiene porque ser ci

realidad) ambos usan la misma posicion de memoria para guardar el valor de x. Se puede dar la situacion de q
planificador de procesos permita el entrelazado de las operaciones elementales anteriores de cada uno de

los procesos, lo que inevitablemente producira errores. Si, por ejemplo, se produce el siguiente orden de ope

P1 carga el valor de x en un registro de su procesador

P2 carga el valor de x en un registro de su procesador

P2 incrementa el valor de su registro

P1 incrementa el valor de su registro

P1 almacena el valor de su registro en la direccion de memoria de x

P2 almacena el valor de su registro en la direccion de memoria de x se perdera un incremento de la va

Este tipo de errores son muy dificiles de detectar mediante test del programa ya que el que se produzcan depe
la temporizacion de dos procesos independientes.

El ejemplo muestra de forma clara la necesidad de sincronizar la actuacion de ambos procesos de forma que
produzcan interferencias entre ellos.

Para evitar este tipo de errores se pueden identificar aquellas regiones de los procesos que acceden a variabl

compartidas y dotarlas de la posibilidad de ejecucion como si fueran una unica instruccion. Se denomina Secc

Critica a aquellas partes de los procesos concurrentes que no pueden ejecutarse de forma concurrente o, ta

que desde otro proceso se ven como si fueran una unica instruccion. Esto quiere decir que si un proceso entra

ejecutar una seccion critica en la que se accede a unas variables compartidas, entonces otro proceso no pued
a ejecutar una region critica en la que acceda a variables compartidas con el anterior.

Las secciones criticas se pueden agrupar en clases, siendo mutuamente exclusivas las secciones criticas de

clase. Para conseguir dicha exclusion se deben implementar protocolos software que impidan o bloqueen (loc
acceso a una seccion critica mientras esta siendo utilizada por un proceso.

Requisistos para la exclusion mutua


1.

Solo un proceso, de todos los que poseen secciones criticas por el mismo recurso compartido, debe
permiso para entrar en ella en un momento dado.

2.

Un proceso que se interrumpe en una seccion no critica debe hacerlo sin interferir con los otros proc

3.

Un proceso no debe poder solicitar acceso a una seccion critica para despues ser demorado
indefinidamente, no puede permitirse el interbloqueo o la inanicion.

4.

Si ningun proceso esta en su seccion critica, cualquier proceso que solicite entrar en la suya debe p
hacerlo sin demora.

5.

No se debe suponer sobre la velocidad relativa de los procesos o el numero de procesadores.

6.

Un proceso permanece en su seccion critica por un tiempo finito.

Una manera de satisfacer los requisitos de exclusion mutua es dejar la responsabilidad a los procesos que

ejecutar concurrentemente. Tanto si son programas del sistema como de aplicacion, los procesos deben coord

unos con otros para cumplir la exclusion mutua, sin ayuda del lenguaje de programacion o del sistema operati
metodos se conocen comosoluciones por software.

2.4.2 Sincronizaicon de Procesos

En muchos casos, los procesos se reunen para realizar tareas en conjunto, a este tipo de relacion se le llama

cooperativos. Para lograr la comunicacion, los procesos deben sincronizarse, de no ser asi pueden ocurrir pro
no deseados. La sincronizacion es la transmision y recepcion de senales que tiene por objeto llevar a cabo el
de un grupo de procesos cooperativos.

Es la coordinacion y cooperacion de un conjunto de procesos para asegurar la comparacion de recursos de co

La sincronizacion entre procesos es necesaria para prevenir y/o corregir errores de sincronizacion debidos al a
concurrente a recursos compartidos, tales como estructuras de datos o dispositivos de E/S, de procesos
contendientes. La sincronizacion entre procesos tambien permite intercambiar senales de tiempo

(ARRANQUE/PARADA) entre procesos cooperantes para garantizar las relaciones especificas de precedencia
impuestas por el problema que se resuelve.

Sin una sincronizacion adecuada entre procesos, la actualizacion de variables compartidas puede inducir a er

tiempo relacionados con la concurrencia que son con frecuencia dificiles de depurar. Una de las causas princip

este problema es que procesos concurrentes puedan observar valores temporalmente inconsistentes de una v
compartida mientras se actualizan. una aproximacion para resolver este problema es realizar actualizaciones

variables compartidas de manera mutuamente exclusiva. Se pueden mejorar permitiendo que a lo mas un pro

entre a la vez en la seccion critica de codigo en la que se actualiza una variable compartida o estructura de da
particular.

Para que los procesos puedan sincronizarse es necesario disponer de servicios que permitan bloquear o susp

bajo determinadas circunstancias la ejecucion de un proceso. Los principales mecanismos de sincronizacion q


ofrecen los sistemas operativos son:

Senales

Tuberias

Semaforos

Mutex y variables condicionales

Paso de mensajes

2.4.2.1 Mecanismo de Semaforos

Las diversas soluciones hardware al problema de la seccion critica, basadas en las instrucciones TestAndSet

Swap (), son complicadas de utilizar por los programadores de aplicaciones. Para superar esta dificultad, pode
usar una herramienta de sincronizacion denominada semaforo.
Un semaforo S es una variable entera a la que, dejando aparte la inicializacion, solo se accede mediante dos

operaciones atomicas estandar: wait () y signal (). Originalmente, la operacion wait () se denominaba P (del te

holandes proberen, probar); mientras que signal( ) denominaba originalmente V (verhogen, incrementar). La d
de wait () es la que sigue:
wait (S) {
while S <= 0
;??? // no-op
S--;
}
La definicion de signal () es:
signal(S) {
S++;
}
Todas las modificaciones del valor entero del semaforo en las operaciones wait () y signal () deben ejecutarse
indivisible. Es decir, cuando un proceso modifica el valor del semaforo, ningun otro proceso puede modificar
simultaneamente el valor de dicho semaforo. Ademas, en el caso de wait(), la prueba del valor entero de S (S
su posible modificacion (S - -) tambien se deben ejecutar sin interrupcion.
Utilizacion

Los sistemas operativos diferencian a menudo entre semaforos contadores y semaforos binarios. El valor de u

semaforo contador puede variar en un dominio no restringido, mientras que el valor de un semaforo binario so

ser 0 01. En algunos sistemas, los semaforos binarios se conocen como cerrojos mutex, ya que son cerrojos q
proporcionan exclusion mutua.

Podemos usar semaforos binarios para abordar el problema de la seccion critica en el caso de multiples proce

n procesos comparten un semaforo, mutex, inicializado con el valor 1. Cada proceso P; se organiza como se m
en la Figura 6.9.

Los semaforos contadores se pueden usar para controlar el acceso a un determinado recurso formado por un

finito de instancias. El semaforo se inicializa con el numero de recursos disponibles. Cada proceso que desee

recurso ejecuta una operacion wait () en el semaforo (decrementando la cuenta). Cuando un proceso libera un

ejecuta una operacion signal()(incrementando la cuenta). Cuando la cuenta del semaforo llega a 0, todos los r

estaran en uso. Despues, los procesos que deseen usar un recurso se bloquearan hasta que la cuenta sea m
0.

Tambien podemos usar los semaforos para resolver diversos problemas de sincronizacion. Por ejemplo, consi
procesos que se esten ejecutando de forma concurrente: P1 con una instruccion S1 y P2 con una instruccion

Suponga que necesitamos que S2 se ejecute solo despues de que Sl se haya completado. Podemos impleme
esquema dejando que P1 Y P2 compartan un semaforo comun synch, inicializado con el valor 0, e insertando
instrucciones:
s1;
signal(synch);
en el proceso P1, y las instrucciones
wait(synch); S2;

en el proceso P2. Dado que synch se inicializa con el valor 0, P2 ejecutara S2 solo despues de que P1 haya in
signal ( synch), instruccion que sigue a la ejecucion de S1.
do
waiting(mutex);
???????????? // seccion critica
signal(mutex);
??????????? // seccion restante
}while (TRUE);
??? Implementacion

La principal desventaja de la definicion de semaforo dada aqui es que requiere una espera activa. Mientras un

esta en su seccion critica, cualquier otro proceso que intente entrar en su seccion critica debe ejecutar continu
un bucle en el codigo de entrada. Este bucle continuo plantea claramente un problema en un sistema real de
multiprogramacion, donde una sola CPU se comparte entre muchos procesos.

La espera activa desperdicia ciclos de CPU que algunos otros procesos podrian usar de forma productiva. Est

semaforo tambien se denomina cerrojo mediante bucle sin fin (spinlock), ya que el proceso "permanece en un

sin fin" en espera de adquirir el cerrojo. (Los cerrojos mediante bucle sin fin tienen una ventaja y es que no req
ningun cambio de contexto cuando un proceso tiene que esperar para adquirir un cerrojo.

Los cambios de contexto pueden llevar un tiempo considerable. Por tanto, cuando se espera que lo-s cerrojos

mantengan durante un periodo de tiempo corto, los cerrojos mediante bucle sin fin pueden resultar utiles; por e

emplean a menudo en los sistemas multiprocesador, donde una hebra puede "ejecutar un bucle" sobre un pro
mientras otra hebra ejecuta su seccion critica en otro procesador).

Para salvar la necesidad de la espera activa, podemos modificar la definicion de las operaciones de semaforo

y s i gna 1(). Cuando un proceso ejecuta la operacion wa i t () y determina que el valor del semaforo no es pos

tiene que esperar. Sin embargo, en lugar de entrar en una espera activa, el proceso puede bloquearse a si mis

operacion de bloqueo coloca al proceso en una cola de espera asociada con el semaforo y el estado del proce

al estado de espera. A continuacion, el control se transfiere al planificador de la CPU, que selecciona otro proc
su ejecucion.

Un proceso bloqueado, que esta esperando en un semaforo S, debe reiniciarse cuando algun otro proceso eje

operacion signal (). El proceso se reinicia mediante una operacion wakeup () , que cambia al proceso del esta

espera al estado de preparado. El proceso se coloca en la cola de procesos preparados. (La CPU puede o no

conmutar del proceso en ejecucion al proceso que se acaba de pasar al estado de preparado, dependiendo de
algoritmo de planifigacion de la CPU.)
Para implementar semaforos usando esta definicion, definimos un semaforo como una estructura "C":
typedef struct {
int value;
struct process *list;
}semaphore;
Cada semaforo tiene un valor (value) entero y una lista de procesos list. Cuando un proce

so tiene que esperar en un semaforo, se anade a la lista de procesos. Una operacion signa1 () elimina un proc
la lista de procesos en espera y lo despierta.
La operacion de semaforo wait () ahora se puede definir del siguiente modo:
wait(semaphore *S) {
S->value--;
if (S->value < 0) {
anadir este proceso a S->list;
block();
}
}
La operacion de semaforo signal () ahora puede definirse asi:

signal(semaphore *S) {
S->value++;}
if (S->value <= 0) {
eliminar un proceso P de S->list;
wakeup(P);
}
}

La operacion block () suspende al proceso que la ha invocado. La operacion wakeup () reanuda la ejecucion d

proceso bloqueado P. Estas dos operaciones las proporciona el sistema operativo como llamadas al sistema b

Observe que, aunque bajo la definicion clasica de semaforos con espera activa, el valor del semaforo nunca e

negativo, esta implementacion si que puede tener valores negativos de semaforo. Si el valor del semaforo es n

su modulo es el numero de procesos en espera en dicho semaforo. Este hecho resulta de conmutar el orden d
operaciones de decremento y de prueba en la implementacion de la operacion wait ().

La lista de procesos en espera puede implementarse facilmente mediante un campo de enlace en cada bloqu

control de proceso (PCB). Cada semaforo contiene un valor entero y un puntero a la lista de bloques PCB. Un

de anadir y eliminar procesos de la lista de manera que se garantice un tiempo de espera limitado consiste en
una cola FIFO, donde el semaforo contenga punteros a ambos extremos de la cola. Sin embargo, en general,

puede utilizar cualquier estrategia de gestion de la cola. El uso correcto de los semaforos no depende de la es
concreta de gestion de la cola que se emplee para las listas de los semaforos.

El aspecto critico de los semaforos es que se deben ejecutar atomicamente: tenemos que garantizar que dos

procesos no puedan ejecutar al mismo tiempo sendas operaciones waitO y signal () sobre el mismo semaforo

de un problema de seccion critica. En un entorno de un solo procesador (es decir, en el que solo exista una CP

podemos solucionar el problema de forma sencilla inhibiendo las interrupciones durante el tiempo en que se e

las operaciones wait () y signal (). Este esquema funciona adecuadamente en un entorno de un solo procesad

porque, una vez que se inhiben las interrupciones, las instrucciones de los diferentes procesos no pueden inte

solo se ejecuta el proceso actual hasta que se reactivan las interrupciones y el planificador puede tomar de nu
control.

En un entorno multiprocesador, hay que deshabilitar las interrupciones en cada procesador; si no se hace asi,

instrucciones de los diferentes procesos (que esten ejecutandose sobre diferentes procesadores) pueden inte

de forma arbitraria. Deshabilitar las interrupciones en todos los procesadores puede ser una tarea compleja y,

puede disminuir seriamente el rendimiento. Por tanto, los sistemas SMP deben proporcionar tecnicas alternati

bloqueo, como por ejemplo cerrojos mediante bucle sin fin, para asegurar que las operaciones wait () y signa l
ejecuten atomicamente.

Es importante recalcar que no hemos eliminado por completo la espera activa con esta definicion de las opera

wait () y signal (); en lugar de ello, hemos eliminado la espera activa de la seccion de entrada y la hemos lleva

secciones criticas de los programas de aplicacion. Ademas, hemos limitado la espera activa a las secciones cr

las operaciones wait() y signal (), y estas secciones son cortas (si se codifican apropiadamente, no deberian te

de unas diez instrucciones). Por tanto, la seccion critica casi nunca esta ocupada y raras veces se produce es

espera; y, si se produce, solo dura un tiempo corto. En los programas de aplicacion, la situacion es completam

diferente, porque sus secciones criticas pueden ser largas (minutos o incluso horas) o pueden estar casi siem
ocupadas. En tales casos, la espera activa resulta extremadamente ineficiente.
Interbloqueos e inanicion

La implementacion de un semaforo con una cola de espera puede dar lugar a una situacion en la que dos o m
procesos esten esperando indefinidamente a que se produzca un suceso que solo puede producirse como
consecuencia de las operaciones efectuadas por otro de los procesos en espera. El suceso en cuestion es la

de una operacion signal (). Cuando se llega a un estado asi, se dice que estos procesos se han interbloquead

Para ilustrar el concepto, consideremos un sistema que consta de dos procesos, Po y Pl, con acceso cada un
ellos a dos semaforos, S y Q, configurados con el valor 1:
Po ??????????????????

Pi

wait (S)?????????? ?wait (Q);


wait (Q)?????????? wait (S);
signal (S)?????? signal (Q);
signal (Q)?????? signal (S);

Suponga que Po ejecuta wait(S) y luego P1 ejecuta wait(Q). Cuando Po ejecuta wait(Q), debe esperar hasta q

ejecute signal (Q). De forma similar, cuando P1 ejecuta wait (S), tiene que esperar hasta que Po ejecute signa
Dado que estas operaciones signal() no pueden ejecutarse, Po y Pl se interbloquean.

Decimos que un conjunto de procesos esta en un estado de interbloqueo cuando todos los procesos del conju

estan esperando un suceso que solo puede producirse como consecuencia de las acciones de otro proceso d

conjunto. Los sucesos que mas nos interesan aqui son los de adquisicion y liberacion de recursos, pero tambi
otros tipos de sucesos que pueden dar lugar a interbloqueos, como veremos en el Capitulo 7. En ese capitulo
describiremos varios mecanismos para tratar los problemas de interbloqueo.

Otro problema relacionado con los interbloqueos es el del bloqueo indefinido o muerte por inanicion, una situa

la que algunos procesos esperan de forma indefinida dentro del semaforo. El bloqueo indefinido puede produc

anadimos y eliminamos los procesos a la lista asociada con el semaforo utilizando un esquema LIFO (last-in, f

2.4.2.2 Mecanismos de Monitoreo

Aunque los semaforos proporcionan un mecanismo adecuado y efectivo para el proceso de sin-cronizacion, u

incorrecto de los mismos puede dar lugar a errores de temporizacion que son dificiles de detectar, dado que e

errores solo ocurren si tienen lugar algunas secuencias de eje-cucion concretas y estas secuencias no siempr
producen.

Hemos visto un ejemplo de dichos errores en el uso de contadores en la solucion del problema productor-cons

(Seccion 6.1). En ese ejemplo, el problema de temporizacion se producia raras veces, e incluso entonces el va

contador parecia ser razonable: lo que pasaba es que diferia en 1 del valor correcto. Pero aunque el valor pare
correcto, no era aceptable y es por esta razon que se introdujeron los semaforos.

Lamentablemente, estos errores de temporizacion pueden producirse tambien cuando se emplean semaforos
ilustrar como, revisemos la solucion con semaforos para el problema de la seccion critica. Todos los procesos
comparten una variable de semaforo mutex, que se iniciali-za con el valor 1. Cada proceso debe ejecutar una

operacion wait (mutex) antes de entrar en la seccion critica y una operacion signal (mutex) despues de la mism

esta secuencia no se lleva a cabo, dos procesos podrian estar dentro de sus secciones criticas al mismo tiemp

Examinemos los problemas a los que esto da lugar. Observe que estos problemas surgiran inclu-so aunque so
un unico proceso el que no se comporte de la forma adecuada; dicha situacion puede deberse a un error de
programacion no intencionado o a que un cierto programador no tenga muchas ganas de cooperar.

Suponga que un proceso intercambia el ordenen el que se ejecutan las operaciones wait() y signal (), dando lu
siguiente secuencia de ejecucion:
signal(mutex);
seccion critica
wait(mutex);

En esta situacion, varios procesos pueden estar ejecutando sus secciones criticas simultane-amente, violando

requisito de exclusion mutua. Observe que este error solo puede des-cubrirse si varios procesos estan activos
simultaneamente en sus secciones criticas y que esta situacion no siempre se produce.
???? Suponga que un proceso reemplaza signal(mutex) por wait(mutex). Es decir, ejecuta
wait(mutex);
seccion critica wait(mutex);
En este caso, se producira un interbloqueo.

Suponga que un proceso omite la operacion wait( mutex ), la operacion signal (mutex) , o ambas. E
caso, se violara la exclusion mutua o se producira un interbloqueo.

Estos ejemplos ilustran los distintos tipos de error que se pueden generar facilmente cuando los programadore
emplean incorrectamente los semaforos para solucionar el problema de la seccion critica..

Para abordar tales errores, los investigadores han desarrollado estructuras de lenguaje de alto nivel. En esta s
vamos a describir una estructura fundamental de sincronizacion de alto nivel, el tipo monitor.
Utilizacion

Un tipo, o un tipo abstracto de datos, agrupa una serie de datos privados con un conjunto de metodos publicos
utilizan para operar sobre dichos datos. Un tipo monitor tiene un con-junto de operaciones definidas por el

programador que gozan de la caracteristica de exclusion mutua dentro del monitor. El tipo monitor tambien con

declaracion de una serie de variables cuyos valores definen el estado de una instancia de dicho tipo, junto con

cuerpos de los procedimientos o funciones que operan sobre dichas variables. En la Figura 6.16 se muestra la

taxis de un monitor. La representacion de un tipo monitor no puede ser utilizada directamente por los diversos
procesos. Asi, un procedimiento definido dentro de un monitor solo puede acceder a las variables declaradas

localmente dentro del monitor y a sus parametros formales. De forma similar, a las variables locales de un mo
pueden acceder los procedimientos locales.

La estructura del monitor asegura que solo un proceso este activo cada vez dentro del monitor. En consecuen

programador no tiene que codificar explicitamente esta restriccion de sincronizacion. Sin embargo, la estructur

monitor, como se ha definido hasta ahora, no es lo suficientemente potente como para modelar algunos esque

sincronizacion. Para ello, necesitamos definir mecanismos de sincronizacion adicionales. Estos mecanismos l

proporciona la estructura condition. Un programador que necesite escribir un esquema de sincronizacion a me


puede definir una o mas variables de tipo condition:
condition x, y;

Las unicas operaciones que se pueden invocar en una variable de condicion son wait () y signal () . La operac
x.wait();

indica que el proceso que invoca esta operacion queda suspendido hasta que otro proceso invo-que la operac
x.signal();

La operacion x.signal() hace que se reanude exactamente uno de los procesos suspendidos. Si no habia ning

proceso suspendido, entonces la operacion signal () no tiene efecto, es decir, el estado de x sera el mismo qu

operacion nunca se hubiera ejecutado Compare esta operacion con la operacion signal () asociada con los se
que siempre afectaba al estado del semaforo.

Suponga ahora que, cuando un proceso invoca la operacion x. signal(), hay un proceso en estado suspendido

asociado con la condicion x. Evidentemente, si se permite al proceso sus-pendido Q reanudar su ejecucion, el

P que ha efectuado la senalizacion debera esperar; en caso contrario, P y Q se activarian simultaneamente de

monitor. Sin embargo, observe que conceptualmente ambos procesos pueden continuar con su ejecucion. Exi
posibilidades:
1. Senalizar y esperar. P espera hasta que Q salga del monitor o espere a que se produzca otra condicion.
2. Senalizar y continuar. Q espera hasta que P salga del monitor o espere a que se produzca otra condicion.

Hay argumentos razonables en favor de adoptar cualquiera de estas opciones. Por un lado, puesto que P ya e

ejecutandose en el monitor, el metodo de senalizar y continuar parece el mas razonable. Por otro lado, si perm

que la hebra P continue, para cuando se reanude la ejecu-cion de Q, es posible que ya no se cumpla la condic

logica por la que Q estaba esperando. En el lenguaje Pascal Concurrente se adopto un compromiso entre esta

opciones: cuando la hebra P ejecuta la operacion signal, sale inmediatamente del monitor. Por tanto, la ejecuc
se reanuda de forma inmediata.
monitor nombre del monitor {
// declaraciones de variables compartidas procedimiento P1
( . . . )?????????????????????????????????????????????????????????? {
}
procedimiento P2 (??????????????? . . )???????? {
}
procedimiento Pn ( .????????????????????? )????? {
}
codigo de inicializacion ( .???? )?????????? {
}
}

2.4.3 Interbloqueo (DeadLock)

El estancamiento se puede definir formalmente como sigue: "Un conjunto de procesos se estancan si cada pro

del conjunto esta esperando un evento que solo otro proceso del conjunto puede provocar". Puesto que todos

procesos estan en espera, ninguno de ellos podra ocasionar nuca ninguno de los eventos que podrian desbloq

algunos de los otros miembros del conjunto y todos los procesos seguiran esperando indefinidamente.
Definicion de Abrazo Mortal

Un conjunto de procesos esta en un abrazo mortal cuando todos los procesos en ese conjunto estan esperand

evento que solo puede ser causado por otro proceso en el conjunto. Los eventos a los cuales nos estamos ref

son concernientes con la asignacion y liberacion de recursos principalmente. Sin embargo, otro tipo de evento
pueden llevar a la existencia de abrazos mortales.
Para ejemplificar un estado de abrazo mortal, considere un sistema con tres unidades de disco. Suponga que

tres procesos, cada uno de ellos tiene asignada una de las unidades de disco. Si ahora cada proceso pide otra

de disco, los tres procesos se encuentran ahora en un estado de abrazo mortal. Cada uno esta esperando el e

"unidad de disco liberada", lo cual solo puede ser causada por alguno de los otros procesos en espera. Este e
ilustra un abrazo mortal involucrando procesos compitiendo por el mismo tipo de recurso.

Los abrazos mortales pueden tambien involucrar diferentes tipos de recursos. Por ejemplo, considere un siste

una impresora y una unidad de disco. Suponga que el proceso A tiene asignada la unidad de disco y que el pr

tiene asignada la impresora. Ahora, si A pide la impresora y B pide la unidad de disco, ocurre un abrazo morta

Ejemplo de un abrazo mortal.

Debe ser obvio que un abrazo mortal es una condicion indeseable. En un abrazo mortal, los procesos nunca t

de ejecutarse y los recursos del sistema esta amarrados, evitando que otros procesos puedan siquiera empez

Antes de discutir varios metodos para manejar el problema de los abrazos mortales, seria util describir alguna
propiedades que los caracterizan.
Condiciones Necesarias

Segun Coffman (1971), existen cuatro condiciones que deben cumplirse para que haya estancamiento. Una s

de abrazo mortal puede surgir si y solo si las siguientes cuatro condiciones ocurren simultaneamente en un sis
1.

Exclusion Mutua.

Cada recurso se asigna por lo regular exactamente a un proceso o bien esta

disponible. Al menos un recurso es mantenido en un modo no-compartible; esto es, solo un proceso a

puede usar el recurso. Si otro proceso solicita ese recurso, tiene que ser retardado hasta que el recurs
sido liberado.

2.

Retener y Esperar.

Los procesos que regularmente contienen recursos otorgados antes pueden

nuevos recursos. Debe existir un proceso que retenga al menos un recurso y este esperando para adq
recursos adicionales que estan siendo retenidos por otros procesos.
3.

No existe el derecho de desasignar (No preemtion). Los recursos previamente otorgados no pued

extraerse por la fuerza de un proceso. Deben ser liberados explicitamente por el proceso que los conti
recursos no pueden ser desasignados (preempted); esto es, un recurso solo puede ser liberado
voluntariamente por el proceso que lo retiene, despues de que el proceso ha terminado su tarea.
4.

Espera Circular

. Debe haber una cadena de dos o mas procesos, cada uno d los cuales este es

u recurso contenido en el siguiente miembro de la cadena. Debe existir un conjunto {p0, p1, ...,pn} de p

en espera tal que p0 este esperando por un recurso que esta siendo retenido por p1, p1 esta esperand

recurso que esta siendo retenido por p2, ..., pn-1 esta esperando por un recurso que esta siendo reten
pn y pn esta esperando por un recurso que esta siendo retenido por p0.

Enfatizamos que las cuatro condiciones deben de cumplirse para que pueda ocurrir un abrazo mortal. La cond

espera circular implica la condicion de retener y esperar, de tal manera que las cuatro condiciones no son tota
independientes. Sin embargo, puede ser util el considerar cada condicion por separado.

Una forma de modelar estas condiciones es usando un grafo de recursos: los circulos representan procesos, l

cuadrados recursos. Una arista desde un recurso a un proceso indica que el recurso ha sido asignado al proce

arista desde un proceso a un recurso indica que el proceso ha solicitado el recurso, y esta bloqueado esperan

Entonces, si hacemos el grafo con todos lo procesos y todos los recursos del sistema y encontramos un ciclo,
procesos en el ciclo estan bajo bloqueo mutuo.

Ejemplo de un grafo de recursos.

Metodos para manejar los abrazos mortales

Principalmente, existen dos metodos para manejar el problema de los abrazos mortales. Podemos usar algun

protocolo para asegurar que el sistema nunca entrara en un estado de abrazo mortal. Alternativamente, podem
permitir que el sistema entre en un estado de abrazo mortal y despues recuperarnos. Como podremos ver
posteriormente, el recuperarse de un abrazo mortal puede ser muy dificil y muy caro. Por ello, primeramente
consideraremos los metodos para asegurar que no ocurran

los abrazos mortales. Comunmente, existen dos metodos: El de PREVENCION de abrazos mortales (Deadloc
Prevention) y el de EVASION de abrazos mortales (Deadlock Avoidance).

2.5 Niveles, Objetivos y Criterios de Planificacion

En epocas pasadas de los sistemas de procesamiento por lotes, con una entrada en forma de imagenes de ta

una cinta magnetica, el algoritmo de planificacion era sencillo: solo habia que ejecutar el siguiente trabajo en l

En los sistemas de multiusuario de tiempo compartido, que se combinaban con un fondo de trabajos procesad

lote, el algoritmo era mas complejo. En forma invariable, existian varios usuarios en espera de servicio y podia

tambien otros trabajos para ser procesados en lote. Incluso en los sistemas puros de tiempo compartido existe

frecuencia los trabajos colaterales, como el sistema de correo electronico, que a menudo se ejecuta todo el tie
para enviar o recibir correo o noticias.

Cuando mas de un proceso es ejecutable, el Sistema Operativo debe decidir cual de ellos debera ejecutarse p
Hay que tener una planificacion de los procesos que quieren ejecutarse en el sistema.La planificacion es una

primordial del Sistema Operativo. La mayoria de los recursos, si no es que todos, se planifican antes de que s

utilicen. La asignacion de procesadores fisicos a los procesos hace posible que estos realicen su trabajo, y tal
asignacion es un problema complejo manejado por el Sistema Operativo.
Concepto de Planificacion

La planificacion hace referencia a un conjunto de politicas y mecanismos incorporados al sistema operativo qu

gobiernan el orden en que se ejecutan los trabajos que deben ser cumplimentados por el sistema informatico.
Objetivo de la Planificacion

El objetivo principal de la planificacion es optimizar el rendimiento del sistema y proporcionar un buen servicio
los procesos que se encuentren en el. En general, la planificacion trata de cubrir los siguientes objetivos:

Justicia. La planificacion debe ser lo mas justa posible con todos los procesos, sin favorecer a unos y
perjudicar a otros.

Maxima capacidad de ejecucion. Debe dar un servicio eficiente para que todos los trabajos se realicen
rapidamente posible. Esto se puede lograr disminuyendo el numero de cambios de proceso.

Maximo numero de usuarios interactivos. En los sistemas de tiempo compartido se tratara de que pue
trabajando el mayor numero de usuarios al mismo tiempo.

Predecibilidad. La planificacion debe realizarse de tal forma que en todo momento pueda saberse com
su ejecucion.

Minimizacion de la sobrecarga. La computadora debe tener poca sobrecarga ya que esta afecta direct
al rendimiento final del sistema: a menor sobrecarga mayor velocidad de proceso.

Equilibrio en el uso de recursos. Para obtener un mayor rendimiento en el uso de los recursos y que e
esten ocupados equitativamente el mayor tiempo posible.

Seguridad de las prioridades. Si un proceso tiene mayor prioridad que otro, este debe ejecutarse mas
rapidamente.

Evitar la postergacion indefinida. Esto se logra aumentando la prioridad de un proceso mientras espere
recurso. La prioridad llegara a ser tan alta que al proceso le sera asignado el recurso que pidio.

Criterios de planificacion
Para realizar los objetivos de la planificacion, un mecanismo de planificacion debe considerar lo siguiente:

La limitacion de un proceso a las operaciones de Entrada / Salida: cuando un proceso consigue la cpu
utiliza solo brevemente antes de generar una peticion de Entrada / Salida?

La limitacion de un proceso a la cpu: cuando un proceso obtiene la cpu, ?tiende a usarla hasta que ex
tiempo?

Si un proceso es por lote (batch) o interactivo: los usuarios interactivos deben recibir inmediato servicio
garantizar buenos tiempos de respuesta.

?Que urgencia tiene una respuesta rapida?: por ejemplo, un proceso de tiempo real de un sistema de

que supervise una refineria de combustible requiere una respuesta rapida, mas rapida que la respuest
requerida por un proceso en lotes (batch) que debera entregarse al dia siguiente.

La prioridad de un proceso: a mayor prioridad mejor tratamiento.

Frecuentemente un proceso genera fallos (carencias) de pagina:


o

Probablemente los procesos que generan pocos fallos de pagina hayan acumulado sus conju
trabajo en el almacenamiento principal.

Los procesos que experimentan gran cantidad de fallos de pagina aun no han establecido sus
conjuntos de trabajo.

Un criterio indica favorecer a los procesos que han establecido sus conjuntos de trabajo.

Otro criterio indica favorecer a los procesos con una tasa alta de fallos de pagina ya que rapida
generaran una peticion de Entrada / Salida.

Frecuentemente un proceso ha sido apropiado por otro de mas alta prioridad, lo cual significa lo siguie
o

A menudo los procesos apropiados deben recibir un tratamiento menos favorable.

Cada vez que el Sistema Operativo asume la sobrecarga para hacer ejecutar este proceso, el

tiempo de ejecucion antes de la apropiacion no justifica la sobrecarga de hacer ejecutar al proc


primer lugar.

Cuanto tiempo de ejecucion real ha recibido el proceso?: un criterio considera que debe ser favorecido
proceso que ha recibido muy poco tiempo de cpu.

Cuanto tiempo adicional va a necesitar el proceso para terminar?: los tiempos promedio de espera pueden red

priorizando los procesos que requieren de un tiempo de ejecucion minimo para su terminacion, pero pocas ve
posible conocer la cantidad de tiempo adicional que cada proceso necesita para terminar.

2.6 Tecnicas de Adminstracion de Planificacion

2.6.1 FIFO

Algoritmo de planificacion de FIFO

Tal vez la disciplina mas simple de planificacion sea la de primeras entradas ? primeras salidas (PEPS). Los p

se despachan de acuerdo con su tiempo de llegada a la cola de procesos listos. Cuando un proceso tiene la C

ejecuta hasta terminar. Es junto en el sentido formal, pero algo injusta en cuanto a que los trabajos largos hac
esperar a los cortos y los trabajos sin importancia hacen esperar a los importantes. FIFO ofrece variaciones

relativamente pequenas en los tiempos de respuesta y por lo tanto es mas predecible que los otros esquemas

util en la planificacion para los usuarios interactivos porque no puede garantizar buenos tiempos de respuesta

El esquema FIFO rara vez se usa como esquema principal en los sistemas actuales, pero a menudo esta inco

en otros sistemas. Por ejemplo, muchos esquemas de planificacion despachan los procesos de acuerdo con la
prioridad, pero los procesos con la misma prioridad se despachan de acuerdo con el esquema FIFO.

Este es un algoritmo que no usa apropiacion, y que consiste en atender a los procesos por estricto orden de ll

la lista de procesos listos. Cada proceso se ejecuta hasta que termina, o hasta que hace una llamada bloquea
E/S). Se trata de una politica muy simple y sencilla de llevar a la practica, pero muy pobre en cuanto a su
comportamiento.

Las caracteristicas principales de este algoritmo son las siguientes:

No es apropiativa.

Es justa, aunque los procesos largos hacen esperar mucho a los cortos.

Es una politica predecible.

El tiempo promedio de servicio es muy variable ya que esta en funcion del numero de procesos y la du
promedio que tenga.

EJEMPLO

Proc Tiem
eso po
de
UCP

P1 24
P2 3
P3 3

Media del tiempo de espera:


Caso 1) ( 0 + 24 + 27 ) / 3 =17
Caso 2) ( 6 + 0 + 3 ) / 3 = 3

En este esquema se tienen tres procesos (P1, P2, P3) listos para ejecutarse, con un tiempo de ejecucion de 2

unidades de tiempo (para facilidad tomaremos milisegundos como unidad de tiempo) respectivamente. Los pr
se ejecutan en ese mismo orden. El primer proceso se ejecuta de inmediato y no espera nada.

El segundo proceso espera todo lo que dura en ejecutarse el primer proceso que son 24 milisegundos. Por ult

tercer proceso esperara la suma de lo que duran en ejecutarse los dos procesos anteriores, o sea, 27 segund

esto da como resultado un tiempo promedio de espera de 17 milisegundos. Si en cambio, el orden en que se e

los procesos es como el caso 2), entonces el proceso P2 se ejecutaria de inmediato, P3 esperaria lo que tarde

ejecutarse P2 (3 milisegundos) y P1 esperaria lo que duran los dos procesos anteriores, obteniendo un tiempo
promedio de espera de 3 milisegundos.

Como puede verse el tiempo promedio de espera que tengan los procesos depende por completo del orden e
llegan los procesos a ejecutarse.

2.6.2 SJR

Otro metodo de planificacion de la CPU es el algoritmo de planificacion con seleccion del trabajo mas corto (S

shortest job-first). Este algoritmo asocia con cada proceso la duracion de la siguiente rafaga de CPU del proce

Cuando la CPU esta disponible, se asigna al proceso que tiene la siguiente rafaga de CPU mas corta. Si las s

rafagas de CPU de dos procesos son iguales, se usa la planificacion FCFS para romper el empate. Observe q
termino mas apropiado para este metodo de planificacion seria el de algoritmo de la siguiente rafaga de CPU

corta, ya que la planificacion depende de la duracion de la siguiente rafaga de CPU de un proceso, en lugar de

depender de su duracion total. Usamos el termino SJF porque casi todo el mundo y gran parte de los libros de
emplean este termino para referirse a este tipo de planificacion.

Como ejemplo de planificacion SJF, considere el siguiente conjunto de procesos, estando especificada la dura
la rafaga de CPU en milisegundos:
Proceso

Tiempo de rafaga

P1

P2

P3

P4

Usando la planificacion SJF, planificariamos estos procesos de acuerdo con el siguiente diagrama de Gantt:

P4

P1

P3

P2

16

24

El tiempo de espera es de 3 milisegundos para el proceso P1, de 16 milisegundos para el proceso P2, de 9

milisegundos para P3 y de 0 milisegundos para P4. Por tanto, el tiempo medio de espera es de (3 + 16 + 9 + 0

milisegundos. Por comparacion, si estuvieramos usando el esquema de planificacion FCFS, el tiempo medio d
seria de 10,25 milisegundos.
El algoritmo de planificacion SJF es probablemente optimo, en el sentido de que proporciona el tiempo medio

espera minimo para un conjunto de procesos dado. Anteponer un proceso corto a uno largo disminuye el tiem
espera del proceso corto en mayor medida de lo que incrementa el tiempo de espera del proceso largo.
Consecuentemente, el tiempo medio de espera disminuye.

La dificultad real del algoritmo SJF es conocer la duracion de la siguiente solicitud de CPU. En una planificacio

largo plazo de trabajos en un sistema de procesamiento por lotes, podemos usar como duracion el limite de tie

proceso que el usuario especifique en el momento de enviar el trabajo. Con este mecanismo, los usuarios esta

motivados para estimar el limite de tiempo del proceso de forma precisa, dado que un valor menor puede sign

respuesta mas rapida. (Un valor demasiado bajo producira un error de limite de tiempo excedido y sera neces

reenviar el proceso.) La planificacion SJF se usa frecuentemente como mecanismo de planificacion a largo pla

Aunque el algoritmo SJF es optimo, no se puede implementar en el nivel de la planificacion de la CPU a corto

que no hay forma de conocer la duracion de la siguiente rafaga de CPU. Un metodo consiste en intentar aprox
planificacion SJF: podemos no conocer la duracion de la siguiente rafaga de CPU, pero podemos predecir su

el procedimiento de confiar en que la siguiente rafaga de CPU sera similar en duracion a las anteriores. De es

calculando una aproximacion de la duracion de la siguiente rafaga de CPU, podemos tomar el proceso que ten
rafaga de CPU predicha mas corta.

Generalmente, la siguiente rafaga de CPU se predice como la media exponencial de las duraciones medidas d
anteriores rafagas de CPU. Sea tn la duracion de la n-esima rafaga de CPU y sea Tn+l el valor predicho para
siguiente rafaga de CPU. Entonces, para a, 0? ? 1, se define
tn+1 = tn + (1 - ) tn

Esta formula define un promedio exponencial. El valor de tn contiene la informacion mas reciente; tn almacena
historial pasado. El parametro a controla el peso relativo del historial reciente y pasado de nuestra prediccion.

entonces tn1 = tn, y el historial reciente no tiene ningun efecto (se supone que las condiciones actuales van a

transitorias); si = 1, entonces tn+1 = tn y solo la rafaga de CPU mas reciente importa (se supone que el hist

obsoleto y, por tanto, irrelevante). Frecuentemente, = 1/2, en cuyo caso, el historial reciente y pasado tienen

peso. El valor inicial t0 puede definirse como una constante o como un promedio global para todo el sistema. L
5.3 muestra un promedio exponencial con = 1/2 y t0 = 10.

Para comprender el comportamiento del promedio exponencial, podemos desarrollar la formula para tn+l susti
el valor de tn y de los terminos sucesivos, obteniendo
Tn+1 = tn+(1-a)atn-1 +???+(1- )j tn-j +???+(1-(X)n+1t0

Dado que tanto a como 1-a son menores o iguales a 1, cada termino sucesivo tiene menor peso que su prede

El algoritmo SJF puede ser cooperativo o apropiativo. La necesidad de elegir surge cuando un proceso llega a

de procesos preparados mientras que un proceso anterior esta todavia en ejecucion. La siguiente rafaga de C

proceso que acaba de llegar puede ser mas corta que lo que quede del proceso actualmente en ejecucion. Un

algoritmo SJF apropiativo detendra el proceso actualmente en ejecucion, mientras que un algoritmo sin desalo
permitira que dicho proceso termine su rafaga de CPU. La planificacion SJF apropiativa a veces se denomina
planificacion con seleccion del proceso con tiempo restante mas corto.

Como ejemplo, considere los cuatro procesos siguientes, estando especificada la duracion de la rafaga de CP
milisegundos:
Proceso

Tiempo de llegada

Tiempo de rafaga

P1

P2

P3

P4

Si los procesos llegan a la cola de procesos preparados en los instantes que se muestran y necesitan los tiem

rafaga indicados, entonces la planificacion SJF apropiativa es la que se muestra en el siguiente diagrama de G

P1

P2

P4

P1

10

P3

17

26

El proceso Pl se inicia en el instante 0, dado que es el unico proceso que hay en la cola. El proceso P2llega en

instante 1. El tiempo que le queda al proceso P1 (7 milisegundos) es mayor que el tiempo requerido por el pro

(4 milisegundos), por lo que el proceso Pl se desaloja y se planifica el proceso P2. El tiempo medio de espera

ejemplo es de ((10 - 1) + (1- 1) + (17 - 2) + (5 - 3) )/4 = 26/4 = 6,5 milisegundos. La planificacion SJF cooperat
proporcionaria un tiempo medio de espera de 7,75 milisegundos.

2.6.3 Planificacion de Asignacion en Rueda (RR-Round


Robin)

Es un sistema apropiativo. Cada proceso recibe una fraccion de tiempo de procesamiento


o quanto para su ejecucion, de manera que cuando se esta ejecutando y excede el tiempo
que se le ha concedido, se genera una interrupcion de reloj, mediante la cual la ejecucion
del proceso se detiene y se coloca al proceso al final de la cola de procesos listos para su
posterior ejecucion, seleccionandose a continuacion un nuevo proceso de la cola para su
ejecucion. Si un proceso finaliza su ejecucion antes de que termine el tiempo que se le ha
asignado, este cede el control, seleccionandose un nuevo proceso de la cola para su
ejecucion. Con el Round Robind, cuando un proceso inicia una operacion de E/S, este es
penalizado respecto de los procesos que no realizan E/S.
Los procesos se despachan en FIFO y disponen de una cantidad limitada de tiempo de
cpu, llamada division de tiempo o cuanto. Si un proceso no termina antes de expirar su
tiempo de cpu ocurren las siguientes acciones:
1. La cpu es apropiada.

2. La cpu es otorgada al siguiente proceso en espera.


3. El proceso apropiado es situado al final de la lista de listos.
Es efectiva en ambientes de tiempo compartido. La sobrecarga de la apropiacion se
mantiene baja mediante mecanismos eficientes de intercambio de contexto y con
suficiente memoria principal para los procesos.

Tamao del Cuanto o Quantum


La determinacin del tamao del cuanto es decisiva para la operacion efectiva de un
sistema computacional. Los interrogantes son: ?cuanto pequeno o grande?, ?cuanto fijo o
variable? y ?cuanto igual para todos los procesos de usuarios o determinado por separado
para cada uno de ellos? Si el cuanto se hace muy grande, cada proceso recibe todo el
tiempo necesario para llegar a su terminacion, por lo cual la asignacion en rueda (RR)
degenera en FIFO. Si el cuanto se hace muy pequeno, la sobrecarga del intercambio de
contexto se convierte en un factor dominante y el rendimiento del sistema se degrada,
puesto que la mayor parte del tiempo de cpu se invierte en el intercambio del procesador
(cambio de contexto) y los procesos de usuario disponen de muy poco tiempo de cpu.
El cuanto debe ser lo suficientemente grande como para permitir que la gran mayoria de
las peticiones interactivas requieran de menos tiempo que la duracion del cuanto, es decir
que el tiempo transcurrido desde el otorgamiento de la cpu a un proceso hasta que genera
una peticion de Entrada / Salida debe ser menor que el cuanto establecido, de esta forma,
ocurrida la peticion la cpu pasa a otro proceso y como el cuanto es mayor que el tiempo
transcurrido hasta la peticion de Entrada / Salida, los procesos trabajan al maximo de
velocidad, se minimiza la sobrecarga de apropiacion y se maximiza la utilizacion de la
Entrada / Salida. El cuanto optimo varia de un sistema a otro y con la carga, siendo un
valor de referencia 100 mseg (cien milisegundos).

Caracteristicas de RR
1. Baja sobrecarga si el cambio entre un proceso y otro es eficiente y los procesos
siempre estan en la memoria principal
2. El tamano optimo del quantum depende de:
El tipo de sistema.
Las cargas que vaya a soportar el sistema.
El numero de procesos en el sistema y su tipo.
3. Es la politica mas usada para tiempo compartido.

4. Ofrece un servicio igual para todos los procesos.


5. Es una politica apropiativa.
6. Mantiene mas equilibradas las colas de procesos listos y bloqueados.

Virtual Round Robind (vrr)


Este sistema va a permitir solucionar el problema del RoundRobind en relacion al
favorecimiento que este realiza con los procesos orientados a la CPU frente a los procesos
orientados a las operaciones de E/S. El vrr utiliza una cola auxiliar de espera que incluye
aquellos procesos que no hayan consumido completamente el quanto que tenian
asignados al verse detenidos por una operacion de E/S. Esta cola tiene prioridad respecto
a la principal y a los procesos almacenados en ella se les asigna temporalmente (hasta
que se ejecuten de nuevo) un nuevo quanto, que es el tiempo del quanto principal que no
llegaron a consumir antes de ser bloqueados (el 2o quanto es el quanto principal menos el
tiempo del mismo que ya haya sido consumido por el proceso).

2.6.4 Queues Multinivel

Otra clase de algoritmos de planificacion es la que se ha desarrollado para aquellas situaciones en las que los

procesos pueden clasificarse facilmente en grupos diferentes. Por ejemplo, una clasificacion habitual consiste

diferenciar entre procesos de primer plano (interactivos) y procesos de segundo plano (por lotes). Estos dos ti
procesos tienen requisitos diferentes de tiempo de respuesta y, por tanto, pueden tener distintas necesidades
planificacion. Ademas, los procesos de primer plano pueden tener prioridad (definida externamente) sobre los
procesos de segundo plano.

Un algoritmo de planificacion mediante colas multinivel divide la cola de procesos prepados en varias colas dis

(Figura 5.6). Los procesos se asignan permanentemente a una cola, generalmente en funcion de alguna propi
proceso, como por ejemplo el tamano memoria, la prioridad del proceso o el tipo de proceso. Cada cola tiene

algoritmo de planificacion. Por ejemplo, pueden emplearse colas distintas para los procesos de primer plano y

segundo plano. La cola de primer plano puede planificarse mediante un algoritmo por turnos, mientras que pa
de segundo plano puede emplearse un algoritmo FCFS.

Ademas , debe definirse una planificaciion entre las colas, la cual suele implementarse como una planificacion

apropiada y prioridad fija. po ejemplo, la cola de procesos de primer plano puede tener velocidad absoluta sob
cola de procesos de segundo plano.

Veamos un ejemplo de algoritmo de planificacion mediante colas multinivel con las cinco colas que se enumer
continuacion, segun su orden de prioridad:
1. Procesos del sistema.
2. Procesos interactivos.
3. Procesos de edicion interactivos.
4. Procesos por lotes.
5. Procesos de estudiantes.

Cada cola tiene prioridad absoluta sobre las colas de prioridad mas baja. Por ejemplo, ningun proceso de la co

lotes podra ejecutarse hasta que se hayan vaciado completamente las colas de los procesos del sistema, los p

interactivos y los procesos de edicion interactivos. Si un proceso de edicion interactivo llega a la cola de proce
preparados mientras se esta ejecutando un proceso por lotes, el proceso por lotes sera desalojado.

Otra posibilidad consiste en repartir el tiempo entre las colas. En este caso, cada cola obtiene una cierta porci

tiempo de CPU, con la que puede entonces planificar sus distintos procesos Por ejemplo, en el caso de la cola

procesos de primer plano y segundo plano, la cola de primer plano puede disponer del 80 por ciento del tiemp
CPU para planificar por turnos sus procesos, mientras que la cola de procesos de segundo plano recibe el 20
ciento del tiempo de CPU para gestionar sus procesos mediante el metodo FCFS.

2.6.5 Multi-Level FreedBack Queues

Normalmente, cuando se usa el algoritmo de planificacion mediante colas multinivel, los procesos se asignan

permanente a una cola cuando entran en el sistema. Por ejemplo, si hay colas diferentes para los procesos de

segundo plano, los procesos no se mueven de una cola a otra, dado que no pueden cambiar su naturaleza de

de primer o segundo plano. Esta configuracion presenta la ventaja de una baja carga de trabajo de planificacio
resulta poco flexible.

Por el contrario, el algoritmo de planificacion mediante colas multinivel realimentadas permite mover un proces

una cola a otra. La idea es separar los procesos en funcion de las caracteristicas de sus rafagas de CPU. Si u

proceso utiliza demasiado tiempo de CPU, se pasa a una a de prioridad mas baja. Este esquema deja los proc
limitados por E/S y los procesos interactivos en las colas de prioridad mas alta. Ademas, un proceso que este

esperando demasiado tiempo en una cola de baja prioridad puede pasarse a una cola de prioridad mas alta. E
mecanismo de envejecimiento evita el bloqueo indefinido.

Por ejemplo, considere un planificador de colas multinivel realimentadas con tres colas, numeradas de 0 a 2 (F

5.7). En primer lugar, el planificador ejecuta todos los procesos de la cola 0. Solo cuando la cola 0 este vacia e

procesos de la cola 1. De forma similar, los procesos de la cola 2 solo se ejecutaran si las colas 0 y 1 estan va
proceso que llegue a la cola 1 desalojara a un proceso de la cola 2 y ese proceso de la cola 1 sera, a su vez,
desalojado por un proceso que llegue a la cola 0.
Un proceso que entre en la cola de procesos preparados se coloca en la cola 0 y a cada uno de los procesos

cola se le proporciona un cuanto de tiempo de 8 milisegundos. Si el proceso no termina en ese tiempo, se pas

de la cola 1. Si la cola 0 esta vacia, al proceso que se encuentra al principio de la cola 1 se le asigna un cuant
milisegundos. Si no se completa en ese tiempo, se lo desaloja y se lo incluye en la cola 2. Los procesos de la
ejecutan basandose en una planificacion FCFS, pero solo cuando las colas 0 y 1 estan vacias.

Este algoritmo de planificacion proporciona la prioridad mas alta a todo proceso que tenga una rafaga de CPU
milisegundos o menos. Tales procesos acceden rapidamente a la CPU, concluyen su rafaga de CPU y pasan

siguiente rafaga de E/S. Los procesos que necesitan mas de 8 milisegundos y menos de 24 milisegundos tam

servidor rapidamente, aunque con una prioridad mas baja que los procesos mas cortos. Los procesos largos t

yendo automaticamente a la cola 2 y se sirven, siguiendo el orden FCFS, con los ciclos de CPU no utilizados p
colas 0 y 1.

En general, un planificador mediante colas multinivel realimentadas se define mediante los parametros siguien
??????? El numero de colas.
?????????? El algoritmo de planificacion de cada cola.
?????????? El metodo usado para determinar cuando pasar un proceso a una cola de prioridad mas alta.

?????????? El metodo usado para determinar cuando pasar un proceso a una cola de prioridad mas baja.

?????????? El metodo usado para determinar en que cola se introducira un proceso cuando haya que darle s

La definicion del planificador mediante colas multinivel realimentadas le convierte en el algoritmo de planificac

CPU mas general. Puede configurarse este algoritmo para adaptarlo a cualquier sistema especifico que se qu
disenar. Lamentablemente, tambien es el algoritmo mas complejo, puesto que definir el mejor planificador req
disponer de algun mecanismo para seleccionar los valores de todos los parametros.

Você também pode gostar