Sistemas multiprogramados Comparten recursos del

Anuncio
Marisa Gil
Marisa Gil
Introducción a los Sistemas Operativos
CONCURRENCIA
Concurrencia
Sistemas multiprogramados
1. Introducción. Concurrencia y paralelismo.
2. Comunicación y sincronización.
3. Exclusión mutua y sincronización.
4. Modelos de programación.
5. Memoria Compartida.
Postulados de Dijkstra.
6. Paso de mensajes.
7. Abrazo mortal (deadlock).
Estado seguro.
Varios procesos coexisten en el mismo tiempo en el sistema.
• Comparten recursos del sistema
impresora
red
ficheros
• Participan en la realización de un trabajo
comandos con pipes
procesos padre/hijos/hermanos
Bibliografía
Silberschatz and Galvin
Sistemas Operativos. Conceptos fundamentales.
Parte I: Aspectos generales
Birrell
An Introduction to Programming with threads
Digital SRC, 1.989
Thuan Q.Pham and PanKaj K.Garg
Multithreaded Programming with Win32
Prentice-Hall, PTR, 1.999
En alabi: ~marisa/pub/concu_slides.ps o concu_slides.pdf
Introducció als Sistemes Operatius
Introducció als Sistemes Operatius
1
Marisa Gil
Marisa Gil
CONCURRENCIA
CONCURRENCIA
Comparten recursos del sistema
A
Cooperan en realizar un trabajo: filtros
$ who | wc -l
imprimir()
stdin
no se envía a la
impresora, sino
a un fichero en
disco (dispositivo compartible)
B
imprimir()
C
2
imprimir()
Introducció als Sistemes Operatius
who
stdout
wc -l
stdout
la impresora estará
imprimiendo un fichero
de modo no compartible
3
Introducció als Sistemes Operatius
4
Marisa Gil
Marisa Gil
CONCURRENCIA
CONCURRENCIA
Relación padre/hijo
padre
Relación hermanos
write(fd[1],&i, sizeof(int))
links ptro L/E acceso i-node
2
10
hijo1:
read(fd[0],&x, sizeof(int))
padre:
TFA (open table)
rw
5
hijo2:
read(fd[0],&y, sizeof(int))
T.C.
Una operación del padre (read, write, lseek...)
modificará el puntero también para el hijo,
y viceversa.
hijo
No se puede saber de antemano qué hijo leerá el “5” y qué hijo
se quedará bloqueado hasta que el padre entre otro número.
T.C.
Introducció als Sistemes Operatius
5
Introducció als Sistemes Operatius
6
Marisa Gil
Marisa Gil
CONCURRENCIA
CONCURRENCIA
Ventajas de la Programación Concurrente
Concurrencia y paralelismo
• Hay concurrencia entre varios procesos cuando existen al mismo tiempo.
PROCESOS CONCURRENTES
• Programación modular
• Considerar aisladamente cada tarea
• Hay paralelismo entre varios procesos cuando se ejecutan al mismo tiempo.
PROCESOS PARALELOS
• Aprovechar desde un programa el paralelismo (multiprocesadores).
• El paralelismo requiere un soporte físico: varios procesadores.
• La concurrencia es el caso general y el paralelismo un caso particular.
• La concurrencia (y el paralelismo) se refiere a la ejecución de código:
Hay procesos concurrentes y flujos concurrentes.
• Tratar el trabajo con E/S lenta con flujos dedicados.
• el flujo principal del programa puede seguir trabajando
• Atención a varias peticiones simultáneas (sistemas distribuidos)
• Hablaremos en general de flujos concurrentes:
Pueden ser del mismo proceso o diferentes procesos.
Pueden correr en un único procesador o varios.
Introducció als Sistemes Operatius
7
Introducció als Sistemes Operatius
8
Marisa Gil
Marisa Gil
CONCURRENCIA
CONCURRENCIA
Algunos ejemplos de concurrencia
Programación Concurrente
Master/Slave
S
Peticiones
• Avance de una tarea con múltiples puntos de ejecución.
• Cada punto de ejecución es un “thread”.
• El trabajo de cada thread “se ve” simultáneo desde el programa.
• Son parte de la misma tarea y hay puntos de encuentro
M
S
cola de
trabajos
Spooler
S
• Sincronización
• Comunicación
• La gestión de la concurrencia se hace por software
Dispositivo
Datos
Filtro
• Sistema operativo
• Librerías
• No consideramos hardware “especializado”
Pantalla
Productor/Consumidor
Introducció als Sistemes Operatius
Introducció als Sistemes Operatius
9
10
Marisa Gil
Marisa Gil
CONCURRENCIA
CONCURRENCIA
El proceso y el flujo
Librerías de flujos
• Proceso (o task): unidad de asignación de recursos:
• Se ofrece la posibilidad de cambio de contexto, entidades de flujo y primitivas de sincronización
• Se ofrece un interfaz de trabajo, pero se puede acceder a cualquier rutina
pública.
• La planificación de flujos es totalmente transparente al SO
• espacio de direcciones (registros de la MMU)
• tabla de canales (y por tanto, dispositivos asignados)
• etc....
• Flujo: unidad de ejecución
• código
• pila
• registros del procesador
• No sabe la concurrencia que hay en la librería.
• Sólo podrá haber tanto paralelismo como “procesadores virtuales”
ofrezca.
• Un bloqueo de un servicio del SO, impide la planificación de cualquier flujo.
• En UNIX cada proceso sólo puede tener un flujo:
• el concepto “proceso” engloba todo.
• Los signals permiten que el proceso sea avisado de acontecimientos.
• A través del sistema de ficheros, los procesos pueden pasarse datos.
• El espacio de direcciones es privado para cada proceso (para cada flujo).
Introducció als Sistemes Operatius
11
Introducció als Sistemes Operatius
12
Marisa Gil
Marisa Gil
CONCURRENCIA
CONCURRENCIA
EJEMPLO: Calcular concurrentemente
Comunicación y sincronización
f(x) = 2(3x + 4)
/*padre*/
f1, f2,f3
• Varios procesos o flujos que cooperan en una tarea, están relacionados
- Necesitan comunicarse:
X
main()
• pasarse datos,
• enviarse avisos
f1 = crear_fluxe(flux1, (long)0);
f2 = crear_fluxe(flux2,(long)0);
f3 = crear_fluxe(flux3,(long)0);
- Necesitan sincronizarse:
• esperar que haya cambiado un estado
• ordenar temporalmente sus acciones
No puede predecirse la velocidad de dos procesos concurrentes
/*flujo 1*/
/*flujo 3*/
/*flujo 2*/
Introducció als Sistemes Operatius
Introducció als Sistemes Operatius
13
Marisa Gil
Marisa Gil
CONCURRENCIA
CONCURRENCIA
Ejemplo: compilador y ensamblador concurrentes
var lista_de_lineas_de_texto;
Algunos conceptos básicos de la concurrencia
fichero objeto
........
process COMP
{ leer de fichero fuente
traducir de LAN a ASM
almacenar código en lineas }
process ASS
{ leer y ensamblar lineas
sucesivas }
El compilador produce código ensamblador para el ensamblador y
el ensamblador produce código objeto para el cargador.
Los dos procesos están trabajando con los mismos datos, la lista de líneas, pero ha
de garantizarse el acceso en el orden adecuado.
Introducció als Sistemes Operatius
14
15
• Nunca se puede predecir nada sobre la velocidad de los procesos.
- Condición de carrera (race condition) en el acceso a los datos.
• La exclusión mutua garantiza que no haya un cambio de condiciones desconocido.
- Sección crítica de código de acceso a los datos.
- Secuencialización en el acceso de los diferentes flujos a la S.C.
- Ejecución atómica respecto al estado.
• Diferentes modelos de programación dan diferentes soluciones a la correcta comunicación entre procesos concurrentes.
- Memoria compartida.
- Paso de mensajes.
Introducció als Sistemes Operatius
16
Marisa Gil
Marisa Gil
CONCURRENCIA
CONCURRENCIA
Modelos de programación
Memoria compartida
• Desde el punto de vista de la sincronización y comunicación entre procesos.
• Exclusión mutua
• Postulados de Dijkstra
• Secuencialización (tipos de espera)
• Protocolos
• Herramientas
• Los dos modelos básicos que existen tradicionalmente:
- Memoria compartida:
• los procesos comparten variables, y se pasan información a través de ellas
• la aplicación es la responsable de la corrección del trabajo (mutex, etc)
• es la comunicación natural entre flujos de un mismo proceso
• entre procesos, el SO ha de permitir tener una zona de memoria compartida
- Paso de mensajes:
• el SO se encarga de la comunicación
Introducció als Sistemes Operatius
17
Introducció als Sistemes Operatius
18
Marisa Gil
Marisa Gil
MEMORIA COMPARTIDA
MEMORIA COMPARTIDA
Exclusión mutua
Postulados de Dijkstra
• Trabajar con una secuencia de código que necesita ser accedida en exclusividad
- protocolo de entrada, que garantice esa exclusividad
- protocolo de salida, para avisar que la zona ha quedado libre
Requisitos para garantizar un funcionamiento correcto:
• Exclusión mutua: como máximo, hay un proceso ejecutando la sección crítica.
• Progreso: no se puede postponer indefinidamente la decisión de qué proceso entre
varios entra primero en la zona.
Protocolo de entrada
• Espera acotada: existe un límite en el tiempo de espera de un proceso desde que pide
entrar en la sección crítica hasta que puede entrar.
ZONA ACCEDIDA
EN MUTEX
• Atomicidad: se asume que las instrucciones de lenguaje máquina se ejecutan atómicamente.
Protocolo de salida
Introducció als Sistemes Operatius
19
Introducció als Sistemes Operatius
20
Marisa Gil
Marisa Gil
MEMORIA COMPARTIDA
MEMORIA COMPARTIDA
Mecanismos de espera en la entrada a la S.C.
Procolos de E/S en la sección crítica
• Pueden implementarse en hardware o en software
• El protocolo de entrada ha de ser accedido él mismo en mutex
• Espera activa: un proceso se queda esperando en un bucle de encuesta.
- Spin lock o busy waiting
- Si hay muchos candidatos, incumple los postulados de Dijkstra
• Bloqueo: un proceso que no puede entrar cede el procesador.
- El protocolo de salida se encarga del desbloqueo
- Permite seleccionar al siguiente candidato de entrada
- Coste adicional de la gestión del bloqueo/desbloqueo de flujos
• varios procesos compiten concurrentemente por la entrada
• Un monoprocesador es siempre menos restrictivo que un multiprocesador
• No hay paralelismo real
• Pueden utilizarse algoritmos más sencillos
• Peligro de pasar aplicaciones de un sistema a otro
• Puntos básicos en un monoprocesador
- inhibición de interrupciones (no siempre es necesario)
- mantener la atomicidad sin desbanque del procesador
• A nivel de hardware:
- inhibición de interrupciones
- instrucciones de lectura y modificación atómica
• Mixto a dos niveles: mantener la espera activa un tiempo y luego bloquear.
• test&set
• fetch&add, fetch&swap....
Introducció als Sistemes Operatius
21
Introducció als Sistemes Operatius
Marisa Gil
Marisa Gil
MEMORIA COMPARTIDA
SEMAFOROS
Protocolos software
Semáforos
• Algoritmos diseñados por el programador
- generalmente, recaerán en una espera activa
• Herramienta que permite la sincronización entre flujos.
• Tipo abstracto de datos (TAD) que consta de un contador y una cola.
• Operaciones sobre un semáforo:
- wait(semaforo)
- signal(semaforo)
- además: init_semaforo(semaforo, contador), crear_semaforo(...),...
• Es un mecanismo de bloqueo.
• Si es una herramienta que ofrece el SO, las operaciones son llamadas al sistema.
• Herramientas ofrecidas por el entorno de trabajo (sistema, librería, lenguaje)
- ofrecen mecanismos de bloqueo de procesos que esperan entrar
• semáforos
• monitores
• regiones críticas
Introducció als Sistemes Operatius
22
23
Introducció als Sistemes Operatius
24
Marisa Gil
Marisa Gil
SEMAFOROS
SEMAFOROS
Semáforos
Primitivas de los semáforos
typedef struct
{
cua_id cua;
int
compt;
}
semafor_t;
typedef semafor_t *sem_id;
primitiva sem_wait(sem)
si contador es menor o igual que cero entonces bloquea
contador = contador - 1
primitiva sem_signal(sem)
si contador es menor que cero entonces desbloquea
contador = contador + 1
sem_id crear_sem(int compt_ini);
int sem_signal(sem_id semafor);
int sem_wait(sem_id semafor);
int destruir_sem(sem_id semafor);
• Se realiza estas secuencias atómicamente
- Las primitivas wait y signal son ininterrumpibles
- El semáforo es un objeto accedido él mismo en exclusión mutua.
• El orden de inserción y extracción de la cola no es necesariamente FIFO
- Si no es FIFO, no cumple los postulados de Dijkstra
#define sem_ini(sem, n) sem = crear_sem(n)
#define sem_init(sem, n) sem = crear_sem(n)
Introducció als Sistemes Operatius
25
Introducció als Sistemes Operatius
Marisa Gil
Marisa Gil
SEMAFOROS
SEMAFOROS
Tipos de semáforos
26
Funcionalidades del semáforo
• Semáforos binarios
- El contador sólo puede tomar los valores 0 y 1
- Se llaman también semáforos sin memoria
Un semáforo puede utilizarse para:
• Sincronización entre procesos o flujos
• Exclusión mutua entre flujos (modelo de memoria compartida)
• Filtro
• no pueden acumular signals
• Semáforos generales
- El contador puede tomar cualquier valor positivo o negativo
• Semáforos múltiples
- Permite hacer wait o signal sobre varios semáforos a la vez
- Algunas versiones de UNIX (System V) los ofrecen
Exclusión mutua:
S=1
repeat
wait(S)
sec. crit.
signal(S)
forever;
Introducció als Sistemes Operatius
27
Introducció als Sistemes Operatius
Sincronización:
S=0
P1
P2
wait(S)
Filtro:
S=N
signal(S)
28
Marisa Gil
Marisa Gil
TEST-AND-SET
SEMAFORO
Instrucciones especiales de LM: test&set
El semáforo como herramienta de exclusión mutua
De manera atómica (sin interrupción):
A
valor que
devuelve la
función
er
• Tiene que dajar pasar como máximo a un proceso: 1 postulado
- contador inicializado a 1
• Si hay varios esperando, entra el que primero ejecute el signal: 2o postulado
- las operaciones sem_wait/sem_signal son atómicas
- signal al salir de la sección crítica
• Todo proceso acaba entrando: 3er postulado
- sólo garantizado si la cola del semáforo es FIFO
carga un “1”
Como protocolo de exclusión mutua:
A = 0;
de
while (!tas(&A)); Protocolo
entrada
SECCIÓN CRÍTICA
A = 0; Protocolo de salida
Introducció als Sistemes Operatius
29
Introducció als Sistemes Operatius
30
Marisa Gil
Marisa Gil
PASO DE MENSAJES
PASO DE MENSAJES
Paso de mensajes
Componentes de la comunicación
• La comunicación corre a cargo del sistema operativo
• llamadas al sistema
proceso A
proceso B
send to B
receive from A
• Mensaje:
- Tamaño fijo/tamaño variable
- Mensajes especiales de control o sincronización
Usuario
S.O.
comunicación a través del S.O.
• No son modelos excluyentes (memoria compartida y paso de
mensajes)
• Paradigmas de comunicación:
- Cliente/servidor
- Rendez-vous (sincronización)
- etc...
Introducció als Sistemes Operatius
31
• Canal: implementación lógica que hace el sistema para llevar los mensajes de un proceso a otro.
- a través de memoria compartida (misma máquina)
- a través de cable
- vía satélite, ...
- combinación de varios medios
Introducció als Sistemes Operatius
32
Marisa Gil
Marisa Gil
PASO DE MENSAJES
PASO DE MENSAJES
Características del canal
Tipos de comunicación (I)
• Permanente o temporal
- coste de creación/destrucción
- número máximo de objetos del isstema
• Protegido o desprotegido
- propietario del canal
- derechos de acceso
• Lógico o físico
- estructura de datos del sistema
- soporte hardware
• Con capacidad o sin capacidad
- poder mantener un número determinado de mensajes
- capacidad infinita, N o 0 (rendez-vous, hand-shake)
- comunicación síncrona/asíncrona
• FIFO o seleccionable
- mensajes con prioridad
- mensajes de control
- canales multicola
Introducció als Sistemes Operatius
• Unidireccional/Bidireccional
- número de canales entre procesos
Proceso 1
Introducció als Sistemes Operatius
33
Marisa Gil
Marisa Gil
PASO DE MENSAJES
PASO DE MENSAJES
Tipos de comunicación (II)
34
Tipos de comunicación (III)
• Directa/indirecta
- Buzones o ports
- Permisos de acceso
Proceso 1
Proceso 2
• Simétrica/asimétrica
- parte cliente/parte servidor
- comunicaciones “en igualdad”
Proceso 2
Proceso 2
servidor
send(servidor,petición)
receive(p3,mess)
receive(petición)
Proceso 3
Proceso 3
send(p2,mess)
Introducció als Sistemes Operatius
35
Introducció als Sistemes Operatius
36
Marisa Gil
PASO DE MENSAJES
Tipos de comunicación (IV)
• Síncrona/asíncrona
- garantizar la “llegada” del mensaje
• al canal del sistema
• al proceso
• al buzón
- mensajes de “reply”
- si el canal es de tamaño N, hay sincronización con la entrada en el canal
Introducció als Sistemes Operatius
37
Descargar