Está en la página 1de 53

Procesos – Hilos y Candados


Procesos concurrentes

Recursos críticos y sección critica. 

Candados

Algoritmo de Dekker, Peterson, Round Robin. 

Soluciones por hardware al problema de exclusión 
mutua. 

Semáforos,  Mutex. 

Monitores. 

Comunicación entre procesos. 

Mensajes. 
Procesos – Hilos y Candados

Tuberías. 

Señales. 

Servicios Posix y Win32 para la coordinación entre 
procesos.
Procesos concurrentes
En  un  equipo  con  un  solo  procesador,  se 
ejecutan  procesos  en  un  instante  de  tiempo, 
dichos procesos toman un pequeño espacio del 
procesador (slice) se ejecutan y dan paso a otro 
procesos,  esto  crea  la  idea  de  que  varios 
procesos  se  están  ejecutando  en  simultaneo, 
eso se llama concurrencia.
Para la ejecución optima la concurrencia plantea 
la  exclusión  mutua  que  es    el  hecho  de  que  un 
proceso respete que otro proceso se ejecute por 
un tiempo determinado sobre el procesador.
Procesos concurrentes
Tiempo

Proceso A Proceso A

Procesos Proceso B Proceso B

Equipo con un solo procesador

En sistemas con un solo procesador podemos ver en la figura que los procesos interactuan 
en el procesador pero no varios al mismo tiempo.
Procesos concurrentes
Tiempo

Proceso A
Procesos Proceso A

Proceso C Proceso C Equipo con mas de un 


procesador

Proceso B
Procesos Proceso B

Proceso D

En sistemas con mas de un  procesador podemos observar como los procesos se 
superponen en el tiempo.
Procesos concurrentes 
regiones críticas (interbloqueo)
¿Como  podríamos  solucionar  el  problema  de  la  competencia  de 
procesos  por  el  procesador?,  una  de  las  soluciones  son  las  regiones 
críticas tratando de hacer respetar la exclusión mutua. Pero esto puede 
traer  el  problema  de  que  haya  interbloqueo  ósea  un  recurso  nunca  es 
liberado por un proceso que lo esta usando (mas adelante en deadlocks 
hablaremos de eso)
Proceso A A está en la región crítica

Región crítica

Región crítica de B
Si B trata de entrar 
Proceso B en región crítica de A
B es bloqueado
T1 T2 T3 T4
Procesos concurrentes, 
regiones críticas (inanición)
Otro problema es la inanición,hay 3 procesos A, B y C, el proceso A 
esta  usando  su  región  crítica,  antes  de  vencerse  su  tiempo  en  el 
procesador se le concede el procesador  al proceso B, esto genera un 
lazo  o  un  deadlock  y  esto  hace  que  el  proceso  C  nunca  entre  al 
procesador.

Proceso A A está en la región crítica

Región crítica
Proceso B

B también  está en la región 
crítica
Proceso c T1 T2 T3
Deadlocks o candados
Este  comportamiento  atípico  de  los  procesos  al 
manejar  recursos  (incluso  el  procesador),  puede 
provocar  lo  que  se  conoce  como  candados,  así 
como  el  interbloqueo  o  la  inanición.  A  continuación, 
ahondamos  en  candados  para  verificar  como  se 
comportan,  inicialmente  analizando  su  teoría, 
tocando  incluso  el  tema  de  grafos  y  luego  como 
evitarlos,  mediante  el  uso  de  semáforos,  mutexs, 
monitores, etc. En el laboratorio los vemos afectando 
una maquina y como solucionarlos. 
Deadlocks o candados
Definición: Un conjunto de procesos se 
encuentra en deadlock si cada proceso 
del conjunto está esperando por un 
evento que sólo puede ser producido por  
otro proceso del mismo conjunto.
Ej. Dos procesos cada uno esperando 
por el otro ya sea para:
1) Poner una bandera en verdadero o 
falso.
2) Envió de un mensaje.
3) Entrega de un recurso.
Candados

Estar en presencia de un candado implica  que en el 
tiempo de un proceso:

Nunca pueda hacer lo que esta tratando de hacer o
• Nunca tome lo que esta tratando de tener.
• Retiene lo que posee e insiste en adquirir lo que desea y
• Existe una posibilidad de que el evento pudiera suceder.
Un  caso típico de candados
Equipo A realiza una  
petición por 
escaner y este es 
bloqueado hasta que 
equipo B desbloquee  Equipo B realiza petición de 
el uso del escaner uso del escaner y le fue 
otorgada la petición.
Equipo A efectúa 
petición por 
impresora y le 
fue dada.
Equipo B realiza 
petición ahora por la 
impresora pero esta 
siendo usada por el 
equipo A, el proceso 
es bloqueado.

