Вы находитесь на странице: 1из 63

UNIDAD 2

ADMINISTRACIÓN DE PROCESOS Y DEL PROCESADOR


2.1 Concepto de proceso
• Thread o hilo: Se trata de una unidad de trabajo. Incluye el contexto del procesador
(que contiene el contador del programa y el puntero de pila) y su propia área de datos
para una pila (para posibilitar el salto a subrutinas). Un hilo se ejecuta secuencialmente
y se puede interrumpir de forma que el procesador pueda dar paso a otro hilo.
• Proceso: Es una colección de uno o mas hilos y sus recursos de sistema asociados
(como la memoria, conteniendo tanto código, como datos, ficheros abiertos y
dispositivos). Esto corresponde al concepto de programa en ejecución. Dividiendo una
sola aplicación en múltiples hilos, el programador tiene gran control sobre la
modularidad de las aplicaciones y la temporización de los eventos relacionados con la
aplicación.
• Además también puede ser:
• Un programa en ejecución.
• Una instancia de un programa ejecutado en un computador.
• La entidad que se puede asignar y ejecutar en un procesador.
• Una unidad de actividad que se caracteriza por la ejecución de una secuencia de
instrucciones, un estado actual y un conjunto de recursos del sistema asociados.
2.2 Estados y transiciones de
los procesos
• Elementos de un proceso:
• Identificador: Un identificador único asociado a este proceso, para
distinguirlo del resto de procesos.
• Estado: Si el proceso esta actualmente corriendo, está en el estado en
ejecución.
• Prioridad: Nivel de prioridad relativo al resto de procesos.
• Contador de programa: La dirección de la siguiente instrucción del
programa que se ejecutará.
• Punteros de memoria: Incluye los punteros al código de programa y los
datos asociados a dicho proceso, además de cualquier bloque de memoria
compartido con otros procesos.
• Datos de contexto: Estos son datos que están presentes en los registros del
procesador cuando el proceso esta corriendo.
• Información de estado de E/S: Incluye las peticiones de E/S pendientes,
dispositivos de E/S (por ejemplo, una unidad de cinta) asignados a dicho
proceso, una lista de los ficheros en uso por el mismo, etc.
• Información de auditoria: Puede incluir la cantidad de tiempo de
procesador y de tiempo de reloj utilizados, así como los límites de tiempo,
registros contables, etc.
• La información anterior se almacena en una estructura de
datos que suele llamarse Bloque de Control de Proceso
(Process Control Block).
Ejemplo:
• Despliegue en memoria de tres procesos que residen en
memoria principal.
• Reside un pequeño programa Activador (dispatcher) que
intercambia el procesador de un proceso a otro.
Creación y terminación de
procesos
• Creación de un proceso: Cuando se va a a añadir un nuevo
proceso a aquellos que se están gestionando en un
determinado momento, el sistema operativo construye las
estructuras de datos que se usan para manejar el proceso y
reserva el espacio de direcciones en memoria principal para el
proceso.
• Terminación de un proceso: Todo sistema debe proporcionar
los mecanismos mediante los cuales un proceso indica su
finalización, o que ha completado su tarea. Un trabajo por
lotes debe incluir una instrucción HALT o una llamada a un
servicio de sistema operativo específica para su terminación.
MODELO DE PROCESOS DE CINCO ESTADOS:
• Para ajustar una mejor forma de transiciones se presenta la
siguiente forma:
• Ejecutando: el proceso está actualmente en ejecución. Asumimos
que el computador tiene un único procesador, de forma que solo un
proceso puede estar en este estado en un instante determinado.
• Listo: Un proceso se prepara para ejecutar cuando tenga
oportunidad.
• Bloqueado: Un proceso que no puede ejecutar hasta que se cumpla
un evento determinado o se complete una operación de E/S.
• Nuevo: Un proceso que se acaba de crear y que aún no ha sido
admitido en el grupo de procesos ejecutables por el sistema
operativo. Se trata de un nuevo proceso que no ha sido cargado en
memoria principal, aunque su bloque de control de proceso (BCP) sí
ha sido creado.
• Saliente: Un proceso que ha sido liberado del grupo de procesos
ejecutables por el sistema operativo, debido a que ha sido detenido
o que ha sido abortado por alguna razón.
• Transición entre cada uno de los estados de proceso:
Procesos suspendidos
• Debido a que las operaciones de E/S son muy lentas, el procesador
sigue estando ocioso la mayor parte del tiempo.
• Una solución es el swapping (memoria de intercambio), que implica
mover parte o todo el proceso de memoria principal al disco.
• Cuando ninguno de los procesos en memoria principal se encuentra
en estado Listo, el sistema operativo intercambia uno de los
procesos bloqueados a disco, en la cola de Suspendidos.
• Esta es una lista de procesos existentes que han sido temporalmente
expulsados en la memoria principal, o suspendidos.
• El sistema operativo trae otro proceso de la cola de Suspendidos o
responde a una solicitud de un nuevo proceso.
• La ejecución continúa con los nuevos procesos que han llegado.
Diagrama con estado Suspendido

Cuando todos los procesos en memoria principal se encuentran en


estado Bloqueado, el sistema operativo puede suspender un proceso
poniéndolo en el estado Suspendido y transfiriéndolo a disco. El
espacio que se libera en memoria principal puede usarse para traer a
otro proceso.
Diagrama con dos estados Suspendido
• Este nuevo esquema consta de otros cuatro estados:
• Listo: El proceso está en memoria principal disponible para su ejecución.
• Bloqueado: El proceso está en memoria principal y esperando un evento.
• Bloqueado/Suspendido: El proceso está en almacenamiento secundario y
esperando un evento.
• Listo/Suspendido: El proceso está en almacenamiento secundario pero está
disponible para su ejecución tan pronto como sea cargado en memoria
principal.
2.3 Procesos ligeros: Hilos o hebras
 Un proceso ligero, o thread, es un programa en ejecución
