Clase
UNIDAD Nº 2: TEMAS:
4
Concurrencia. Condiciones
Administración de de competencia - Exclu-
Procesos sión mutua.
Comunicación entre Procesos
Concurrencia
El tema que vamos a estudiar a continuación es muy importante ya que es
la base fundamental para comprender el resto del capítulo.
Antes de definir el concepto de concurrencia, vamos a presentar los proce-
sos secuenciales con un ejemplo. Dados los procesos A, B y C, se dice que son
procesos secuenciales si primero se ejecuta A, cuando finaliza A, comienza la eje-
cución de B, cuando finaliza B, comienza la ejecución de C. De esta manera, los
procesos se ejecutan uno después de otro, no superponiéndose su ejecución en el
tiempo. Este concepto lo podemos ver claramente en la siguiente figura.
A B C
Ahora analizaremos el concepto de concurrencia. Dos procesos son con-
currentes si su ejecución se superpone en el tiempo. Dados dos procesos A y B, se
dice que son concurrentes si la primera instrucción de B, se ejecuta antes que fina-
lice la última instrucción de A. Este concepto lo podemos visualizar en la siguiente
figura.
Los procesos disjuntos o no interactuantes son procesos concurrentes, es
decir que su ejecución se superpone en el tiempo los cuales presentan la caracterís-
tica de trabajar cada uno sobre sus propias variables y solo comparten algún recur-
so para acceso de solo lectura. Estos procesos son independientes en el tiempo, ya
que la velocidad de ejecución de uno no afecta en lo absoluto la normal ejecución
del otro. En este caso, los procesos comparten variables, pero como su acceso a las
mismas es para lectura y no para escritura se dice que son no interactuantes, que no
se interfieren entre sí.
ISSD - Sistemas Operativos 1 Clase 4 1
Ahora bien, en la mayoría de los sistemas operativos, los procesos inter-
actúan entre sí, compartiendo recursos, como variables y dispositivos. Esto lleva a
tener procesos que son dependientes en el tiempo o interactuantes. Estos proce-
sos están relacionados entre sí, ya que comparten algún tipo de recurso y la veloci-
dad de ejecución de uno depende de la velocidad de ejecución del otro. Este tipo de
procesos trae inconvenientes para el sistema operativo, ya que se debe tratar de
evitar algo que se conoce como Condición de Competencia, la cual es una situación
que se presenta justo cuando dos o más procesos compiten por los mismos recur-
sos. Más adelante estudiaremos un gran tema de los sistemas operativos como es la
Comunicación entre procesos.
Multiprogramación y Multiprocesamiento
Existen dos conceptos muy importantes que son la Multiprogramación y el
Multiprocesamiento. Trataremos de comprender claramente cada uno de ellos.
Nosotros sabemos que en la actualidad, es posible y casi normal que un usuario
realice varias actividades simultáneamente. Así por ejemplo puede estar escribien-
do un archivo con un procesador de textos, puede estar escuchando música, acce-
diendo a una página web y enviando un e-mail a un amigo. El sistema operativo
debe tener el control de todas estas actividades. Para el sistema operativo se tradu-
cen en procesos almacenados en la memoria los cuales deben ser atendidos por el
procesador en forma alternada. A cada proceso se le asigna un tiempo de procesa-
dor y una vez vencido, el proceso pasa al estado de listo para darle lugar a otro
proceso. En este contexto y en un instante determinado se está ejecutando UN solo
proceso por vez, ya que el equipo cuenta con un único procesador. Esta técnica se
conoce como multiprogramación. En la figura 2.11. podemos ver una computado-
ra que multiprograma cuatro procesos en la memoria, cada uno con su propio flujo
de control, (su propio contador de programa) ejecutándose de manera independien-
te. En la figura se puede visualizar que si los procesos se observan durante sufi-
ciente tiempo, todos avanzaron en su ejecución, pero en un instante dado solo se
ejecuta un proceso en realizad. Esta formar de trabajar se dice que es una seudopa-
ralelismo o paralelismo simulado.
Procesos
D
B
tiempo
A Figura 2.11. Multiprogramación
Existe otra técnica denominada multiprocesamiento o paralelismo real en
la cual se presenta un verdadero paralelismo de hardware, cuando el equipo cuenta
con dos o más procesadores que comparten la misma memoria física. En este caso,
y volviendo a nuestro ejemplo, los procesos A, B, C y D que residen en la memo-
ria, pueden ser atendidos por cualquiera de los procesadores, es así que en un ins-
tante dado se puede tener como máximo tantos procesos en ejecución como proce-
ISSD - Sistemas Operativos 1 Clase 4 2
sadores tenga instalado el equipo. Esta técnica se implementa actualmente en los
servidores que requieren una alta performance.
Procesos
D
C
B
A
tiempo
Figura 2.12. Multiprocesamiento
Condición de Competencia
Hasta ahora vemos que la actividad que efectúan los procesos no parece
complicada ya que cada uno de ellos hace lo suyo pasando de estado en estado
hasta terminar. Pero en realidad existen ciertas situaciones que tenemos que anali-
zar. La concurrencia es una realidad ineludible en un ambiente multitarea ya que
los procesos son concurrentes si existen simultáneamente. Los procesos concurren-
tes pueden funcionar en forma totalmente independiente unos de otros, o pueden
ser asíncronos, lo cual significa que en ocasiones requieren cierta sincronización o
cooperación.
Comentario
En muchos casos, los procesos se reúnen para realizar tareas en conjunto, a
este tipo de relación se le llama procesos cooperativos. Para lograr la comunica-
Spooling. ción, los procesos deben sincronizarse, de no ser así pueden ocurrir problemas no
Este Concepto proviene de deseados. La sincronización es la transmisión y recepción de señales que tiene por
la sigla spool (simultaneous objeto llevar a cabo el trabajo de un grupo de procesos cooperativos. Es la coordi-
peripheral operation on- nación y cooperación de un conjunto de procesos para asegurar el compartimiento
line), utilizado en la virtuali- de recursos. La sincronización entre procesos es necesaria para prevenir y/o corre-
zación de lectoras e impreso- gir errores de sincronización debidos al acceso concurrente a recursos compartidos,
ras. tales como estructuras de datos o dispositivos de E/S.
La sincronización entre procesos también permite intercambiar señales de
tiempo (ARRANQUE/PARADA) entre procesos cooperantes para garantizar las
relaciones específicas de precedencia impuestas por el problema que se resuelve.
Sin una sincronización adecuada entre procesos, la actualización de variables com-
partidas puede inducir a errores de tiempo relacionados con la concurrencia que
son frecuencia difíciles de depurar. Una de las causas principales de este problema
es que procesos concurrentes puedan observar valores temporalmente inconsisten-
tes de una variable compartida mientras se actualizan. Una aproximación para re-
solver este problema es realizar actualizaciones de variables compartidas de mane-
ra mutuamente exclusiva. Se pueden mejorar permitiendo que a lo más un proceso
entre a la vez en la sección crítica de código en la que se actualiza una variable
compartida o estructura de datos en particular.
ISSD - Sistemas Operativos 1 Clase 4 3
A continuación analizaremos un ejemplo. Supongamos que existen dos
procesos P1 y P2 que desean utilizar la impresora y que no existe spooling.
Además los procesos, cada vez que intentan imprimir ejecutan el siguiente código:
reservar_impresora (q)
imprimir
liberar_impresora (q)
Donde q es un proceso.
El problema entonces, se reduce a cómo reservar la impresora. Si utilizan
variables comunes la función reservar_impresora, tendría la siguiente forma:
reservar_impresora(q)
while (estado_imp='ocupado');
estado_imp='ocupado';
fin_reservar_impresora;
La función liberar_impresora, tendría la siguiente forma:
liberar_impresora(q)
estado_imp='libre'
fin_liberar_impresora;
La variable común sería estado_imp y su valor inicial 'libre'. Considere el
siguiente caso: la impresora está libre, luego estado_imp='libre'. Ahora suponga
que el proceso P1 intenta utilizarla, luego ejecuta reservar_impresora. Chequea la
condición del while y verifica que la variable estado_imp tiene un valor diferente
de 'ocupado', luego no entra al ciclo y podría continuar. En ese preciso instante, se
termina su quantum de tiempo de procesador y es suspendido. Suponga que se
atiende ahora a P2, quien también intenta utilizar la impresora. Ejecuta la función
reservar_impresora, evalúa el valor de la variable estado_imp, el cual encuentra
con 'libre', luego puede continuar, cambia el valor de esta variable y comienza
escribir. En ese momento, se atiende al proceso P1 que había suspendido después
de evaluar el valor de la variable estado_imp, cambia el valor de esta y también
comienza a escribir. Los procesos estarían utilizando la impresora simultáneamente
lo cual no puede ser.
Se debe tener en cuenta además que existe un inconveniente, dado que la
utilización de una variable común genera espera activa, que ocurre cuando un pro-
ceso utiliza tiempo del procesador para chequear la ocurrencia de un evento, en
este caso que la impresora esté libre, pero este tiempo se desaprovecha puesto que
el proceso no ha avanzado en nada de su labor. Bien podría utilizarse este tiempo
para atender a un tercer proceso.
ISSD - Sistemas Operativos 1 Clase 4 4
La situación que se presenta se denomina condición de competencia. Entonces
podemos decir que una Condición de Competencia es una situación en la cual dos o
más procesos leen o escriben en lugares compartidos y el resultado depende de
quién ejecute qué y en qué momento lo realice. ¿Cómo podríamos evitarla? La
clave para evitar los problemas en ésta y otras situaciones relacionadas con la me-
moria compartida, archivos compartidos y cualquier otra cosa compartida, es de-
terminar una forma de prohibir que más de algún proceso lea o escriba en los datos
compartidos a la vez. Lo que necesitamos es la exclusión mutua la cual se puede
definir como una forma de garantizar que si un proceso utiliza una variable o ar-
chivos compartidos, los demás procesos no puedan utilizarlos.
El problema de evitar las condiciones de competencia también se puede
formular de manera abstracta. Durante cierta parte del tiempo, un proceso está ocu-
pado realizando cálculos internos y otras labores que no conducen a condiciones de
competencia. Sin embargo, en algunas ocasiones un proceso puede tener acceso a
la memoria compartida de archivos o realizando labores críticas que pueden llevar
a conflictos. Esa parte del programa, en la cual se tiene acceso a la memoria com-
partida se llama la Sección o Región Crítica. Aunque esta condición evita los con-
flictos, no es suficiente para que los procesos paralelos cooperen en forma correcta
y usen de modo eficaz los datos compartidos.
La exclusión mutua debe ponerse en práctica, sólo cuando los procesos
obtienen acceso a datos compartidos modificables; cuando los procesos realizan
operaciones que no entran en conflictos con otras, deben permitirse que procedan
concurrentemente. Cuando un proceso obtiene acceso a datos compartidos modifi-
cables, se dice que se encuentra en una sección crítica. Para evitar alguna clase de
problemas se debe asegurar que cuando un proceso se encuentre en una sección
crítica, los demás procesos no pueden entrar a sus propias secciones críticas. Si un
proceso se encuentra en su sección crítica, otros procesos pueden seguir ejecután-
dose fuera de sus secciones críticas. Cuando un proceso abandona su región, otro
proceso que esperaba entrar en su propia sección podrá hacerlo. El problema de la
programación concurrente está en que se cumpla la exclusión mutua. Cuando se
encuentra en una región crítica se está hablando de un estado especial que se con-
cede a un proceso. Este tiene acceso exclusivo a los datos compartidos y los demás
procesos que requieren acceso a esos datos y en ese momento deben esperar; por
esto las secciones críticas deben ejecutarse tan rápido como sea posible. Un proce-
so no se debe bloquear dentro de su propia sección crítica y estas deben codificarse
con mucho cuidado. Si un proceso de una sección crítica termina, el S.O. al realizar
su mantenimiento de terminaciones, debe liberar la exclusión mutua para que otros
procesos puedan entrar en sus regiones críticas.
Necesitamos 4 condiciones para poder obtener una buena solución:
Comentario 1. Dos procesos no deben encontrarse al mismo tiempo dentro de sus sec-
ciones críticas.
2. No se deben hacer hipótesis sobre la velocidad o el número de ciclos
UCP de la UCP
Denominación que se le da 3. Ninguno de los procesos que estén en ejecución fuera de su sección
al hardware: Unidad Central crítica puede bloquear a otros procesos
de Procesamiento.
4. Ningún proceso debe esperar eternamente para entrar a su sección
crítica
ISSD - Sistemas Operativos 1 Clase 4 5
Otra solución consiste en utilizar una variable de turno que indique a cuál
proceso le corresponde el turno para utilizar la impresora. En este caso y suponien-
do que sólo existen dos procesos, para entrar a la sección crítica se ejecutaría:
PROCESO 1
reservar_impresora(q)
while (turno!=1);
fin_reservar_impresora;
liberar_impresora(q)
turno=2;
fin_liberar_impresora;
PROCESO 2
reservar_impresora(q)
while (turno!=2);
fin_reservar_impresora;
liberar_impresora(q)
turno=1;
fin_liberar_impresora;
Además que la solución implica el uso de espera activa, no es aceptable
pues restringe el uso de la impresora al orden P1, P2, P1, P2, P1, P2, ... etc.
Estas dos soluciones iniciales, no sirven pues no respetan la exclusión mu-
tua o colocan restricciones no aceptables. El mecanismo por excelencia utilizado
para manejar la exclusión mutua son los semáforos.
Antes de continuar el estudio de las condiciones de competencia realizare-
mos una clasificación de las soluciones posibles. Básicamente existen dos grandes
grupos de soluciones los cuales se detallan a continuación:
1. Exclusión mutua CON espera ocupada
Desactivación o inhabilitación de interrupciones
Variables de bloqueo
Alternancia estricta
Solución de Peterson
Instrucción TSL (Test and Set Lock)
ISSD - Sistemas Operativos 1 Clase 4 6
2. Exclusión mutua SIN espera ocupada
Semáforos
Monitores
Mensajes
Los primeros métodos presentan el inconveniente de lo que se denomina
espera activa, lo cual desperdicia ciclos de procesador. En cambio, los métodos
como los semáforos, monitores y mensajes permiten utilizar primitivas de comuni-
cación entre procesos que hacen que los mismos se bloqueen en lugar de desperdi-
ciar tiempo de procesador, cuando no pueden ingresar a sus regiones críticas. Exis-
te un par de primitivas denominadas sleep y wakeup. Sleep es una llamada al
sistema que hace que el proceso que la invoca se bloquee, es decir, quede suspen-
dido hasta que otro proceso lo active. La llamada wakeup tiene un parámetro ,el
proceso que se debe activar cuando se invoca.
Ejercitación Práctica
Sugerencias:
Realiza la práctica suficiente para que afiances la comprensión del temario.
Deberás realizar el análisis de lo leído para responder algunas preguntas cuya res-
puesta no se encuentra textualmente en el módulo.
Se sugiere investigar en Internet
Anota las dudas que hayan surgido durante la lectura del material, si hay términos
que desconoces o procedimientos en la práctica que no comprendes consulta con tu
tutor.
Objetivos
Comprender en que consiste la Multiprogramación, Cómo se comunican los proce-
sos y los problemas que pueden presentarse.
COMUNICACION DE PROCESOS
Actividades
A-Lea la unidad y responda a las siguientes preguntas:
Cuándo dos o más procesos son concurrentes?
Defina y diferencie Multiprogramación y Multiprocesamiento.
Defina Condición de competencia.
Una situación de condición de competencia puede darse sobre una variable
local (perteneciente a un proceso)? Justifique.
Defina sección crítica.
Cuáles son lo requisitos para la exclusión mutua?
ISSD - Sistemas Operativos 1 Clase 4 7
Cual/es son las características generales de las técnicas de exclusión mutua SIN
espera ocupada.
Bibliografía
Stallings Williams (2002). “Sistemas Operativos Principios de Diseño e
Interioridades” Cuarta edición. Prentice Hall.
Tanenbaum Andrew (2003). “Sistemas Operativos Modernos” 2da.
edición. Prentice Hall.
Tanenbaum Andrew (1992). “Sistemas Operativos Modernos”. Prentice
Hall.
Serna Mónica y Allende Sandra (2003). “Apunte sobre Sistema Operativo
LINUX”. Editorial Universitas.
ISSD - Sistemas Operativos 1 Clase 4 8