A este punto las dos peticiones están 
bloqueadas de forma indefinida esto es un 
candado.
Candados y recursos 
Expropiativos (Preemptable) y 
No expropiativos 
(Nonpreemtable)
Expropiativo:  Aquellos  recursos  que 
pueden  ser  extraídos  del  proceso 
propietario  sin  que  esto  afecte  a  otro 
proceso.
No­Expropiativo:  Es  un  recurso  que  no 
puede  dejar  de  ejecutarse  de  su 
propietario  actual  sin  causar  un  fallo  de 
computación.
Candados
Un  recurso  excluyente  puede  ser  resuelto 
re­alojando recursos de un lado (recurso) a 
otro.
Nuestro  enfoque  será  a  nonpreemptable 
(no­expropiativos).
Candados, petición de recursos
El  manejo  de  recursos  en  candados  es 
como sigue:
1.­ Se realiza la petición del recurso.
2.­ Se usa el recurso.
3.­ Se libera el recurso.

Dependiendo  del  sistema  operativo 


cuando  un  recurso  es  pedido,  se  libera  el 
recurso o se bloquea el recurso hasta que 
el recurso que lo esta usando es liberado.
Candados: Estrategias

Estrategias para lidiar con candados:
1. Ignorar el problema.
2. Detectar y recuperar.
3.  Evitar  candados  en  forma  dinámica  mediante 
asignación de recursos cuidadosamente.
4.  Prevenir  mediante  la  negación  de  cualquiera 
de  las  cuatro  condiciones  necesarias  para  la 
ocurrencia de un candado.
Modelado de  candados

El proceso es representado por círculos, el recurso 
por cuadros.
En (a)  El recurso R esta asignado al proceso A.
En (b) el proceso B esta solicitando el recurso S.
En  (c)  hay  una  situación  de  candado,  T  y  U  están 
asignados por siempre a D y a C.
Modelado de candados(2)
A A A B B B B

R S R S R S R S

Básicamente  el  proceso  A  esta  solicitando  dos 


recursos,  cada  recurso  es  ejecutado  hasta  que 
finaliza,  esta  forma  de  impedir  los  candados  puede 
ser lenta.
Modelado de candados (3)
A B c

R S T

En  este  esquema  podemos  ver  como  una  situación 


de candado es alcanzada siguiendo un esquema de 
recursos  asignados  a  procesos  en  una  forma 
ordenada, en el ultimo paso vemos como el proceso 
C  peticiona  el  proceso  R  creando  una  situación  de 
candado  dado  que  el  proceso  A  tiene  asignado  el 
recurso R. 
Modelado de candados (4)
A B c A B c A B c

R S T R S T R S T

A B c A B c A B c

R S T R S T R S T

Finalmente  podemos  ver  que  si  el  sistema  operativo 


selecciona bloquear uno de los procesos y bloquea el 
proceso  B,  se  puede  ejecutar  una  situación  de  no 
candado si el proceso es bloqueado hasta que  A use 
el recurso R, luego S, luego C ejecute R.
Algoritmo del avestruz

La estrategia más sencilla es el algoritmo del avestruz: tal cual 
como reacciona un avestruz cuando se siente amenazado. 
Los matemáticos consideran que es inaceptable y argumentan 
que los  interbloqueos se deben evitar a toda costa. 
Los ingenieros se interrogan sobre la frecuencia del problema, 
la frecuencia con el que el sistema puede sufrir un candado por 
otras causas y la importancia de la ocurrencia de los candados. 
Si  éstos  se  presentan  de  una  vez  cada  cinco  años,  y  los 
sistemas  se  ven  impactados  una  vez  al  mes  por  errores  en  el 
hardware, en el compilador o en el sistema operativo. 
Dos ejemplos clásicos

Se  llena  un  filesystem  por  falta  de  inodos,  la 


solución:  no  hacer  nada.  Otro  ejemplo  es  que 
se alcanza el máximo número de procesos en 
un sistema, a pesar de que se puede modifcar 
las  variables,  no  hay  una  solución 
preestablecida,  claros  ejemplos  de  solución 
por algoritmo de avestruz. 
Detectar y recuperar