(flujo de ejecución) que comparte la imagen de memoria y
otras informaciones con otros procesos ligeros.
 Un proceso ligero se define como una función cuya
ejecución se puede lanzar en paralelo con otras.
 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 ejecución, pudiéndose destacar las siguientes:
 Contador de programa.
 Pila.
 Registros.
 Estado del proceso ligero (ejecutando, listo o bloqueado).
Todos los procesos ligeros de un mismo proceso
comparten la información del mismo.
En concreto, comparten:
 Espacio de memoria.
 Variables globales.
 Archivos abiertos.
 Procesos hijos.
 Temporizadores.
 Señales y semáforos.
 Contabilidad.
2.4 Concurrencia y secuenciabilidad.
 La concurrencia es el solapamiento en el tiempo de la
ejecución de varias actividades.
 Dos procesos, P1 y P2, se ejecutan concurrentemente si
la primera instrucción de P1 se ejecuta entre la primera
y la última instrucción de P2.
2.5 Niveles, objetivos y criterios de
planificación.
 La planificación consiste en un conjunto de políticas y
mecanismos incorporados al S. O. y por los que se rige
el orden en que se completa el trabajo que hay que
realizar. Su objetivo primordial es optimizar el
rendimiento del sistema.
 La planificación del procesador es la asignación de los
procesadores físicos a los procesos. La parte del S. O.
encargada de tomar esta decisión se denomina
planificador y el algoritmo que utiliza se llama
algoritmo de planificación o disciplina.
Niveles de planificación
 Planificación de alto nivel:
— También se denomina Planificación de trabajos.
— Determina a qué trabajos se les va a permitir competir activamente por los
recursos del sistema, lo cual se denomina Planificación de admisión.

 Planificación de nivel intermedio:


— Determina a qué procesos se les puede permitir competir por la cpu.
— Responde a fluctuaciones a corto plazo en la carga del sistema y efectúa
suspensiones y activaciones reanudaciones de procesos.
— Debe ayudar a alcanzar ciertas metas en el rendimiento total del sistema.

 Planificación de bajo nivel:


— Determina a qué proceso listo se le asigna la cpu cuando esta queda disponible
y asigna la cpu al mismo, es decir que despacha la cpu al proceso.
— La efectúa el Despachador del Sistema Operativo, el que opera muchas veces
por segundo y reside siempre en el almacenamiento primario.
Objetivos:
 Ser justo; Todos los procesos son tratados de igual manera, Ningún proceso es
postergado indefinidamente.
 Maximizar la capacidad de ejecución; Maximizar el número de procesos
servidos por unidad de tiempo.
 Maximizar el número de usuarios interactivos recibiendo unos tiempos
de respuesta aceptables; En un máximo de unos segundos.
 Equilibrar el uso de recursos; Favorecer a los procesos que utilizarán
recursos infrautilizados.
 Lograr un equilibrio entre respuesta y utilización; La mejor manera de
garantizar buenos tiempos de respuesta es disponer de los recursos suficientes
cuando se necesitan, pero la utilización total de recursos podrá ser pobre.
 Evitar la postergación indefinida; Se utiliza la estrategia del
envejecimiento , Mientras un proceso espera por un recurso su prioridad debe
aumentar, así la prioridad llegará a ser tan alta que el proceso recibirá el recurso
esperado.
 Asegurar las prioridades; Los mecanismos de planificación deben favorecer a
los procesos con prioridades más altas.
 Dar preferencia a los procesos que mantienen recursos no compartidos.
2.6 Técnicas de administración del
planificador.
 Cíclica o Round-robin (RR): El algoritmo cíclico está diseñado para hacer un
reparto equitativo del tiempo del procesador, por lo que está especialmente
destinado a los sistemas de tiempo compartido.
 Los procesos están organizados en forma de cola circular, eligiéndose para su
ejecución el proceso cabecera de la cola.
 Un proceso permanecerá en ejecución hasta que ocurra una de las dos
condiciones siguientes:
 El proceso pasa a estado de bloqueado, porque solicita un servicio del sistema
operativo.
 El proceso consume su rodaja de tiempo, es decir, lleva ejecutando el tiempo
estipulado de rodaja.
 Un proceso que ha consumido su rodaja de tiempo es expulsado y pasa a ocupar
el último lugar en la cola. De esta forma, se consigue que todos los procesos
pasen a ejecutar, repartiendo el tiempo del procesador de forma homogénea
entre ellos. La Figura muestra cómo el proceso 5, al consumir su rodaja de
tiempo, pasa al final de la cola.
2.6 Técnicas de administración del
planificador.
 FIFO: En este caso, la cola de procesos en estado de listo
está ordenada de acuerdo al instante en que los procesos
pasan al estado de listo. Los que llevan más tiempo
esperando están más cerca de la cabecera.

 El algoritmo es sencillo, puesto que consiste en tomar para


ejecutar al proceso de la cabecera de la cola. No se plantea
expulsión, por lo que el proceso ejecuta hasta que realiza
una llamada bloqueante al sistema operativo.

 Es aplicable a los sistemas batch, pero no a los interactivos.


2.6 Técnicas de administración del
planificador.
 Prioridades: En el algoritmo de prioridades se selecciona para
ejecutar el proceso en estado de listo que tenga la máxima
prioridad.

 Cuando las prioridades son fijas puede surgir el problema de la


inanición, que implica que un proceso puede estar esperando
indefinidamente sin llegar a ejecutar. Esto ocurrirá si van
apareciendo siempre procesos de mayor prioridad que estén en
estado de listo.

 Para evitar este problema, se puede añadir un mecanismo de


