Concurrencia de Procesos
Concurrencia de Procesos
Concurrencia de Procesos
Dos o mas procesos, se dice que son concurrentes o paralelos, cuando se ejecutan al mismo tiempo.
Esta concurrencia puede darse en un sistema con un solo procesador (pseudo paralelismo) o en un
sistema multiprocesador (paralelismo real).
Para que la concurrencia exista entre 2 procesos, es necesario que estos tengan algún tipo de
relación. La concurrencia puede presentarse en tres contextos:
Proceso independiente: Es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos.
Un claro ejemplo de procesos independientes son los diferentes shells que se ejecutan de forma
simultánea en un sistema.
Procesos son cooperantes: Son aquellos que están diseñados para trabajar conjuntamente en
alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos. En ambos
tipos de procesos (independientes y cooperantes), puede producirse una serie de interacciones entre
ellos y pueden ser de dos tipos:
• Interacciones motivadas porque los procesos comparten o compiten por el acceso a recursos
físicos o lógicos. Por ejemplo, dos procesos independientes compiten por el acceso a disco o
para modificar una base de datos.
• • Interacción motivada porque los procesos se comunican y sincronizan entre sí para
alcanzar un objetivo común, Por ejemplo, un compilador que tiene varios procesos que
trabajan conjuntamente para obtener un solo archivo de salida.
Los elementos que se deben gestionar y diseñar a causa de la concurrencia son:
1. El sistema operativo debe ser capaz de seguir la pista de los distintos procesos activos. Esto
lo hace por medio de PCB’s (Bloque de Control de Procesos)
2. El sistema operativo debe asignar y quitar los distintos recursos a cada proceso activo. Entre
estos recursos se incluyen:
• Tiempo de procesador: Es función de la planificación.
• Memoria: La mayoría de los sistemas operativos emplean esquemas de memoria virtual.
• Archivos
• Dispositivos de E/S
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.
Competencia entre procesos por los recursos
Los procesos concurrentes entran en conflicto cuando compiten por el uso del mismo recurso, es
decir, quieren acceder a un recurso al mismo tiempo. Y la ejecución de un proceso puede influir en
el comportamiento de los procesos que compiten y el sistema operativo le asignará el recurso a uno
de ellos y el otro tendrá que esperar. Por lo que el proceso que quede esperando, se retrasará, se
bloqueara y en el peor de los casos nunca se terminará con éxito.
Exclusión Mutua
La exclusión mutua consiste en asegurar que los recursos no compartidos
sean accedidos por un único proceso a la vez.
Región Critica
Las secciones críticas o regiones críticas son fragmentos de programa que
acceden a recursos no compartidos. Si dos procesos no están nunca en sus
secciones críticas al mismo tiempo, se evita que haya conflicto entre estos por el recurso.
Requisitos para la exclusión mutua:
El uso adecuado de la concurrencia entre procesos exige la capacidad de definir secciones críticas y
hacer cumplir la exclusión mutua. Esto es fundamental para cualquier esquema de proceso
concurrente. Cualquier servicio o capacidad que dé soporte para la exclusión mutua debe cumplir
los requisitos siguientes:
1. Solo un proceso, de entre todos los que poseen secciones críticas por el mismo recurso u
objeto compartido, debe tener permiso para entrar en ella en un instante dado.
2. Un proceso que se interrumpe en una sección no crítica debe hacerlo sin estorbar a los otros
procesos.
3. Un proceso no debe poder solicitar acceso a una sección crítica para después ser demorado
indefinidamente; no puede permitirse el interbloqueo o la inanición.
4. Cuando ningún proceso está en su sección crítica, cualquier proceso que solicite entrar en la
suya debe poder hacerlo sin dilación.
5. No se pueden hacer suposiciones sobre la velocidad relativa de los procesos o su número.
6. Un proceso permanece en su sección crítica solo por un tiempo finito.
Algoritmos de Dekker
Dekker 1 var
Problema: Sincronizacion forzada. bool: P1QE = false
Alternancia estrica, los procesos lentos bool: P2QE = false
atrazan a los rapidos.
proceso 1
Program 1 repeat
var hace_cosas()
entera: turno = 1 P1QE = true
while P2QE = true do{
Proceso 1 null;
repeat }
Hace_cosas() region_critica()
while turno = 2 do{ P1QE = false
null; hace_mas_cosas()
} until fin
region_critica()
turno = 2
hace_mas_cosas()
until fin
Dekker 2 Dekker 3
Problema: Interbloqueo. ambos Problema: No garantiza la exclusion
procesos entran en un mismo estado y nunca mutua. Ambos entran al mismo tiempo a la
salen. region critica.
program 3
Program 2 var
bool: P1EA = false program 4
bool: P2EA = false var
bool: P1QE = false
proceso 1 bool: P1QE = false
repeat
hace_cosas() proceso 1
while P2EA = true do{ repeat
null; hace_cosas()
} P1QE = true
P1EA = true while P2QE = true do{
region_critica() P1QE = false
P1EA = false delay(Quantum)
hace_mas_cosas() P1QE = true
until fin }
region_critica()
Dekker 4 P1QE = false
Problema: Postergacion indefinida. Se hacer_mas_cosas()
queda esperando un evento que until fin
probablemente nunca suceda.
Dekker 5
Program 5
var
entero: turno = 1
proceso 1
repeat
hace_cosas()
P1QE = true
while p2QE = true do{
if turno = 2 then{
P1QE = false
delay(random)
P1QE = true
}
}
region_critica()
P1QE = false
turno = 2
hace_mas_cosas()
until fin
Resumen Dekker
Dekker 1
…..
While turno = 2 do {}
Region_critica()
Turno = 2
…..
Dekker 2
…..
P1QE = true
While P2QE do {}
Region_critica()
P1QE = false
….
Dekker 3
…..
While P2EA do {}
P1EA = true
Region_critica()
P1EA = false
…..
Dekker 4
P1QE = true
While P2QE do {
P1QE = false
Delay(random)
P1QE = true
}
Region_critica()
P1QE = false
…..
Dekker 5
P1QE = true
While P2QE do{
If(turno = 2){
P1QE = false
Delay(random)
P1QE = true
}
}
Region_critica()
P1QE = false
Turno = 2
Referencias