El algoritmo inicia una lista en al que coloca recursos y procesos, si 
en  algún  momento  en  el  chequeo  de  esta  lista  se  detecta  un  lazo 
infinito  se  detiene  el  algoritmo  para  liberar  el  recurso  y  el  proceso 
que lo esta ejecutando.
Detectar y recuperar en una 
matriz de ejemplo

Para cumplir el algoritmo recordemos que:
Observar por un proceso desmarcado, Pi, para el cual la i­ava fila de R es menor o 
igual a A.
Si tal proceso es encontrado añadir la i­ava fila de C en A y volver al paso anterior.
Si no existe el proceso el algoritmo termina. 
Otras formas de evitar candados, 
por estados seguros e inseguros. 
Como garantizar que no se 
genere un candado

Inanición,  interbloqueo,  recursos  que 


no  son  manejados  de  forma 
satisfactoria por procesos, pueden ser 
evitados  con  una  solución  como  los 
semáforos,  para  regular  su 
comportamiento  o  un  semáforo 
binario  (mutex),  las  próximas  laminas 
hablan sobre estas soluciones.
Exclusión mutua, solución de 
software,  Dekker
La solución correcta de Dekker, se basó en trabajar con 
una  variable  externa  que  permitiera  ser  cambiada  al 
momento  de  entrar  algún  proceso  a  ejecutarse  pero 
además  el  proceso  que  trata  de  ejecutarse  podría 
verificar  el  estado  del  proceso  en  la  región  critica  hasta 
que el estado fuese cambiado.
Exclusión mutua, soluciones 
por software, Peterson
Proceso ejecutandose Proceso bloqueado

P(1) Señal (1) FALSO, turno es 
P(0) Señal (0) cierto, turno es 
colocado en (0)
colocado en (1)

P(1) Señal (1) cierto, turno es  P(0) Señal (0) falso, turno es 
colocado en (0) colocado en (1)
Exclusión mutua, soluciones 
por software, desventajas

Estos algoritmos así como algunos otros resuelven


el problema esencial pero crean tiempo ocioso del
procesador, debido al tiempo en que deben esperar
por la ejecución de algún proceso.

Es necesario considerar que de ser aplicados en


sistemas con múltiples procesadores la memoria
compartida cumple un rol impotante (que lo
discutiremos mas adelante).
Exclusión mutua, semáforos

Dos  o  mas  procesos  deben  cooperar  por 


medio  de  señales,  se  obligara  a  un 
proceso  a  detenerse  en  un  momento 
determinado  hasta  que  el  proceso  reciba 
una señal determinada.
Semáforos
Condiciones generales:

Se manejan señales para el semáforo.

Se definen dos tipos de señales con distintas repercusiones cada una:

down:  recibe  una  señal,  decrementa  el  valor  de  la  señal  en  uno  y  se 
bloquea el proceso.

up:  transmite  una  señal,  incrementa  el  de  la  señal  en  uno,  pasa  el 
proceso a la cola de listo.

Existe una cola de procesos.

Existe una cola de procesos listos y una cola de procesos bloqueados.

Si el valor del semáforo es 0 el chequeo y el cambio de la señal se hará 
de  forma atómica ósea como un todo.

Se garantiza que será ejecutado el proceso o hasta que termina o hasta 
que sea bloqueado.

Si el valor es menor a cero se bloquea el proceso.
Semáforo: Herramienta de 
sincronización
Semáforo S

variable entera S.

solo puede ser accesada mediante dos 
operaciones atómicas:

wait(S):       S:= S­1;

                    if  S < 0 then block(S);

signal(S):     S:= S+1;

                     if  S ≤ 0 then wakeup(S);


block(S) ­ provoca la suspensión del proceso que la invoca.

wakeup(S) ­ provoca que un proceso bloqueado siga con su 
ejecución.
Semáforos

Los procesos siguen una política de FIFO, 
el  proceso  que  mas  tiempo  tenga  en  la 
cola se debe liberar. La ejecución debe ser 
atómica (se ejecuta hasta que finaliza).
Productores­consumidores
El problema:
Dos  procesos  comparten  un  buffer  de 
tamaño fijo.
El productor coloca procesos en el buffer.
El consumidor los extrae.
El  problema  radica  cuando  el  productor 
quiere colocar un proceso en el buffer pero 
este  esta  full  o  el  consumidor  quiere 
extraer  un  proceso  pero  el  buffer  esta 
vacío.
Semáforo, una solución 
simulada.