envejecimiento, que se encargue dc aumentar la prioridad a los
procesos que lleven un determinado tiempo esperando a ser
ejecutados.
2.6 Técnicas de administración del
planificador.
 Primero el trabajo más corto (JFS): Este algoritmo exige
conocer a priori el tiempo de ejecución de los procesos, por lo
que es aplicable a trabajos batch repetitivos cuyo
comportamiento se tenga analizado.

 El algoritmo consiste en seleccionar para ejecución al proceso


listo con menor tiempo de ejecución. No se plantea expulsión,
por lo que el proceso sigue ejecutándose mientras lo desee.

 La ventaja de este algoritmo es que produce el menor tiempo de


respuesta, pero a costa de penalizar los trabajos de mayor tiempo
de ejecución. También puede sufrir de inanición, puesto que, en
el caso de que estén continuamente apareciendo procesos con
tiempo de ejecución pequeño, un proceso largo puede no llegar a
ejecutar.
2.6 Técnicas de administración del planificador.
 Planificación de sistemas de tiempo real: Los sistemas de tiempo real se
caracterizan porque los procesos tienen que ejecutar en instantes
predeterminados. Se pueden diferenciar dos tipos de procesos de tiempo real: a
plazo fijo y periódico. La diferencia estriba en que los de plazo fijo tienen que
ejecutar una vez, en un instante determinado, mientras que los periódicos
deben ejecutar de forma repetitiva cada cierto tiempo.
 La planificación de tiempo real está basada en el reloj de tiempo de la
computadora y su objetivo es conseguir que no se retrase la ejecución de los
procesos. En los denominados sistemas de tiempo real críticos, los procesos
tienen asignada una franja de tiempo en la cual deben ejecutar y. en ningún
caso, se ha de rebasar el tiempo máximo sin que el proceso complete su
ejecución.
 Como muestra la Figura, se asocia a cada proceso el instante en el que debe
ejecutar. Los procesos que no han alcanzado su tiempo de ejecución están en
una cola de espera, mientras que los que han alcanzado el tiempo de ejecución
pasan a las colas de listo para ejecutar. La planificación consiste en seleccionar
de entre estos últimos el proceso a ejecutar.
2.6 Técnicas de administración del planificador.
 Planificación de dos niveles : Hasta ahora más o menos hemos
supuesto que todos los procesos ejecutables están en la memoria
principal. Si la memoria principal disponible no es suficiente, algunos
de los procesos ejecutables tendrán que mantenerse en el disco total o
parcialmente. Esta situación tiene implicaciones importantes para la
planificación, ya que el tiempo de conmutación de procesos cuando
hay que traer los procesos del disco es varios órdenes de magnitud
mayor que cuando la conmutación es a un proceso que ya está en la
memoria.

 Aquí también podríamos usar planificación round robin, por prioridad


o por cualquiera de varios otros métodos. Los dos planificadores
podrían usar el mismo algoritmo o algoritmos distintos.
Sistemas Operativos

Unidad I
CONCURRENCIA Y SECUENCIABILIDAD
Concurrencia y secuenciabilidad
Los procesos son concurrentes si existen
simultáneamente. Los procesos concurrentes
pueden funcionar en forma totalmente
independiente unos de otros, o pueden ser
asíncronos, lo cual significa que en ocasiones
requieren cierta sincronización o cooperación.
Concurrencia y secuenciabilidad
Beneficios del uso de la concurrencia

• Trata de evitar los tiempos muertos de la UCP.


• Comparte y optimiza el uso de recursos.
• Permite la modularidad en las diferentes etapas del
proceso.
• Acelera los cálculos.
• Da mayor comodidad.
Concurrencia y secuenciabilidad
Desventajas del uso de la concurrencia

• Que dos o mas procesos requieran el mismo


recurso .
• Ocurrencia de bloqueos.
• Interrupción de procesos.
Concurrencia y secuenciabilidad
Elementos a gestionar y diseñar a causa de la
concurrencia

1. El sistema operativo debe ser capaz de seguir la pista de los


distintos procesos activos. Esto lo hace por medio de PBC’s
(Bloque de Control de Procesos) .

2. El sistema operativo debe asignar y quitar los distintos recursos a


cada proceso activo.(Tiempo de procesador, memoria, Archivos,
dispositivos de entrada y salida).

3. El sistema operativo debe proteger los datos y los recursos físicos


de cada proceso contra injerencias no intencionadas de otros
procesos.

4. Los resultados de un proceso deben ser independientes de la


velocidad relativa a la que se realiza la ejecución con respecto a
otros procesos concurrentes.
Concurrencia y secuenciabilidad
Exclusión Mutua

La exclusión mutua la podríamos definir como una operación


de control que permite la coordinación de procesos .

Formas de satisfacer los requisitos de exclusión mutua:

• Soluciones por Software. Una manera es dejar la responsabilidad a


los procesos que deseen ejecutar concurrentemente, de esta manera
los procesos deben coordinarse unos con otros para cumplir la
exclusión mutua sin ayuda alguna, aunque estas soluciones son
propensas a errores y a una fuerte carga de proceso (Algunos
ejemplos de estas son: Algoritmo de Dekker y Algoritmo de
Peterson).

• Soluciones por Hardware. Propone el uso de instrucciones de la


máquina a tal efecto, estas tienen la ventaja de reducir la
sobrecarga.
Concurrencia y secuenciabilidad
Sincronización de procesos

La comunicación entre procesos es necesaria si


se desea que varios procesos puedan colaborar
para realizar una misma tarea. La sincronización
es el funcionamiento coordinado en la
resolución de una tarea encomendada.
Concurrencia y secuenciabilidad
Sincronización de procesos
Los servicios básicos de comunicación son:
• Crear: el proceso solicita la creación del
mecanismo
• Enviar o escribir: el proceso emisor envía
información al proceso receptor
• Recibir o leer: el proceso receptor recibe
información
• Destruir: el proceso solicita la destrucción del
mecanismo de comunicación
Concurrencia y secuenciabilidad
Sincronización de procesos
La comunicación puede ser síncrona y asíncrona:

