Home/Nfs/Aevallcanera/Desktop/Presentacion Sistemas Operativos/Sistemas Operativos
Teoría de Sistemas Operativos
description
Transcript of Teoría de Sistemas Operativos
Teoría de Sistemas Operativos
Departamento de Electrónica2º Semestre, 2002
Gabriel Astudillo Muñ[email protected]
http://www.elo.utfsm.cl/~elo321
2
Problemas clásicos de IPCBuffer
Productor
Consumidor
Filósofos
Lectores ...
•Dos procesos comparten un buffer de tamaño definido (N)
3
Problemas clásicos de IPCBuffer
Productor
Filósofos
Lectores ...
•Dos procesos comparten un buffer de tamaño definido (N)
Escribe datos
4
Problemas clásicos de IPCBuffer
Productor
Consumidor
Filósofos
Lectores ...
•Dos procesos comparten un buffer de tamaño definido (N)
Saca datos
5
Problemas clásicos de IPCBuffer
Productor
Consumidor
Filósofos
Lectores ...
•¿Qué sucede cuando el buffer está lleno y el productor desea poner un dato?
¿?
6
Problemas clásicos de IPCBuffer
Productor
Consumidor
Filósofos
Lectores ...
•¿Qué sucede cuando el buffer está vacío y el consumidor desea sacar un dato?
¿?
7
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
•Solución
•En el primer caso ==> productor se va a dormir
•En el segundo, ==> consumidor se va a dormir
8
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
•Solución
•En el primer caso ==> productor se va a dormir
Cuando el consumidor saca un elemento,debe “despertar al productor”
9
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
•Solución
Cuando el productor coloca un elemento,debe “despertar al consumidor”
•En el segundo, ==> consumidor se va a dormir
10
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
#define N 100typedef int semaphore;
semaphore mutex = 1;semaphore empty = N; //entradas vaciassemaphore full = 0; //espacios ocupados
void productor(void){ int item; while(1){ pruduce_item(&item); wait(&empty); wait(&mutex); coloca_item(item); signal(&mutex); signal(&full); }}
void consumidor(void){ int item; while(1){ wait(&full); wait(&mutex); remove_item(item); signal(&mutex); signal(&empty); cosume_item(item); }
}
11
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
Filósofo
12
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
Tenedor
13
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
Plato de tallarines
14
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
Cada Filósofo (proceso):
Pensando Hambriento
Comiendo
15
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
Cada Filósofo (proceso):
Pensando Hambriento
Comiendo
Puedo tomarlos tenedores?
Devuelvo lostenedores
16
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
Solución:
Estado(N) : actividad de cada filósofo: AMBRIENTO COMIENDO PENSADO.
S(n) : arreglo de semáforos. Permite dormira los filósofos ambrientos si no pueden obtenerlos tenedores.
17
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
Toma_tenedor()
void toma_tenedor(int i){ down(&mutex); estado[i]=HAMBRIENTO; test(i); up(&mutex); down(&s[i]);}
Solución:
18
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
devuelve_tenedor()
void devuelve_tenedor(int i){ down(&mutex); estado[i]=PENSANDO; test[VECINO_IZQ]; test[VECINO_DER]; up(&mutex);
}
Solución:
19
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
F1
F3F4
F5 F2
test()
void test(int i){ if(estado[i]==HAMBRIENTO && estado[VECINO_IZQ]!=COMIENDO && estado[VECINO_DER]!=COMIENDO){ estado[i]=COMIENDO; up(&s[i]);
}
Solución:
20
Problemas clásicos de IPCBuffer
Filósofos
Lectores ... •Varios procesos pueden leer una base de datos.
•Si un proceso modifica la BD, ninguno de los demás procesos puede acceder a ella.
Problema
21
Problemas clásicos de IPCBuffer
Filósofos
Lectores ... •La BD es una región crítica ==>debe haber un semáforo binarioque permita realizar la exclusión.
•El primer lector realiza un wait de este semáforo y el último realiza un signal.
•Se necesita un contador de lectores.
Solución
22
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...
semaphore mutex=1;semaphre db=1;int rc=0;
void lector(void){ down(&mutex); rc++; if(rc==1) down(&db); up(&mutex); lea_base_datos(); down(&mutex); rc--; if(rc==0) up(&db); up(&mutex); use_datos(); //sección no crítica
}
Solución
23
Problemas clásicos de IPCBuffer
Filósofos
Lectores ... void escritor(void){ cree_data(); down(&db); escriba_base_datos(); up(&db);
}
Solución
24
Problemas clásicos de IPCBuffer
Filósofos
Lectores ...