Post on 06-Jan-2016
description
Repasando
https://www.youtube.com/watch?v=Wy4NlEzARio
Ver hasta el minuto 5
Procesos - Tipos
Independientes
Su estado no es compartido
Son deterministas.
Son reproducibles
Pueden ser detenidos y re-arrancados sin ningn efecto negativo
i.e.: programa que calcula nmeros primos
Procesos - Tipos
Cooperantes
Los procesos comparten su estado
El funcionamiento es no determinista
Su funcionamiento puede ser irreproducible
i.e.: un proceso escribe abc en el terminal y otro cba
Sirven para:
Compartir informacin
Acelerar clculos
Proveer modularidad
Por Conveniencia
Procesos
Sincronizacin:
Identificar las condiciones necesarias para que
varios procesos compartan recursos sin que se
produzcan problemas en el sistema.
Seccin crtica:
Es la porcin de cdigo en la que se accede aun recurso compartido (estructura de datos o
dispositivo) que no debe ser accedido por ms
de un proceso o hilo en ejecucin.
Procesos
Una SC se termina en un tiempo determinado y elhilo, proceso o tarea tiene que esperar algn
perodo de tiempo para entrar de nuevo a la
Seccin crtica.
Se necesita un mecanismo de sincronizacin en la entrada y salida de la seccin crtica para asegurar
la utilizacin en exclusiva del recurso.
Procesos - Sincronizacin
Se hace necesario algn sistema de comunicacincuando se requiere el uso de informacin (datos o
estructuras) compartida entre dos o ms procesos.
Hay momentos en que se accede a estructuras dedatos comunes a varios procesos, se sincroniza
para que dos procesos no intenten acceder
simultneamente a estas y que se realicen
operaciones de lectura/escritura de forma
incontrolada.
Procesos - Cooperantes
El problema productor-consumidor
Considere la siguiente situacin:
El proceso A, es el responsable de observar y contar eventos.
El proceso B, ocasionalmente imprime informe sobre el nmero de eventos observados y luego
pone el contador de eventos en 0.
Cul es la situacin?
Procesos - Cooperantes
Supongamos que el reportero acaba de imprimir un 10, y antes de que pueda poner el contador a cero
se produce la interrupcin de tiempo y se concede
el control de la CPU al A.
ste, incrementa el contador a 11.
A continuacin, el B vuelve a tomar posesin delprocesador y pone, por fin, el a cero, lo cual
significa que un evento (el 11) queda sin ser
contabilizado
Procesos Cooperantes
Program Cuenta_Eventos;
Contador : INTEGER := 0;
Process Observador;
Repeat /* Este repeat . Forever es que se ejecuta siempre */
Esperar_Evento;
Contador := Contador + 1;
forever;
End Observador;
Process Reportero;
repeat
Imprimir (Contador);
Contador := o;
forever;
End Reportero;
Begin
Observador; /* En este momento se crea el proceso Observador */
Reportero; /* En este momento se crea el proceso Reportero */
end Cuenta_Eventos;
Procesos Condiciones de carrera
Cuando el resultado de un clculo depende de las velocidades relativas de los procesos, se dice que
hay una condicin de carrera.
Se producen cuando procesos paraleloscomparten datos o recursos, como la variable
contador del ejemplo.
Procesos Exclusin mutua
Exclusin mutua:
Es el mecanismo que asegura que slo una persona
o proceso est haciendo algo en un instante
determinado (los otros estn excluidos).
Procesos Exclusin mutua por SCProgram Cuenta_Eventos;
Contador : INTEGER := 0;
Process Observador;
repeat
Esperar_Evento;
Entrar_SC;
Contador := Contador + 1;
Salir_SC;
forever;
End Observador;
Process Reportero;
Repeat
Entrar_SC; /* Cuando pido entrar en una SC es que quiero que el CPU sea mo hasta que yo lo
suelte */
Imprimir (Contador);
Contador := o;
Salir_SC; /* Aqu se suelta el procesador */
forever;
End Reportero;
begin
Observador;
Reportero;
end Cuenta_Eventos;
Otro ejemplo
Un proceso produce datos que son posteriormenteprocesados por otro proceso
i.e.: el manejador de teclado y el programa querecoge los caracteres de un buffer
Lo ms cmodo es emplear un buffer circular
Otro ejemplo Cdigo del productor
El productor no puede escribir en el buffer si est lleno
Comparte con el consumidor: el buffer y la variable contador
do {
...
produce un nuevo elemento (elemento_p)
...
while (contador == MAX) haz_nada;
buffer[indice_p] = elemento_p;
indice_p = (indice_p + 1) % MAX;
contador = contador + 1;
} while (TRUE);
Otro ejemplo Cdigo del consumidor
El consumidor no puede leer del buffer si est vaco
Comparte con el productor : el buffer y la variable contador
do {
while (contador == 0) haz_nada;
elemento_c = buffer[indice_c];
indice_c = (indice_c + 1) % MAX;
contador = contador - 1;
...
consume el elemento (elemento_c)
...
} while (TRUE);
Condiciones de carrera
El cdigo anterior no funciona por existir condiciones
de carrera al actualizar la variable contador
Veamos:
contador = contador + 1;
Proceso 1 Suma Proceso 2 Resta
load r0, A load r0, A
add r0, 1 sub r0, 1
store A, r0 store A, r0
Problema: la modificacin de la variable contador
no es atmica
Atomicidad
Una operacin es atmica (en un sistema mono-procesador) cuando se ejecuta con las interrupciones
deshabilitadas
Las referencias y las asignaciones son atmicas enla mayora de los sistemas. Esto no es siempre cierto
para matrices, estructuras o nmeros en coma
flotante.
Implica la indivisibilidad, debe realizarse en sutotalidad o no realizarse.
Si el HW no proporciona operaciones atmicas,stas no pueden construirse por SW
Sincronizacin (de nuevo)
Persona A
3:00 Mira en la refri. No
hay leche
3:05 Va a la pulpera
3:10 Llega a la pulpera
3:15 Deja la pulpera
3:20 Llega a casa y guarda
la leche
3:25
3:30
Persona B
Mira en la refri. No hay leche
Va a la pulpera.
Llega a la pulpera.
Deja la pulpera.
Llega a casa y... Muchaleche!
Seccin crtica - Solucin
Toda solucin debe cumplir tres condiciones
Exclusin mutua
Progreso
Espera limitada
Solucin general:
do {
protocolo de entrada
seccin crtica
protocolo de salida
resto de la seccin
} while (TRUE);
Exclusin mutua- Soluciones
Se requieren las siguientes condiciones para obtener
una buena solucin:
Dos procesos no pueden estar al mismo tiempodentro de la misma regin crtica.
No se deben hacer suposiciones sobre elhardware, es decir, sobre la velocidad o el nmero
de procesadores que intervienen.
No se deben hacer suposiciones sobre lasvelocidades relativas de los procesos.
Exclusin mutua- Soluciones
Ningn proceso fuera de su regin crtica puede bloquear a otros procesos.
Ningn proceso deber esperar eternamente a entrar en su regin crtica.
No se debe posponer indefinidamente la decisin de cul es el siguiente proceso que debe entrar.
Interbloqueo Qu es?
Un proceso esta interbloqueado si est esperando por un evento determinado que nunca va a ocurrir.
Proceso A
Proceso B
Recurso 2Recurso 1
tiene
tiene necesita
necesita
Interbloqueo - Definicin
Interbloqueo entre dos procesos por el uso derecursos no compartibles (abrazo mortal)
Postergacin indefinida (inanicin, bloqueoindefinido, aplazamiento indefinido o Lockout):
cuando un proceso espera por un evento que
puede ocurrir pero no se sabe cuando.
Veamos los conceptos
http://www.youtube.com/watch?v=zKmvF0RASEg
Exclusin mutua- Soluciones
Soluciones basadas en variables de control
Soluciones basadas en instrucciones mquinaespecficas (test-and-set o swap)
Soluciones basadas en primitivas del SO
Soluciones basadas en regiones crticas ymonitores
Variables de control
Vlidas para varios procesadores
Suposicin: Instrucciones de carga y
almacenamiento atmicas
Variables de control
Algoritmo de Dekker
Variables compartidas:
Turno es entero;
Turno = 1; /*Inicializa turno en 1*/
La variable Turno obliga a que los procesos tengan que alternar turnos de acceso a la SC
Variables de control
Algoritmo de Dekker
Programa Uno;
Proceso Uno Proceso Dos
Repeat Repeat
Hace_Cosas(); Hace_Algo();
While turno = 2 Do; While turno = 1 Do;
Seccin_Crtica(); Seccin _Crtica();
turno = 2; turno = 1;
Hace_mas_cosas(); Hace_algo_mas();
Until Fin Until Fin
Algoritmos de Decker - Soluciones
http://www.youtube.com/watch?v=oMSINASmhzg
No ver!
Sincronizacin por hardware - Cerrojos
Se hace que una variable acte como cerrojo oindicador de si la regin crtica est ocupada o no.
Esto se puede hacer con una variable booleana que tome los valores 0 (libre) y 1 (ocupada).
Se consigue una buena solucin con un poco deayuda hardware con la siguiente instruccin
mquina (por lo tanto, ininterrumpible en su
ejecucin)
TAS (Cerrojo, Valor)
Sincronizacin por hardware
El proceso que quiere entrar a la seccin crtica consulta el cerrojo. Si est libre (cerrojo==0), el
proceso lo echa (cerrojo=1) y entra a la seccin
crtica.
Si est echado, ejecuta una espera activaconsultando su valor hasta que est libre.
Cuando un proceso deja la seccin crtica, libera elcerrojo (cerrojo=0)
Sincronizacin por hardware
Variable compartida cerrojo iniciada a FALSE
do {
while (test_and_set (&cerrojo))
haz_nada;
seccin crtica
cerrojo = FALSE;
resto de la seccin
} while (TRUE);
Soluciones por hardware - SWAP
Procedure intercambiar(var r:registro; var m:memoria); var temp;
Begin
temp:=m;
m:=r;
r:=temp
End.
Sincronizacin por hardware - SWAP
Variable compartida cerrojo iniciada a FALSE
do {
llave = TRUE;
do { swap (cerrojo, llave);
} while (llave != FALSE);
seccin crtica
cerrojo = FALSE;
resto de la seccin
} while (TRUE);
Sincronizacin por hardware - Ventajas
Es aplicable a cualquier nmero de procesos ensistemas con memoria compartida, tanto de
monoprocesador como de multiprocesador.
Es simple y fcil de verificar.
Puede usarse para disponer de varias seccionescrticas; cada seccin crtica puede definirse con
su propia variable.
Interrupciones
Es un mecanismo que permite ejecutar un bloquede instrucciones interrumpiendo la ejecucin de un
programa, y luego restablecer la ejecucin del
mismo sin afectarlo directamente.
De este modo un programa puede ser interrumpidotemporalmente para atender alguna necesidad
urgente del computador y luego continuar su
ejecucin como si nada hubiera pasado.
Interrupciones
Internas del hardware:
No son modificables, por ejemplo el reloj.
Externas de hardware:
Activadas por evento en los perifricos, porejemplo teclados, impresoras, tarjetas de
comunicacin, etc
De software:
Activadas invocando directamente elensamblador y el nmero de interrupcin.
De excepcin: i.e. Divisin por cero
Sincronizacin por hardware -Interrupciones
Un proceso se mantiene ejecutndose hasta que se solicite un
servicio al S.O. o hasta que sea interrumpido.
Para garantizar la exclusin mutua, es suficiente con impedir
que un proceso sea interrumpido.
Se utiliza el S.O. para habilitar o inhabilitar las interrupciones.
While (cierto){/*inhabilitar interrupciones */;/* seccin critica */;/* habilitar interrupciones */;/* resto */;}
Interrupciones Ventajas - Desventajas
Ventaja:
Si se desactivan las interrupciones no sepresenta el problema de la exclusin mutua
porque al hacerlo impedimos que ningn otro
proceso pueda parar al que se est ejecutando.
Desventaja:
Si a un proceso se le olvida volver a habilitar lasinterrupciones, se hace propietario de la
mquina y puede botar el sistema.
Soluciones - Semforos
Introducidos por Dijkstra en los aos 60
Es un tipo especial de variable que slo puede ser accedida por dos primitivas P y V
P (semforo): operacin atmica que espera hasta
que la variable semforo sea positiva, en este
momento la decrementa en 1 (espera activa)
V (semforo): operacin atmica que incrementa la variable semforo en 1
Semforos
Son independientes de la mquina
Son simples
Pueden trabajar con varios procesos
Pueden permitir que varios procesos entren en laseccin crtica al mismo tiempo en caso de
necesitarse esta posibilidad
Doble uso de los semforos:
Exclusin mutua
Planificacin
Semforos
Restricciones:
El consumidor espera a que haya datos en el buffer
El productor espera a que haya buffers vacos
Slo un nico proceso puede manipular el buffer a la vez
Semforos:
smf_llenos, smf_vacos y exmut
Inicializacin:
smf_llenos = 0
smf_vacos = nmero_de_buffers
exmut = 1
Semforos
Productor
do {
P (smf_vacos);
P (exmut);
Produce_dato,
V (exmut);
V (smf_llenos);
} while (TRUE);
Consumidor
do {
P(smf_llenos);
P (exmut);
Consume_dato;
V (exmut);
V (smf_vacos);
} while (TRUE);
Por qu el productor hace P(smf_vacos) y V(smf_llenos)?Es importante el orden en que se ejecutan las primitivas P y V?
Cmo podemos extender el problema si hay dos consumidores?
El problema de los filsofos pensadores
El modelaje de este problema dentro del sistemaoperativo, va orientado a resolver problemas de
recursos de entrada y salida del sistema.
Fue propuesto pos Edsger Dijkstra pararepresentar el problema de la sincronizacin de
procesos en un SO.
La interpretacin est basada en pensadoreschinos, quienes coman con dos palillos, donde se
necesita el del comensal que se siente al lado para
poder comer.
La cena de los filsofos pensadores -Enunciado
Cinco filsofos se sientan alrededor de una mesa y pasan su vida cenando ypensando. Cada filsofo tiene un plato de fideos y un palillo a la izquierda desu plato.Para comer los fideos son necesarios dos palillos y cada filsofo slo puedetomar los que estn a su izquierda y derecha. Si cualquier filsofo coge unpalillo y el otro est ocupado, se quedar esperando, con el palillo en lamano, hasta que pueda coger el otro palillo, para luego empezar a comer.Si dos filsofos adyacentes intentan tomar el mismo palillo a una vez, seproduce una condicin de carrera: ambos compiten por tomar el mismopalillo, y uno de ellos se queda sin comer.
Los filsofos - Analicemos
Qu ocurre si todos los filsofos toman a la vez el palillo de la derecha?
Todos se quedarn esperando eternamente,porque alguien debe liberar el palillo que le falta.
Nadie lo har porque todos se encuentran en lamisma situacin (esperando que alguno deje sus
palillos). Entonces los filsofos se morirn de
hambre.
Cmo denominaran esta situacin?
Los filsofos - Estados
Un filsofo solo puede tener tres estados:
Pensando
Comiendo
Con hambre
Debera haber un vector de estados y otro desemforos (palillos) por el nmero de filsofos que
hay en la mesa.
Debera haber una variable de exclusin mutuapara entrar y salir de la seccin crtica.
La seccin crtica del problema es?
Los filsofos El problema
Ofrecer una solucin que permita a todos losfilsofos comer y pensar sin morirse de hambre.
Un filsofo en una posicin i, en la mesa, hace losiguiente:
while (TRUE) {
piensa();
tomar_tenedores(i);
come();
poner_tenedores(i);
}
Simbologa de ifs
== si es igual
&& significa .and. Que se cumplan ambas condiciones
Cuando se pone (i-1) %N, es el mdulo, que es lo que me sobra de dividir un nmero entre otro, i.e.
5%2 = 1 (es el sobrante, no el resultado)
Cuando se usa ++, estamos sumando 1
Cuando se usa --, estamos restando 1
Solucin
Tomar-Tenedores (i) Poner-Tenedores (i) Comprobar (i)
toma_tenedores(i
nt i) {
poner_tenedores(
int i) {
comprobar(int i)
{
P(exmut); P(exmut); if (estado[i] ==
HAMBRIENTO
&&
estado[i] = HAMBRIENTO; estado[i] = PENSANDO; estado[(i-1)%N] !=
COMIENDO
&&
comprobar(i); comprobar((i-1)%N); estado[(i+1)%N] != COMIENDO)
{
V(exmut); comprobar((i+1)%N); estado[i] = COMIENDO;
P(pallillo[i]); V(exmut); V(palillo[i]);
}
} /* Fin de
tomar_tenedores */
}/* Fin de
poner_tenedores */
} /* Fin de
comprobar */
Preguntas a responder
Cul debera ser el valor inicial de las posicionesdel vector que contiene el semforos de los
palillos?
Por qu se comprueba siempre desde la SeccinCrtica.
Problema: En una barbera, hay M barberos y N sillas de
espera, si un cliente entra y no hay sillas, se va.
Por el contrario, si no hay clientes, el/los barbero/s
duermen hasta que llegue al menos un cliente.
Semforos:clientes: nmero de clientes en espera sin contar el queest en la silla del peluquero
barberos: nmero de barberos inactivos
exmut: exclusin mutua
Variable compartida:esperando: nmero de clientes esperando
Inicio: clientes=0 barberos=0 exmut=1
esperando=0
Problema del barbero dormiln
Proceso barbero
do {
P(clientes);
P(exmut);
esperando=esperando-1;
V(barberos);
V(exmut);
/* Corta el pelo */
} while (TRUE);
Proceso clientes
do {
P(exmut);
if (esperando < SILLAS){
esperando=esperando+1;
V(clientes);
V(exmut);
P(barberos);
/* Se corta el pelo */
} else {
V(exmut);
}
} while (PELOLARGO);
Problema del barbero dormiln
Problema: Por un puente slo pueden pasar o autos que
suben o autos que bajan.
Solucin:
Variables compartidas:
int contadorsubida = 0;
int contadorbajada = 0;
semaforo exmut_s, exmut_b, puente;
Inicializacin:
Los semforos inicialmente deben valer 1
No se tratan los problemas de inanicin
Problema del puente estrecho
Cdigo subida Cdigo bajada
P(exmut_s);
contadorsubida++; /*Suma
1 */
if (contadorsubida==1)
P(puente);
V(exmut_s);
.. Se sube el puente ..
P(exmut_s);
contadorsubida--;
if (contadorsubida==0)
V(puente);
V(exmut_s);
P(exmut_b);
contadorbajada++;/*Suma
uno */
if (contadorbajada==1)
P(puente);
V(exmut_b);
.. Se baja el puente ..
P(exmut_b);
contadorbajada--;
if (contadorbajada==0)
V(puente);
V(exmut_b);
Comunicacin con mensajes
Vlido para comunicacin intermquina
Definicin:
Mensaje: parte de informacin que es pasada de un
proceso a otro
Buzn: lugar donde se depositan los mensajes desde el
envo a la recepcin
Operaciones sobre mensajes:
Enviar
Recibir
Comunicacin en un nico sentido: los mensajes
fluyen en un nico sentido
Ejemplos: Tuberas de UNIX, productor-consumidor y
streams
Mtodos de Comunicacin con mensajes
Comunicacin bidireccional: los mensajes fluyen en
ambos sentidos
Ejemplos: Llamadas a procedimientos remotos (RPCs), el
modelo cliente-servidor o el de peticin-respuesta
Mtodos de Comunicacin con mensajes
Comunicacin con mensajes
Los procesos utilizan una pareja de servicios delsistema operativo para comunicarse. Estos
servicios son conocidos habitualmente como Send
y Receive.
Para llevar a cabo la comunicacin un procesoejecuta la funcin Send y el otro Receive,
intercambiando de esta forma un bloque de
informacin que recibe el nombre de mensaje.
Productor:
int mensaje1[1000];
while (1) {
--Preparamos el mensaje1--
enviar(mensaje1, buzn);
}
Cliente:
char resp[1000];
envia("leer vax", buzon1);
recibir (resp, buzon2);
Consumidor:
int mensaje2[1000];
while (1) {
recibir(mensaje2, buzn);
--Procesamos el mensaje2--
}
Servidor:
char orden[1000;
char resp[1000];
recibir (orden, buzon1);
enviar (resp, buzon2);
Ejemplos
Muchas aplicaciones responden a este esquema
Las partes que se comunican pueden ser completamente
independientes.
Ventajas:
Es ms difcil que se produzcan errores
Permite que los procesos no confen entre s
Las aplicaciones pueden ser escritas por programadores y en
tiempos diferentes
Los procesos pueden correr en diferentes procesadores,
conectados a travs de una red
Porqu utilizar mensajes