• Síncrona: los dos procesos han de ejecutar


servicios de forma simultánea. El emisor ha de
ejecutar el servicio enviar mientras el receptor
ejecuta recibir.

• Asíncrona: el emisor hace el envío y prosigue su


ejecución. El SO ofrece un almacenamiento
intermedio para guardar la información enviada,
hasta que el receptor la solicite.
Concurrencia y secuenciabilidad
Sincronización de procesos
• Dos o más procesos leen o escriben en ciertas
zonas compartidas.

• El resultado final puede depender de lo que cada


proceso ejecutó.
Proceso 1 Proceso 2

S. O.

Recurso
Concurrencia y secuenciabilidad
Mecanismos de semáforos

Los semáforos son mecanismos para la


sincronización de los procesos y esta
representado por una variable entera positiva,
cuyo valor solo puede ser acceso mediante las
operaciones wait y signal.
Concurrencia y secuenciabilidad
Semáforos

• WAIT: verifica si el valor de un semáforo es


mayor que cero y en este caso decrementa dicho
valor y el proceso continúa. Si es cero, el proceso
se va a dormir.

Las modificaciones al valor del wait se ejecutan en


forma indivisible, es decir, si un proceso está
modificando un semáforo ningún otro proceso puede
esta modificando el mismo valor.
Concurrencia y secuenciabilidad
Semáforos

• SIGNAL: incrementa el valor del semáforo


respectivo. Si uno o más procesos dormían y no
podían completar una operación anterior, el SO
elige alguno de ellos y se le permite terminar la
operación WAIT.
Concurrencia y secuenciabilidad
Semáforos (pseudocódigo)

/*Semáforo mutex compartido por N procesos es


inicializado en 1*/
/*Estructura del proceso Pi */
while (TRUE) {
wait(mutex);
/*Sección Critica*/
signal(mutex);
/*Sección No Crítica*/
}
1.EXCLUSIÓN MUTUA 13

Capítulo 1

Exclusión mutua

1.1. Definición del problema

Sean dos procesos que comparten un recurso. El acceso a dicho recurso debe ser exclusivo. Es decir,
cuando un proceso lo esté utilizando el otro proceso no puede acceder a él. Considere, por ejemplo, que
el recurso es un armario de cinta y que dos procesos, Pl y P2, intentan acceder simultáneamente a la
cinta. De forma esquemática el ciclo de vida de los procesos es:
«Pl» «P2»
REPEAT REPEAT
usa cinta; usa cinta;
otras cosas otras cosas
FOREVER FOREVER
Debemos arbitrar algún mecanismo para conseguir la exclusión mutua de los procesos respecto a la
cinta.
En lo que sigue utilizaremos las aproximaciones de Ben-Ari [BenA82] para resolver el problema de
la exclusión mutua.
(pg26)

1.2. 1.º intento: «alternancia»

En una primera aproximación al problema considere que los dos procesos están representados por dos
esquimales. Existe un iglú, dentro del cual hay una pizarra. La entrada al iglú es tan estrecha que tan sólo
cabe un esquimal por ella. De la misma manera, cuando un esquimal esté dentro del iglú, el otro no
puede entrar. El recurso compartido por los dos esquimales es un agujero en el hielo para pescar. El
agujero está a medio día de marcha del iglú (Fig. 7). Cuando el esquimal 1 quiere utilizar este agujero,
va primero al iglú y mira qué hay anotado en la pizarra. Si hay un 2, significa que el otro esquimal está
utilizando el agujero. Por ello empieza a pasearse y de vez en cuando entra al iglú a comprobar el valor
de la pizarra. Cuando se encuentre que en ella hay un 1, significa que ya puede pescar, porque el otro
esquimal ha dejado de hacerlo. Por tanto, se va a pescar; está un rato y cuando termina, va al iglú y pone
en la pizarra un 2, indicando que el otro esquimal ya puede pescar.
La anterior situación se puede programar como:
14 PROGRAMACIÓN CONCURRENTE

PROGRAM PrimerIntento;
VAR turno: [1..2];
PROCEDURE P1;
BEGIN
REPEAT
WHILE turno = 2 DO; (* pasea *)
****** usa el agujero de pesca ******
turno:= 2;
otras cosas
FOREVER
END;
(pg27)
PROCEDURE P2;
BEGIN
REPEAT
WHILE turno = 1 DO; (* pasea *)
****** usa el agujero de pesca ******
turno:= 1;
otras cosas
FOREVER
END;

BEGIN
turno:= 1;
COBEGIN
P1; P2
COEND
END.
En el paradigma anterior los esquimales son los procesos, el agujero de pesca el recurso compartido y
la pizarra una variable que los procesos utilizan para saber si pueden o no utilizar el recurso. El iglú es
una manera de indicar que existe un árbitro de memoria para controlar los accesos simultáneos a la
variable. En el caso de que los dos procesos intentasen acceder simultáneamente a la variable, la entrada
al iglú permitirá que pase uno u otro, pero no los dos.
Con la solución propuesta se consigue la exclusión mutua. Es fácil comprobar que cuando turno=l el
proceso 2 no puede utilizar el recurso y viceversa.
A pesar de que la solución satisface la exclusión mutua tiene el problema de que los accesos al
recurso se deben de producir de una manera estrictamente alternada: PI, P2, P1, P2, etc. Piense en lo que
ocurriría si al esquimal 1, mientras da una vuelta esperando utilizar el agujero de pesca, se lo come un
oso polar. Ello significaría que el esquimal 2, después de haber pescado, ya nunca lo podrá hacer de
nuevo. De la misma forma, si un proceso debe acceder al recurso más frecuentemente que el otro se
encontrará que no puede hacerlo.