http://wwwdi.ujaen.es/~lina/TemasSO/CONCURRENCIA/Produc
torConsumidor/problema_del_productor_consumidor_resuelto_c
on_semaforos.html
Mutexs

Cuando la disponibilidad de un contador en 
un  semáforo  no  es  necesario,    un  mutexs 
puede  ser  habilitado,  es  útil  en 
programación hilada, el mutex puede estar 
bloqueado o desbloqueado.
Mutex

Los  mutexes  son  buenos  para  paquetes 


hilados en el espacio de usuario.
¿Como funciona el mutex?

El mutex tiene dos estados posibles: bloqueado y 
desbloqueado,  se  usa  el  valor  0  para  representar 
desbloqueado y el valor 1 o cualquier entero para 
bloqueado.
Cuando  un  proceso  o  hilo  necesita  ser  ejecutado 
este  llama  al  procedimiento  mutex_lock,  este 
verifica si el mutex esta desbloqueado, de ser así 
el proceso es pasado a la región crítica. 
Como funciona mutex (cont)

Si el mutex esta ya bloqueado entonces el 
proceso  es  bloqueado  hasta  que  el  hilo 
termine de ejecutarse, en ese momento se 
llamara  a  mutex_unlock,  si  múltiples 
procesos  están  bloqueados  en  el  mutex 
uno  de  ellos  es  seleccionado 
aleatoriamente y ejecutado.
Consideraciones importantes 
con mutex

El  mutex  como  es  descrito  antes,  es  un 


esqueleto  de  llamadas  a  procedimientos, 
se  asume  que  al  igual  que  en  el  caso  de 
semáforos  podríamos  estar  hablando  de 
una  sola  dirección  de  memoria  para  el 
manejo de distintos procesos.
Monitores
Un  monitor  es  una  colección  de 
procedimientos,  variables  y  estructuras  de 
datos  que  son  agrupados  juntos  en  una 
especie  de  paquete  o  modulo.  Se  usa  en 
muchas  oportunidades  para  reportar  un 
error    de  sistema  operativo,  mediante  el 
uso de sus variables.
Monitores, algunas 
condiciones

Un  proceso  entra  al  monitor  invocando  uno  de  sus 


procedimientos.
Los  procesos  llaman  a  los  procedimientos  del 
monitor, dentro del monitor, pero no pueden hacerlo 
desde estructuras externas.
Solo  un  proceso  puede  estar  ejecutándose  dentro 
del  monitor,  cualquier  otro  proceso  que  invoque  el 
monitor  se  bloqueara  hasta  que  el  primer  proceso 
abandone el monitor.
Monitores, como garantizamos 
que se cumplan?

Para  garantizar  que  un  proceso  sea  bloqueado  o 


desbloqueado  en  el  momento  oportuno  se  utiliza  la 
sincronización  mediante  variables  de  condición,  las 
variables  de  condición  son  estructuras  especiales   
que  se ejecutarán mediante dos funciones:
Monitores, variables condición, 
funciones

Espera  (condición):  Suspenderá  la  ejecución  del 


proceso  llamado  bajo  condición.  El  monitor  estará 
ahora disponible para ser usado por otro proceso.
Señal  (condición):  Reanudará  la  ejecución  de  algún 
proceso  suspendido  después  de  espera  bajo 
condición.  Si  hay  varios  procesos,  elige  a  uno  de 
ellos, si no hay ninguno, no hace nada.
Monitores en líneas generales
Comunicación entre procesos

Los  procesos  se  pueden  comunicar  entre 


si  mediante  mecanismos  tales  como 
compartir  memoria,  se  siguen  reglas 
conocidas  como  protocolos  de 
comunicación, se siguen protocolos de red 
como  IP,  protocolo  de  control  de 
transmisión,  protocolos  como 
transferencias de hipertexto.
Tipos de comunicación
Síncrona: Se ejecuta en simultaneo, uno envía, el otro recibe.
Asíncrona:  Quien  envía  sigue  su    ejecución    después  de  enviar  el 
mensaje  al  receptor.  Puede  tener  un  buffer  medio  para  manejar 
respuestas.
Persistente:  El  mensaje  se  puede  encolar  y  entregarse  cuando  se 
realiza la petición del receptor.
Momentanea: El  receptor  no tiene  por que  encolar  mensajes  para su 
comunicación (Ej.: e­Mail, sockets, mpi, etc)
Directa:  Las  primitivas  enviar  y  recibir  explicitan  el  nombre  del 
proceso con el que se comunican.
Indirecta:  La  comunicación  indirecta  se  implementa  mediante 
puertos, en alguna bibliografía se lo denomina buzones. Para poder 
comunicarse los procesos deben compartir el puerto.
Simétrica: Todos los procesos pueden enviar o recibir. 
Asimétrica:  Un  proceso  puede  enviar,  los  demás  procesos  solo 
reciben.
Comunicación entre procesos

