Professional Documents
Culture Documents
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 a
un 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 el
hilo, 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 comunicacin
cuando se requiere el uso de informacin (datos o
estructuras) compartida entre dos o ms procesos.
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 del
procesador 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;
Se
producen
cuando
procesos
paralelos
comparten datos o recursos, como la variable
contador del ejemplo.
Otro ejemplo
Un proceso produce datos que son posteriormente
procesados por otro proceso
i.e.: el manejador de teclado y el programa que
recoge los caracteres de un buffer
Lo ms cmodo es emplear un buffer circular
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 monoprocesador) cuando se ejecuta con las interrupciones
deshabilitadas
Las referencias y las asignaciones son atmicas en
la mayora de los sistemas. Esto no es siempre cierto
para matrices, estructuras o nmeros en coma
flotante.
Implica la indivisibilidad, debe realizarse en su
totalidad o no realizarse.
Si el HW no proporciona operaciones atmicas,
stas no pueden construirse por SW
Persona B
3:05 Va a la pulpera
Va a la pulpera.
Llega a la pulpera.
Deja la pulpera.
Interbloqueo Qu es?
Un proceso esta interbloqueado si est esperando
por un evento determinado que nunca va a ocurrir.
tiene
Proceso A
Recurso 1
necesita
necesita
Recurso 2
Proceso B
tiene
Interbloqueo - Definicin
Interbloqueo entre dos procesos por el uso de
recursos no compartibles (abrazo mortal)
Postergacin
indefinida
(inanicin,
bloqueo
indefinido, aplazamiento indefinido o Lockout):
cuando un proceso espera por un evento que
puede ocurrir pero no se sabe cuando.
basadas
en regiones
crticas
Variables de control
carga
Variables de control
Algoritmo de Dekker
Variables compartidas:
Turno es entero;
Turno = 1; /*Inicializa turno en 1*/
Variables de control
Algoritmo de Dekker
Programa Uno;
Proceso Uno
Proceso Dos
Repeat
Repeat
Hace_Cosas();
Hace_Algo();
Seccin_Crtica();
Seccin _Crtica();
turno = 2;
turno = 1;
Hace_mas_cosas();
Hace_algo_mas();
Until Fin
Until Fin
Interrupciones
Es un mecanismo que permite ejecutar un bloque
de instrucciones interrumpiendo la ejecucin de un
programa, y luego restablecer la ejecucin del
mismo sin afectarlo directamente.
De este modo un programa puede ser interrumpido
temporalmente 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, por
ejemplo teclados, impresoras, tarjetas de
comunicacin, etc
De software:
Activadas
invocando
directamente
el
ensamblador y el nmero de interrupcin.
De excepcin: i.e. Divisin por cero
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
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);
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
poner_tenedores(
comprobar(int i)
int i) {
nt i) {
{
P(exmut);
if (estado[i] ==
P(exmut);
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 posiciones
del vector que contiene el semforos de los
palillos?
exmut=1
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
Cdigo subida
Cdigo bajada
P(exmut_b);
P(exmut_s);
contadorbajada++;/*Suma
contadorsubida++; /*Suma
uno */
1 */
if (contadorbajada==1)
if (contadorsubida==1)
P(puente);
P(puente);
V(exmut_b);
V(exmut_s);
.. Se baja el puente ..
.. Se sube el puente ..
P(exmut_b);
contadorbajada--;
P(exmut_s);
if (contadorbajada==0)
contadorsubida--;
V(puente);
if (contadorsubida==0)
V(exmut_b);
V(puente);
V(exmut_s);
Ejemplos
Productor:
Consumidor:
int mensaje1[1000];
while (1) {
--Preparamos el mensaje1-enviar(mensaje1, buzn);
}
int mensaje2[1000];
while (1) {
recibir(mensaje2, buzn);
--Procesamos el mensaje2-}
Cliente:
char resp[1000];
envia("leer vax", buzon1);
recibir (resp, buzon2);
Servidor:
char orden[1000;
char resp[1000];
recibir (orden, buzon1);
enviar (resp, buzon2);
Muchas
Las