Teoría de Sistemas Operativos

Preview:

DESCRIPTION

Teoría de Sistemas Operativos. Departamento de Electrónica 2º Semestre, 2002 Gabriel Astudillo Muñoz gabriel.astudillo@elo.utfsm.cl http://www.elo.utfsm.cl/~elo321. Problemas clásicos de IPC. Dos procesos comparten un buffer de tamaño definido (N). Buffer. Filósofos. Productor. - PowerPoint PPT Presentation

Citation preview

Teoría de Sistemas Operativos

Departamento de Electrónica2º Semestre, 2002

Gabriel Astudillo Muñozgabriel.astudillo@elo.utfsm.cl

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 ...

Recommended