1.3. 2.º intento: «falta de exclusión»


El problema de la alternancia se ha producido por utilizar una única variable para sincronizar ambos
procesos. Para evitarlo utilizaremos dos variables. (pg28) Para ello, y siguiendo con el paradigma anterior,
utilizaremos dos iglús con una pizarra en cada uno de ellos (que llamaremos pizarral y pizarra2) (Fig. 8).
En las pizarras figurará o bien la palabra `pescando' o bien `NOpescando' indicándose con ello que el
esquimal dueño del iglú está utilizando o no el agujero. Cuando el esquimal 1 quiera pescar va al iglú del
esquimal 2, mira la pizarra y si está escrito `pescando' significa que el esquimal 2 está pescando y que
por lo tanto debe esperar (dándose un paseo). Cada cierto tiempo entrará de nuevo al iglú del esquimal 2
para comprobar la pizarra. Cuando se encuentre en ella la palabra `NOpescando' significa que ya puede
pescar. Por ello va a su iglú y pone en la pizarra la palabra `pescando' notificando con ello al esquimal 2
que él está pescando. Cuando acabe de hacerlo volverá a su iglú y escribirá NOpescando' en la pizarra.
1.EXCLUSIÓN MUTUA 15

El programa que implementa este algoritmo es el siguiente:


PROGRAM Segundolntento;
VAR pizarral, pizarra2: (pescando, NOpescando);
PROCEDURE P1;
BEGIN
REPEAT
WHILE pizarra2 = pescando DO; (* pasea *)
pizarral:= pescando;
****** usa el agujero de pesca ******
pizarral:= NOpescando;
otras cosas
FOREVER
END;
(pg29)
PROCEDURE P2;
BEGIN
REPEAT
WHILE pizarral = pescando DO; (* pasea *)
pizarra2:= pescando;
****** usa el agujero de pesca ******
pizarra2:= NOpescando;
otras cosas
FOREVER
END;
BEGIN
pizarral:= NOpescando;
pizarra2:= NOpescando;
COBEGIN
P1; P2
COEND
END.
El protocolo esbozado en el programa anterior parece correcto. Cuando un proceso quiere utilizar
el recurso, primero se asegura que el otro proceso no lo está haciendo (consultando la pizarra del
vecino). Una vez que ha utilizado el recurso, vuelve a su iglú e indica que ya ha terminado de
hacerlo.
Sin embargo, este programa puede conducir a una falta de exclusión mutua. Considere el
siguiente escenario:
1. el proceso Pl comprueba el valor de la variable pizarra2 (NOpescando) y sale del lazo while;
2. el proceso P2 comprueba el valor de la variable pizarral (NOpescando) y sale del lazo while;
3. el proceso Pl pone pizarral a pescando;
4. el proceso P2 pone pizarra2 a pescando;
5. el proceso PI accede al agujero de pesca;
6. el proceso P2 accede al agujero de pesca;
16 PROGRAMACIÓN CONCURRENTE

En esta situación se ha producido una falta de exclusión mutua. Puesto que puede producirse, la
solución no es correcta.

1.4. 3.º intento: «interbIoqueo (espera infinita)»


La situación anterior se ha producido porque primero se mira en el iglú del vecino y luego se
anota en el propio la situación. Para evitarlo, actuaremos(pg30) a la inversa; es decir, cuando un proceso
quiera utilizar el recurso, primero indica que quiere hacerlo y luego se esperará hasta que quede libre. El
programa que satisface este algoritmo es el siguiente:

PROGRAM TercerIntento;
VAR pizarral, pizarra2: (pescando, NOpescando);
PROCEDURE P1;
BEGIN
REPEAT
pizarral:= pescando;
WHILE pizarra2 = pescando DO; (* pasea *)
****** usa el agujero de pesca ******
pizarral:= NOpescando;
otras cosas
FOREVER
END;
PROCEDURE P2;
BEGIN
REPEAT
pizarra2:= pescando;
WHILE pizarral = pescando DO; (* pasea *)
****** usa el agujero de pesca ******
pizarra2:= NOpescando;
otras cosas
FOREVER
END;
BEGIN
pizarral:= NOpescando;
pizarra2:= NOpescando;
COBEGIN
P1; P2
COEND
END.
(pg31)

Sin embargo, esta solución presenta un problema. Suponga el siguiente escenario. Inicialmente las
dos pizarras contienen `NOpescando'.

1. P1 pone pizarral a `pescando';


2. P2 pone pizarra2 a `pescando';
3. Pl comprueba que la condición de su while es cierta y se queda ejecutando el bucle;
4. P2 comprueba que la condición de su while es cierta y se queda ejecutando el bucle.
Estamos por tanto en una situación no deseable. Cada proceso espera que el otro cambie el valor de
su pizarra y ambos se quedan en una espera infinita. Ninguno de los dos puede continuar.

1.5. 4. intento: «espera indefinida»