RPC:  Llamadas  a  procedimientos  remotos,  Hay  un 


cliente y un servidor.
Paso  de  parámetros:  Cada  sistema  operativo  puede 
hablar  su  propio  idioma:  Mainframe  EBCDIC,  o  PC  de 
IBM: ASCII.
Intel: little endian, Sun SPARC: big endian.
RMI: Invocación remota de métodos:
La  idea  es  tener  objetos  distribuidos.  Para  acceder  al 
estado de un objeto sólo se realiza a través de métodos 
definidos  por  un  objeto  interface.  Un  objeto  ofrece 
múltiples  interfaces.  Una  interface  puede  ser 
implementada por múltiples objetos.
Paso de mensajes

Conocido  también  como  MPI  (Message  Passing 


Interface).  No  usa  memoria  compartida. 
Dependiendo  si  es  síncrona  utiliza  dos  primitivas, 
invocadas por llamadas al sistema:
Enviar (destino, mensaje).
Recibir (fuente, mensaje).
Si es asíncrona solo utiliza Enviar (destino, mensaje)
Paso de mensajes

Puede  ser  manejado  por  acknowledge,  los  cuales 


notifican cuando es satifactoría la transmisión, si el 
ack  no  es  recibido  en  un  intervalo  de  tiempo  el 
mensaje es retransmitido,  puede darse el caso que 
el  mensaje  llegue  pero  el  acknowledge  se  pierda 
esto  se  resuelve  colocando  números  de 
secuencias, si el número de secuencias es igual el 
mensaje se descarta.
Sockets

Todo es basado en una conexión:
socket: crea una nueva comunicación.

bind: Enlaza al socket.

listen: queda a  la escucha para nuevas  conexiones.

accept: se bloque hasta que se realice una conexión

connect: Realiza petición para conexión.

send: envia datos.

receive: recibe datos.

close: cierra la conexión.

Tuberías

La  salida  de  un  proceso  esta  ligada  a  la 


entrada de otro proceso.
El tema principal esta en la herencia de la 
salida  o  resultado  de  un  proceso  por  otro 
proceso.
En sistemas multitarea todos los procesos 
se  inician  simultáneamente,  se  atenderán 
todas  las  lecturas  de  forma  simultanea 
para la salida del proceso anterior.
Se  implementa  en  algunas  oportunidades 
usando buffers.
Señales

Se  podría  afirmar  que  una  señal  es  una 


comunicación  limitada  entre  procesos,  es 
una  especie  de  notificación  asíncrona 
empleada  para  avisarle  a  un  proceso  de 
un evento, cuando se envía una señal a un 
proceso,  el  sistema  operativo  modifica  la 
ejecución del proceso.
En  unix  el  SystemCall  Kill  envía  señales 
por defecto a los procesos .
Posix y Win32
Método Provisto por (Sistema Operativo u otro ambiente )
Archivo Todos los Sistemas Operativos.
La mayoría de los Sistemas Operativos; algunos, como
Windows, solo implementan señales en las liberías de C
Señal
run-time de C y actualmente no proveen soportes paro su
uso como técnica de IPC.
Socket La mayoría de los Sistemas Operativos.
Tubería / Pipes Todos los sistemas POSIX.
Named pipe Todos los sistemas POSIX.
Semáforo Todos los sistemas POSIX.
Memoria compartida Todos los sistemas POSIX.
Mensajes Usado en el paradigma MPI, Java RMI, CORBA y otros.
Todos los sistemas POSIX. Windows también es apto para
Mapa de Memoria esta técnica, las APIs usadas son específicas de esta
plataforma.
Cola de Mensajes La mayoría de los Sistemas Operativos.
puertos Algunos Sistemas Operativos.

http://es.wikipedia.org

También podría gustarte