Sunteți pe pagina 1din 6

CONDICIN DE CARRERA

Concepto de condiciones de carrera:

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.

Esto se soluciona impidiendo que ms de un proceso acceda simultneamente a las variables


compartidas. Se soluciona garantizando la exclusin mutua.

Dos procesos intentan acceder a memoria compartida al mismo tiempo.

Concepto de exclusin mutua.

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.

Concepto de seccin crtica.

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.

No se deben hacer suposiciones en cuanto a la velocidad relativa de los procesos en


conflicto.

Ningn proceso que est fuera de su seccin crtica debe interrumpir a otro para el
acceso a la seccin crtica.

Cuando ms de un proceso desee entrar en su seccin crtica, se le debe conceder la


entrada en un tiempo finito, es decir, que nunca se le tendr esperando en un bucle que
no tenga final.

Para solucionar el problema de la exclusin mutua vamos a tener tres tipos de soluciones:

Soluciones software.

Soluciones hardware.

Soluciones aportadas por el Sistema Operativo.

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

Bloquean todo aquello que pueda interferir.

Actualizan la variable.

Desbloquean lo bloqueado al principio.

Deshabilitar interrupciones y habilitar interrupciones (pesimista).

Test and Set (Compartir y Fijar) (pesimista).

Comparar e intercambiar (optimista).

Soluciones del Sistema Operativo.


Semforos.
Semforos binarios.
Dijkstra dio en 1968 una solucin elegante y sencilla al problema de la exclusin mutua con la
introduccin del concepto de semforo binario. Esta tcnica permite resolver la mayora de los

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.

Cada vez que se solicita y obtiene un recurso, el semforo se decrementa y se incrementa


cuando se libera uno de ellos. Si la operacin de espera se ejecuta cuando el semforo tiene
un valor menor que uno, el proceso debe quedar en espera de que la ejecucin de una
operacin seal libere alguno de los recursos.

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

globales a todos los procedimientos del monitor, un conjunto de procedimientos y un bloque de


inicializacin, el cual se ejecuta una nica vez, cuando se crea el monitor.
{ nombre
{ variables globales accesibles desde todos los procedimientos
{ procedimiento A
{ procedimiento B
{
{ inicializacin (solo se ejecuta una vez)
El recurso que queremos compartir (S.C.) se declara como monitor y en l se incluyen todas las
operaciones que afecten a dicho recurso. Los procesos que usan el monitor se sitan de forma
independiente y cuando deseen usar el recurso, llamarn al procedimiento del monitor que implemente
la operacin que desea ejecutar. Para resolver la sincronizacin se utilizan dos instrucciones, wait
(bloquea siempre) y signal, y actan sobre variables condicin que son colas y adems no tienen valor.

cwait (c): suspende la ejecucin del proceso que llama bajo la condicin c. El monitor est
ahora disponible para ser usado por otros procesos.

csignal(c): reanuda la ejecucin de algn proceso suspendido despus de un cwait bajo la


misma condicin. Si hay varios procesos, se elige uno de ellos; si no hay ninguno, no hace
nada.

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.

S-ar putea să vă placă și