Para solucionar este problema de espera infinita introduciremos un tratamiento de cortesía. Cuando
un proceso ve que el otro quiere utilizar el recurso, le cede el turno cortésmente. El programa que
implementa este algoritmo es el siguiente:
1.EXCLUSIÓN MUTUA 17
PROGRAM CuartoIntento;
VAR pizarral, pizarra2: (pescando, NOpescando);
PROCEDURE P1;
BEGIN
REPEAT
pizarral:= pescando;
WHILE pizarra2 = pescando DO
BEGIN
(* tratamiento de cortesía *)
pizarral:= NOpescando;
(* date una vuelta *)
pizarral:= pescando
END;
****** usa el agujero de pesca ******
pizarral := NOpescando;
otras cosas
FOREVER
END;
(pg32)
PROCEDURE P2;
BEGIN
REPEAT
pizarra2:= pescando;
WHILE pizarral = pescando DO
BEGIN
(* tratamiento de cortesía *)
pizarra2:= NOpescando;
(* date una vuelta *)
pizarra2:= pescando
END;
****** usa el agujero de pesca ******
pizarra2:= NOpescando;
otras cosas
FOREVER
END;
BEGIN
pizarral:= NOpescando;
pizarra2:= NOpescando;
COBEGIN
P1; P2
COEND
END.
En esta solución cuando el proceso i intenta acceder al recurso y comprueba que el otro también lo
desea, cede su turno (pone pizarra-i a NOpescando), espera un tiempo, y luego reclama su derecho a
utilizar el recurso.
Sin embargo, este tratamiento de cortesía puede conducir a que los procesos se queden de manera
indefinida cediéndose mutuamente el paso. Si bien es difícil que se produzca indefinidamente, esta
solución no asegura que se acceda al recurso en un tiempo finito.

1.6. Algoritmo de Dekker


Para evitar esta situación se utilizará a parte de las dos pizarras otra más que indicará, en caso de
conflicto, a quién se le concede el acceso al recurso (Fig. 9). Llamaremos a esta nueva pizarra turno.
La siguiente solución, debida a Dekker, es una combinación de los programas PrimerIntento y Cuar-
toIntento anteriormente escritos.
(pg33)
18 PROGRAMACIÓN CONCURRENTE
El algoritmo de Dekker es el siguiente:
PROGRAM AlgoritmoDeDekker;
VAR pizarral, pizarra2: (pescando, NOpescando);
turno: [1..2];
PROCEDURE P1;
BEGIN .
REPEAT
pizarral:= pescando;
WHILE pizarra2 = pescando DO
IF turno = 2
THEN BEGIN
(* tratamiento de cortesía *)
pizarral:= NOpescando;
WHILE turno = 2 DO; (* date una vuelta *)
pizarral:= pescando
END;
****** usa el agujero de pesca ******
turno:= 2;
pizarral:= NOpescando;
otras cosas
FOREVER
END;
PROCEDURE P2;
BEGIN
REPEAT
pizarra2:= pescando;
WHILE pizarral = pescando DO
IF turno = 1
THEN BEGIN
(* tratamiento de cortesía *)
pizarra2:= NOpescando;
WHILE turno = 1 DO; (* date una vuelta *)
pizarra2:= pescando
END;
****** usa el agujero de pesca ******
turno:= 1;
pizarra2:= NOpescando;
otras cosas
FOREVER
END;
(pg34)
BEGIN
pizarral:= NOpescando;
pizarra2:=
NOpescando;
turno:= 1;
COBEGIN
P1; P2
COEND
END.
1.EXCLUSIÓN MUTUA 19
Es fácil comprobar que esta solución asegura la exclusión mutua y que está libre de interbloqueos
y lockout.
Es importante recordar que este algoritmo sirve para conseguir la exclusión mutua entre dos
procesos. El algoritmo utilizado para N procesos tan sólo tiene un interés teórico ya que consume
demasiado tiempo para conseguir la exclusión mutua.
Por último indicar que muchos ordenadores proporcionan instrucciones que permiten comprobar y
modificar el contenido de una palabra de memoria, o intercambiar el contenido de dos palabras en un
solo ciclo de memoria (instrucciones atómicas o indivisibles). Se deja al lector que implemente la
exclusión mutua utilizando estas instrucciones.
ALGORITMO DE PETERSON

El algoritmo de Peterson es un algoritmo de programación concurrente para exclusión


mutua, que permite a dos o más procesos o hilos de ejecución compartir un recurso sin
conflictos, utilizando sólo memoria compartida para la comunicación.

Peterson desarrolló el primer algoritmo (1981) para dos procesos que fue una
simplificación del algoritmo de Dekker para dos procesos. Posteriormente este algoritmo
fue generalizado para N procesos.

El algoritmo de Dekker resuelve el problema de la exclusión mutua, pero con un programa


complejo. Entonces, Peterson desarrolló una solución más simple: la variable global señal
indica la posición de cada proceso con respecto a la exclusión mutua y la variable global
turno resuelve los conflictos de simultaneidad. Este algoritmo puede generalizarse para el
caso de n procesos.
EL PLANIFICADOR DE WINDOWS 7

Windows implementa un sistema de planificación manejado por prioridades con


expulsión, no apropiativo. Siempre se ejecuta el hilo (listo o ready) con más alta prioridad,
con la salvedad de estar condicionado a ejecutarse en los procesadores que este habilitado
(fenómeno conocido como Afinidad de Procesador). Un hilo, por default, puede ejecutarse
en cualquier procesador disponible, pero la afinidad puede cambiarse a través de las
funciones de planificación. El código del planificador de Windows esta implementado en el
kernel. No hay un solo módulo o rutina "planificador", el código está extendido por todo el
kernel en el que ocurren eventos relacionados con la planificación. Las rutinas que realizan
estas tareas se conocen colectivamente como el despachador del kernel. Los siguientes
eventos podrían necesitar del despachador:

 Un hilo está listo para ejecutar. Por ejemplo, si se ha creado recientemente o acaba
de ser lanzado desde el estado de espera.
 Un hilo sale del estado de ejecución debido a que termino su quantum de tiempo.
Cede la ejecución a otro, o entrará en un estado de espera.
 Un hilo cambia su prioridad, ya sea debido a una system call o debido a que
Windows cambio el valor de prioridad.
 Un hilo sufre un cambios la afinidad de procesador para que ya no se ejecutan en el
