PPT - unistmo
Download
Report
Transcript PPT - unistmo
Sistemas
Operativos
Unidad III
Administración de procesos
Administración de procesos
Procesos concurrentes
Problemas clásicos de comunicación
y sincronización
Mecanismos de comunicación y
sincronización
Paso de mensajes
Aspectos de implementación de los
mecanismos de sincronización
Procesos concurrentes
Plataformas:
Multiprogramación en un
único procesador.
Multiprocesador.
Multicomputador
(procesamiento distribuido)
Razones
Multiprogramación con un solo CPU
Compartir recursos físicos.
Compartir recursos lógicos.
Almacenar los cálculos
Modularidad
Comodidad
Multiprogramación con dos CPU’s
Procesos concurrentes (2)
Tipos de procesos concurrentes
Independientes
• Se ejecuta sin requerir la ayuda o cooperación de
otros procesos.
• Ejemplo: el shell o intérprete de mandatos.
Cooperantes
• Están diseñados para trabajar conjuntamente en
alguna actividad.
• Deben ser capaces de comunicarse entre ellos
• Ejemplo: el compilador (gcc: precompila, compila
y enlaza).
Procesos concurrentes (3)
Interacción entre procesos
Los procesos comparten o compiten por el
acceso a recursos físicos o lógicos.
• Por ejemplo dos procesos independientes pueden
competir por el acceso a disco.
• El SO debe garantizar que todos los procesos
accedan ordenadamente a los recursos.
Los procesos se comunican y sincronizan.
• Se trata de alcanzar un objetivo común
• Por ejemplo al generar código ejecutable los
procesos de compilación y ensamble deben
comunicarse y sincronizarse.
Problemas clásicos de
comunicación y sincronización
La interacción entre procesos plantea
una serie de situaciones clásicas de
comunicación y sincronización:
El problema de la sección crítica
El problema del Productor-Consumidor
El problema de los Lectores-Escritores
Comunicación Cliente-Servidor
Problemas clásicos de
comunicación y sincronización (2)
El problema de la sección crítica
Es el de mayor frecuencia cuando se ejecutan n
procesos concurrentes.
Cada uno tiene un fragmento de código: la sección
crítica.
Sólo uno de los procesos en cada instante puede
ejecutar en la sección crítica
•
Cuando un proceso está ejecutando en la sección
crítica, ningún otro puede hacerlo.
Ejemplos:
1. Generación de un PID en un sistema mutiprocesador.
2. Calcular la suma de los n primeros números naturales
de forma paralela con dos hilos.
Problemas clásicos de
comunicación y sincronización (3)
Ejemplo 1: Generación de un PID en un sistema multiprocesador
Si no existe sincronización se puede incurrir en el error de asignar el
mismo PID a dos procesos distintos
Problemas clásicos de
comunicación y sincronización (4)
Ejemplo 2: Calcular la suma de los n primeros números naturales de
forma paralela con dos hilos.
Problemas clásicos de
comunicación y sincronización (5)
Solución al problema de la sección crítica
La estructura general de cualquier mecanismo para resolver el
problema de la sección crítica es:
• Entrada en la sección crítica
• Código de la sección crítica
• Salida de la sección crítica
Los tres requisitos que debe tener cualquier solución del problema
de la sección critica son:
• Exclusión mutua
• Si un proceso está ejecutando un código de la sección crítica, ningún otro
proceso lo podrá hacer.
• Progreso
• Si ningún procesos esta ejecutando dentro de la sección crítica, la decisión
de qué proceso entra en la sección se hará sobre los procesos que desean
entrar, tal decisión debe realizarse en un tiempo finito.
• Espera acotada
• Debe haber un límite en el número de veces que se permite que los demás
procesos entren a ejecutar código de la sección crítica.
Problemas clásicos de
comunicación y sincronización (6)
Problema del productor-consumidor
Uno o más procesos, los “productores”, generan un cierto tipo
de datos que son utilizados por otros procesos, los
“consumidores”.
Es necesario un mecanismo de comunicación para que
productores y consumidores intercambien información.
Cuando el mecanismo de comunicación se llena el productor
debe dejar de producir.
Cuando el mecanismo de comunicación está vacío el lector
debe esperar a que se produzca un dato
Problemas clásicos de
comunicación y sincronización (7)
El problema de los lectores-escritores
Existe un determinado objeto que va a ser utilizado y
compartido por una serie de procesos concurrentes.
Algunos procesos solo acceden al objeto sin modificarlo y
algunos acceden para modificarlo, lo que lleva a algunas
restricciones:
• Solo se permite que un escritor tenga acceso al mismo tiempo.
• Se permite cualquier numero de lectores accediendo al mismo
tiempo.
Problemas clásicos de
comunicación y sincronización (8)
Comunicación cliente-servidor
Existen procesos llamados servidores que ofrecen una serie
de servicios a otros proceso denominados clientes.
El proceso servidor puede residir en la misma máquina o en
una máquina distinta.
Se utilizan técnicas basadas en el paso de mensajes.
Mecanismos de comunicación
y sincronización
El SO ofrece una serie de servicios que permiten a los
procesos comunicarse y sincronizarse.
Principales mecanismos de comunicación:
Archivos.
Tuberías.
Variables en memoria compartida.
Paso de mensajes.
Principales mecanismos de sincronización:
Tuberías.
Semáforos.
Mutex y variables condicionales.
Paso de mensajes.
Mecanismos de comunicación y
sincronización (2)
Archivos
Es un mecanismo que puede utilizarse para
comunicar procesos.
Presenta las siguientes ventajas:
• Permite comunicar un número potencialmente ilimitado
de proceso.
• Los servidores de archivos ofrecen servicios sencillos y
fáciles de utilizar.
También presenta una serie de inconvenientes:
• Es poco eficiente, la escritura y lectura a disco es lenta.
• Necesita de algún otro mecanismo que permita que los
procesos se sincronicen en el acceso de los datos
almacenados en el archivo.
Mecanismos de comunicación y
sincronización (3)
Tuberías
Es un mecanismo de comunicación y sincronización.
Existen dos tipos:
• Tuberías sin nombre (pipe)
• Solo el proceso que la crea y sus descendientes pueden utilizarla.
• Tuberías con nombre (FIFO)
• Para los procesos que no guardan ninguna relación de parentesco.
Conceptualmente cada proceso ve a la tubería como un
conducto con dos extremos, uno para insertar y otro para
extraer datos de la tubería.
Mecanismos de comunicación y
sincronización (4)
Comunicación bidireccional con tuberías.
Mecanismos de comunicación y
sincronización (5)
Escritura en una tubería
Introduce los datos en orden FIFO
Si tubería llena se bloquea el escritor.
Si no hay lectores se retorna el error correspondiente.
Lectura de una tubería
Recupera los datos en el orden en que se introdujeron.
Si tubería vacía se bloquea el lector.
Si la tubería almacena M bytes y se quieren leer n bytes,
entonces:
• Si M ≥ n, se recuperan n bytes
• Si M < n, se recuperan M bytes
Si no hay escritores y la tubería está vacía se retorna fin de
archivo
Ambas operaciones (escritura y lectura) son atómicas, es
decir, si dos procesos intenta acceder al mismo tiempo, uno
de ellos se bloqueará.
Mecanismos de comunicación y
sincronización (6)
Sección crítica con tuberías
La solución consiste en
crear una tubería y escribir
en ella un dato testigo.
Escrito el dato testigo, los
procesos protegen su
código de la sección crítica.
Ej:
• Leer dato de la tubería
• Código correspondiente a la
sección crítica
• Escribir el dato en la tubería
void main(void){
int fildes[2];
char c;
pipe(fildes);
write(fildes[1], &c, 1);
if( fork() == 0){
for( ; ; ){
read( fildes[0], &c, 1);
/*SECCION CRITICA*/
write( fildes[1], &c, 1);
}
}
else{
for( ; ; ){
read( fildes[0], &c, 1);
/*SECCION CRITICA*/
write( fildes[1], &c, 1);
}
}
Mecanismos de comunicación y
sincronización (7)
Productor-consumidor con
tuberías
Cuando el productor ha
elaborado un elemento lo
escribe en la tubería.
Cuando el consumidor
quiere procesar algún
elemento lo lee de la
tubería.
void main(void){
int fildes[2];
int dato_p[4];
char dato_c;
pipe(fildes);
if( fork() == 0){
for( ; ; ){
/*PRODUCIR DATO p*/
write( fildes[1], dato_p, 4*sizeof(int));
}
}
else{
for( ; ; ){
read( fildes[0], &dato_c, sizeof(int));
/*CONSUMIR DATO p*/
}
}
Mecanismos de comunicación y
sincronización (8)
Semáforos
Mecanismo de sincronización
que se utiliza generalmente
en sistemas con memoria
compartida.
wait(s)
{
Es un objeto con un valor
s = s-1;
if( s < 0 )
entero
{
Se le puede asignar un valor } /*BLOQUEAR PROCESO*/
}
inicial no negativo.
signal(s)
Se accede mediante dos
{
s = s+1;
operaciones atómicas:
if( s <= 0)
{
/*DESBLOQUEAR UN PROCESO
BLOQUEADO POR WAIT*/
}
• wait
• signal
}
Mecanismos de comunicación y
sincronización (9)
Sección crítica con semáforos
wait(s); /*Entrada a la sección crítica*/
<sección crítica>
signal(s); /*Salida de la sección crítica*/
Mecanismos de comunicación y
sincronización (10)
Productor-Consumidor con semáforos
Se usa un buffer circular compartido por ambos procesos.
Existen dos tipos de recursos: elementos y huecos. Un
semáforo por cada uno.
Productor ( ){
int posicion = 0;
for( ; ; ){
Producir un dato;
wait (huecos);
buffer[posicion] = dato;
posicion = (posicion + 1) % TAMBUFF;
signal (elementos);
}
}
Consumidor ( ){
int posicion = 0;
for( ; ; ){
wait (elementos);
dato = buffer [posicion];
posicion = (posicion + 1) % TAMBUFF;
signal (huecos);
Consumir el dato;
}
}
Mecanismos de comunicación y
sincronización (11)
Memoria compartida
Permite comunicar a procesos que se ejecutan
en la misma máquina.
Dos procesos acceden a una misma variable.
Mecanismos de comunicación y
sincronización (12)
Mutex
Son mecanismos de sincronización especiales para
hilos.
Es un semáforo binario con dos operaciones atómicas:
• lock(m) Intenta bloquear el mutex, si el mutex ya está
bloqueado el hilo se suspende.
• unlock(m) Desbloquea el mutex, si existen procesos
bloqueados en el mutex se desbloquea uno.
variables condicionales
Variables de sincronización asociadas a un mutex
Conviene ejecutarlas entre un lock y unlock
Dos operaciones atómicas
• wait Bloquea el hilo y lo expulsa del mutex
• signal Desbloquea uno o varios procesos suspendidos
en la variable condicional. El hilo que despierta compite
nuevamente por el mutex.
Mecanismos de comunicación y
sincronización (13)
Sección critica con mutex
La operación unlock debe realizarla el hilo que ejecutó el lock
lock (m);
< sección crítica >
unlock (m);
Paso de mensajes
Son especialmente útiles cuando se necesita
comunicar y sincronizar procesos que se ejecutan en
máquinas distintas.
Permiten resolver:
Exclusión mutua
Sincronización entre un proceso que recibe un
mensaje y otro que lo envía.
Comunicación entre espacios de memoria diferentes
(en la misma computadora o de una computadora a
otra)
Se tienen dos primitivas básicas:
send (destino, mensaje) envía un mensaje al
proceso destino.
receive (destino, mensaje) recibe un mensaje del
proceso destino.
Paso de mensajes (2)
Aspectos de implementación
Tamaño del mensaje
• Tamaño (fijo o variable)
Flujo de datos
• Unidireccional o bidireccional
Nombrado
• Directo
• Nombrar de forma explicita al proceso receptor o emisor
• Indirecto
• El menaje es enviado a través de colas de mensajes o puertos.
Sincronización
• Tres combinaciones habituales
• Envío y recepción bloqueante
• Envío no bloqueante y recepción bloqueante
• Envío y recepción no bloqueante
Almacenamiento
• Tiene o no tiene capacidad para almacenar mensajes.
Paso de mensajes (3)
Uso de colas y puertos para comunicación indirecta
Aspectos de implementación
de los mecanismos de
sincronización
Todo mecanismo de sincronización conlleva
un bloqueo bajo determinadas
circunstancias y se puede conseguir de dos
formas:
Espera activa
• Los procesos efectúan un ciclo continúo hasta
que pueden continuar, lo que representa un
problema en sistemas multiprogramados.
Espera pasiva
• La operación de bloqueo coloca un proceso en
una cola de espera asociada al mecanismo de
sincronización y transfiere el control al
planificador.
Aspectos de implementación de
los mecanismos de sincronización
(2)
Implementación de los mecanismos de sincronización
Aspectos de implementación de
los mecanismos de sincronización
(3)
Implementación de las espera pasiva
Operaciones para bloquear a un proceso en un semáforo
Aspectos de implementación de
los mecanismos de sincronización
(4)
Implementación de las espera pasiva
Operaciones para desbloquear a un proceso bloqueado en un semáforo