Documente Academic
Documente Profesional
Documente Cultură
Situaciones en las que dos o ms procesos leen o escriben en un rea de memoria compartida
y el resultado final depende de los instantes de ejecucin de cada uno.
Consiste en que un solo proceso excluye temporalmente a todos los dems para usar un
recurso compartido de forma que garantice la integridad del sistema.
Es la parte del programa con un comienzo y un final claramente marcados que generalmente
contiene la actualizacin de una o ms variables compartidas.
Para que una solucin al problema de la exclusin mutua sea vlida, se tienen que cumplir una
serie de condiciones:
o
Hay que garantizar la exclusin mutua entre los diferentes procesos a la hora de
acceder al recurso compartido. No puede haber en ningn momento dos procesos
dentro de sus respectivas secciones crticas.
Ningn proceso que est fuera de su seccin crtica debe interrumpir a otro para el
acceso a la seccin crtica.
Para solucionar el problema de la exclusin mutua vamos a tener tres tipos de soluciones:
Soluciones software.
Soluciones hardware.
Soluciones hardware.
Las soluciones hardware se dividen en dos tipos:
Optimistas.
o
Consideran que lo mas probable es que no haya conflictos, y si los hay sea en nmero
reducido, por lo que permiten cualquier acceso a la variable compartida. En caso de
conflicto, mantienen la integridad del sistema descartando las actualizaciones.
Pesimistas.
o
Actualizan la variable.
problemas de sincronizacin entre procesos y forma parte del diseo de muchos sistemas operativos y
de lenguajes de programacin concurrentes.
Un semforo binario es un indicador de condicin (S) que registra si un recurso est disponible o no.
Un semforo binario slo puede tomar dos valores: O y 1. Si, para un semforo binario. S=1 entonces
el recurso est disponible y la tarea lo puede utilizar; si S=0 el recurso no est disponible y el proceso
debe esperar.
Los semforos slo permiten tres operaciones sobre ellos:
Espera.
Seal.
Inicializar.
wait (variable)
begin
while (variable)>=0 do {esperar}
variable=variable-1
end
signal (variable)
begin
variable=variable+1
end
El wait y el signal son indivisibles y no se pueden interrumpir, es decir, no se pueden ejecutar ambas a
la vez.
Los semforos binarios los utilizaremos para recursos de una sola instancia, y para sincronizacin
binaria.
Semforos generales.
El semforo binario resulta adecuado cuando hay que proteger un recurso que pueden
compartir varios procesos, pero cuando lo que hay que proteger es un conjunto de recursos
similares, se puede usar una versin ms general del concepto de semforo que lleve la cuenta
del numero de recursos disponibles. En este caso el semforo se inicializa con el numero total
de recursos disponibles (n) y las operaciones de espera y seal se disean de modo que se
impida el acceso al recurso protegido por el semforo cuando el valor de ste es menor o igual
que cero.
Al igual que en los semforos binarios, la ejecucin de las operaciones son indivisibles, esto es,
una vez que se ha empezado la ejecucin de uno de estos procedimientos se continuar hasta
que la operacin se haya completado.
Conclusin: Son un tipo de semforos utilizados cuando tenemos varias instancias de un mismo
recurso. Este tipo de semforos se inicializa al nmero de instancias que tengamos.
Monitores.
Un monitor es una estructura formada por una cabecera que los identifica, un conjunto de variables
cwait (c): suspende la ejecucin del proceso que llama bajo la condicin c. El monitor est
ahora disponible para ser usado por otros procesos.
Las colas son un tipo de variables que son el lugar donde almacenaremos los procesos que hayan
quedado suspendidos bajo un .wait. y estn a la espera de ser "despertados".
En el caso de que dentro de un monitor un proceso se quede bloqueado con un wait por lo cual se
bloquea y no dejara ejecutarse a otro proceso, el SO despierta a otro proceso cuya ltima instruccin
haya sido un signal y adems vale la condicin que hace que se bloqueen los procesos.
Habr algunos casos en los que nos apoyemos en una variable booleana para garantizar la exclusin
mutua sobre una variable con una sola instancia. Tambin habr casos en los que utilicemos un
contador.
Mensajes.
Son una solucin del sistema operativo que nos permitirn la sincronizacin de procesos y la
comunicacin entre ambos.
Es una cadena de texto transmitida de un proceso que enva el mensaje a un receptor (proceso
receptor). Un mensaje puede tener cdigo, texto, datos,
Suelen tener dos partes:
- Cabecera (obligatoria): IdProcesoEmisor, IdProcesoReceptor, Tipo, Longitud
- Cuerpo (optativo): Informacin adicional
Tenemos dos tipos de rdenes para gestionar mensajes (para enviar y recibir):
- Enviar: send (destino, mensaje)
- Recibir: receive (origen, mensaje)
*Direccionamiento.
a) Directo. Se especifican emisor y receptor de forma explcita.
P enva a Q:
- P: send (Q, mensaje)
- Q: receive (Q, mensaje)
b) Implcito: El emisor especifica quien es el receptor, pero el receptor no especifica quin es el emisor.
c) Indirecto. En este direccionamiento los mensajes no se envan directamente al receptor, sino que se
envan a una estructura de datos denominada buzn o mailbox. Una gran ventaja de esto es que
podemos enviar a cualquier buzn cualquier mensaje. Los mensajes no tienen que ir dirigidos
especficamente a un proceso.
En este tercer caso la relacin puede ser (1-1) (un proceso enva a un solo buzn). Tambin puede
haber (n-1) donde varios procesos envan mensajes a un solo buzn o (1-n) donde un proceso enva
mensajes a muchos buzones. Este ltimo caso vale para cuando quiero comunicar una informacin a
muchos procesos.
* Propiedad de los buzones.
Tenemos dos casos:
- El proceso es el propietario. El buzn existe mientras existe el proceso y slo el propietario puede
leer datos del buzn
- El propietario del buzn es el SO. La propiedad del buzn puede transmitirse entre procesos, lo
que permite que varios procesos puedan leer.
* Sincronizacin de los mensajes.
a) Cuando enviamos:
- El proceso se bloquea hasta que el receptor reciba el mensaje (envo bloqueante)
- No se bloquea y continua haciendo operaciones (envo no bloqueante)
b) Al recibir el mensaje:
- Al mirar a ver si est el mensaje, si ya ha llegado, lo cojo y contino.
- Cuando voy a buscar el mensaje, si no ha llegado todava:
- Bloqueo el proceso, hasta que llegue el mensaje (recepcin bloqueante).
- No se bloquea el proceso (recepcin no bloqueante).
- El proceso se bloquea durante un intervalo de tiempo. Si transcurrido ese tiempo, el mensaje no
ha llegado, el proceso contina sin el mensaje.
*Casos habituales:
- Envo bloqueante- Recepcin bloqueante.
Se usa cuando la sincronizacin ha de ser muy estricta.
- Envo no bloqueante - recepcin bloqueante.
Se usa para cuando el proceso emisor no necesita que el receptor haya recibido el mensaje para
continuar. Ej: Servidor de correo.
- Envo no bloqueante - recepcin no bloqueante.