procesador que se estaba ejecutando.
Prioridades:
Internamente Windows utiliza 32 niveles de prioridad, que van desde 0 a 31. Estos valores se
dividen de la siguiente manera:

 Dieciséis de tiempo real (16 a 31).


 Quince niveles variables (1 a 15).
 Un nivel de sistema (0), reservado para el hilo de la página cero.
Los niveles de prioridad de hilo se asignan a partir de dos perspectivas diferentes: los de la
API de Windows y los del núcleo de Windows. La API de Windows organiza los procesos
en principio, por la prioridad asignada en la creación (Real-time, High, Above Normal,
Normal, Below Normal, and Idle) y luego por la prioridad relativa de los hilos individuales
dentro de los procesos (Time-critical, Highest, Above-normal, Normal, Below-normal,
Lowest, and Idle) En la API de Windows, cada hilo tiene una prioridad base, que es una
función de la prioridad del proceso clase y su prioridad relativa dentro del mismo. El mapeo
de prioridades de Windows a las prioridades numéricas internas de Windows se ve en la
siguiente figura:
Para manejar los procesos en Windows se usan de dos formas: por línea de comando (cmd)
e interfaz gráfica.

 Línea de comando: cmd

 Enlistar un proceso: tasklist


 Matar un proceso: tskill #PID
 Matar un proceso: taskkill /im nombre del proceso
 Arrancar un proceso: taskstart nombre del proceso
 Cambio de prioridad: start /prioridad nombre del proceso

 Interfaz gráfica: administrador de tareas


EL PLANIFICADOR DE LINUX

El Process Scheduler (SCHED), es el componente del kernel encargado de controlar el


acceso de los procesos al CPU. El SCHED es el componente de bajo nivel más importante
del sistema; todos los demás (incluyendo los módulos de acceso a disco, controladores de
video, etc.), dependen directamente de él.
Los procesos en Linux pueden ser divididos en tres categorías, relacionadas con la
prioridad: interactivos, por lotes y de tiempo real (TR). Los procesos TR son manejados
bien por un algoritmo FIFO o Round Robin. Los demás procesos son despachados
utilizando planificación RR con un sistema de envejecimiento basado en créditos, donde el
siguiente proceso a ejecutar es aquel que más créditos posea.
Los procesos TR son considerados prioritarios sobre cualquier otro proceso en el sistema,
por lo que serán ejecutados antes que los demás. Por otro lado, un proceso puede estar en
alguno de estos estados: en ejecución, en espera, detenido o zombi (un proceso que, aunque
ha finalizado su ejecución, mantiene su PCB en el sistema).
Se asigna a cada proceso un valor de prioridad estática y este valor sólo puede cambiarse a
través de llamadas al sistema. Conceptualmente, el planificador mantiene una lista de
procesos ejecutables para cada posible valor, y puede tener un valor en el rango de 0 a
99. Para poder determinar qué proceso se debe ejecutar a continuación, el planificador de
Linux busca en la lista no vacía con la prioridad estática más alta y toma el proceso a la
cabeza de dicha lista. La política de planificación determina para cada proceso, dónde se
insertará en la lista de procesos con igual prioridad estática y cómo se moverá dentro de
esta lista.
El quantum varía según el proceso y su prioridad. La duración base es de aprox. 200ms.
Para manejar los procesos en Ubuntu (Linux) se usan de dos formas: por consola e interfaz
gráfica.

 Interfaz gráfica: gnome-system-monitor

Es una utilidad de gnome que muestra los procesos y permite monitorizar el estado del
sistema. Para ejecutar la aplicación hay que ir a inicio -> buscar -> Monitor del sistema o
basta con introducir en el terminal: gnome-systme-monitor.

 Terminal: Consola

El comando ps
El comando ps es el mejor modo de mostrar los procesos que se encuentran activos.
Para ver todos los procesos activos con todos los detalles basta con abrir un terminal y
teclear: ps -eF

Esto mostrará un listado con la siguiente información:

UID PID PPID C SZ RSS PSR STIME TTY TIME CMD

donde;
UID User ID, usuario propietario del proceso.
PID Process ID, número único o de identificación del proceso.
PPID Parent Process ID, padre del proceso.
C Porcentaje de cpu utilizado por el proceso.
SZ Tamaño virtual de la imagen del proceso.
RSS Resident Set Size, tamaño de la parte residente en memoria en kilobytes.
PSR Processor that process is currently assigned to, procesador al que el proceso es asignado.
STIME Starting Time, hora de inicio del proceso.
TTY Terminal asociada al proceso, si no hay terminal aparece entonces un '?'
TIME Tiempo de uso de cpu acumulado por el proceso.
CMD El nombre del programa o comando que inició el proceso.

ps --help:

#> ps --help
********* simple selection ********* ********* selection by list
*********
-A all processes -C by command name
-N negate selection -G by real group ID (supports
names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group
name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports
names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options
***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
Pstree: Muestra los procesos en forma de árbol, pstree --help te da las opciones más
comunes.

Kill: El comando kill, que literalmente quiere decir matar, sirve no solo para matar o
terminar procesos sino principalmente para enviar señales (signals) a los procesos. La señal
por default (cuando no se indica ninguna es terminar o matar el proceso), y la sintaxis es
kill PID, siendo PID el número de ID del proceso.
EL PLANIFICADOR DE MACINTOSH
El Mac OS es un sistema operativo multiusuario y multitarea con una capacidad para
administrar simultáneamente información de 32 bits, se considera de multitarea preventivo
dado que cuenta con un programador (también llamado planificador) el cual, según los
criterios de prioridad, asigna el tiempo de los equipos entre varios procesos que lo solicitan.
La planificación del procesador consiste en mantener una serie de estructuras de
información que permiten identificar las características de cada trabajo, así como los
recursos que tiene asignados. Un trabajo puede estar en varios estados (procesamiento, listo
para ejecutar y en espera).
Tareas e hilos
Mac Os X define el concepto de hilo tal y como lo hace POSIX, siguiendo este mismo
estándar para su manejo. Un hilo es, por tanto, es un punto de control de la ejecución de un
proceso, que tiene acceso a todos los recursos del proceso y que se puede ejecutar en
paralelo (si la maquina lo soporta) con otros hilos (estén o no dentro del mismo proceso).
Un proceso (o tarea, como se le denomina en Mach) se define como un conjunto de
recursos. Estos recursos, como veremos posteriormente, pueden ser referenciados a través
de los puertos, con la excepción del espacio de direccionamiento. Una tarea debe contener
uno o más hilos.
En Mac, una tarea no tiene capacidad de ejecución, sino que son los hilos que contiene los
que realmente se ejecutan basándose en los recursos de la tarea. Una tarea es, por tanto, una
entidad bastante pesada, ya que contiene todos los recursos que los hilos contenidos van a
necesitar. Por contra, un hilo es una entidad sumamente ligera, ya que sólo contiene cierta
cantidad de información relativa al estado de la ejecución, delegando en la tarea todos los
aspectos relativos a los recursos.
Planificación
La planificación en el kernel de Mac OS X está basada en cuatro listas de ejecución, cada
una de ellas con diferente prioridad. Un hilo puede migrar de un nivel de prioridad a otro
en función de sus requerimientos, dependiendo de la política en concreto que se utilice en el
sistema. En general, es posible manejar estas prioridades mediante los procedimientos
definidos en el estándar de llamadas POSIX. Los procesos parecen efectuarse
simultáneamente
Las cuatro listas de ejecución que maneja el planificador de Mac OS X, son:
Prioridad Aplicación
Normal Aplicaciones normales
Alta Cuya prioridad se ha aumentado
Modo kernel Internos al kernel con mayor prioridad que
el nivel de usuario (ej: E/S).
Tiempo real Hilos con una fracción definida de ciclos de
ejecución.
EL PLANIFICACION DE SOLARIS:

El sistema operativo Solaris realiza una planificación de hebras basada en prioridades


(170) distribuidas en cuatro clases para la planificación:

1. Tiempo real

2. Sistema

3. Tiempo compartido

4. Interactiva.

La clase de planificación predeterminada para un proceso es la de tiempo compartido. La


política de planificación para el tiempo compartido modifica dinámicamente las prioridades
y asigna cuantos de tiempo de diferente duración usando colas multinivel realimentadas.

De manera predeterminada, existe una relación inversa entre las prioridades y los cuantos
de tiempo. Cuando más alta sea la prioridad, más pequeño será el cuanto de tiempo y
cuando menor sea la prioridad, más larga será la franja.

Los procesos interactivos suelen tener la prioridad más alta, los procesos limitados por al
CPU tienen la prioridad más baja. Esta política de planificación proporciona un buen
tiempo de respuesta para los procesos interactivos y una buena tasa de procesamiento para
la clase de tiempo compartido.
Sistema operativo Mac OS X GNU/Linux Windows FreeBSD
The Linux Foundation, Linus
Creador Apple Inc. Microsoft Corporation Proyecto FreeBSD
Torvalds y otros
OS X 10.11 "El Capitan" el 30 de Kernel Linux 4.1.2 el 10 de julio Windows 10 el 29 de julio de FreeBSD 10.1 el 14 de noviembre de
Última edición
septiembre de 2015; hace 7 días de 2015; hace 2 mesesnota 1 2015; hace 2 meses 2014; hace 10 meses
Gratuito (en caso de tener
versión anterior),137 $119.99
Costo Gratuito (únicamente preinstalado)136 Gratuito Gratuito
USD (en caso de adquirirlo
nuevo), preinstalado.
Licencia No libre (Apple CLUF) Libre: GPL No libre (Microsoft CLUF) Libre: BSD
Hogar, diseño, videojuegos,
Hogar, diseño, negocios, servidores, Hogar, servidores, ciencia, redes,
Tipo de uso negocios, redes, servidores, Servidores, workstation
workstation negocios, workstation
workstation
Intel x86, AMD64, DEC Alpha,
x86, IA64, AMD64, DEC Alpha,
ARMISH, HP300, HP PA, Landisk, Luna-
Arquitecturas de ARM, HP PA-RISC, MIPS (big
Intel x86-64 x86, x64, AMD 64, ARM 88k, Mac68k, PowerPC, Motorola VME
procesador soportadas endian), MIPS (little endian),
68k, Motorola VME 88k, SGI, Sparc,
PowerPC, IMB S/390, Sparc
UltraSparc, VAX, Zaurus
ext2, ext3, ext4, btrfs, FAT
HFS+ (predeterminado), HFS, MFS, NTFS (predeterminado), FAT
Sistemas de archivos 12/16/32, ReiserFS, ISO 9660, UFS 1/2, FAT 12/16/32, HPFS, FFS, ext2,
ISO 9660, FAT 12/16/32, UDF, 12/16/32, ExFAT, ISO 9660,
soportados por defecto UDF, NFS, HFS, HFS+, NTFS, ext3, ZFS, UDF, ISO 9660
ExFAT, FFS, UDF
HPFS, FFS, XFS, JFS, y otros
Sistema gráfico Quartz X Window System, Wayland Basado en el núcleo X Window System
Metacity, Kwin, mutter, lightdm,
Windows Managers Aqua Modern UI Metacity, Kwin, otros
otros
KDE, GNOME, XFCE, LXDE,
Entornos de escritorio OS X Finder Explorador de Windows GNOME, KDE
Sugar, Enlightenment, otros
Porcentaje de mercado 8,42% 3,22% 90,54% 0,00%

Вам также может понравиться