sistemas operativos - department of computer scienceso-grado/so-procesos-conc.pdf · sistemas...

Post on 11-Jun-2020

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Sistemas Operativos

Pedro Cabalar

Depto. de ComputaciónUniversidade da Coruña

TEMA III. PROCESOS. Concurrencia

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 1 / 10

Ejemplo: spooler de impresora

Spool: Simultaneous Peripheral Operations On-Line. El demoniode impresión consulta el spooler y va imprimiendo los ficheros.

out = siguiente a imprimir; in = siguiente slot libre. Se guardan,p.ej., en un fichero.

Entran 2 procesos A y B y ambos quieren imprimir casi a la vez

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 2 / 10

Ejemplo: spooler de impresora

Spool: Simultaneous Peripheral Operations On-Line. El demoniode impresión consulta el spooler y va imprimiendo los ficheros.

out = siguiente a imprimir; in = siguiente slot libre. Se guardan,p.ej., en un fichero.

Entran 2 procesos A y B y ambos quieren imprimir casi a la vez

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 2 / 10

Ejemplo: spooler de impresora

Podría darse lo siguiente:

time Process A Process B0 regA:=in (regA=7)1 regB:=in (regB=7)2 spooler[regB]:=

“fileB.txt”3 in:=regB+1 (in=8)4 spooler[regA]:=

“fileA.txt”5 in:=regA+1 (in=8)

Error: la orden de impresión de “fileB.txt” se ha perdido. Eldemonio de impresión sólo encontrará “fileA.txt” enspooler[7].

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 3 / 10

Ejemplo: spooler de impresora

Podría darse lo siguiente:

time Process A Process B0 regA:=in (regA=7)1 regB:=in (regB=7)2 spooler[regB]:=

“fileB.txt”3 in:=regB+1 (in=8)4 spooler[regA]:=

“fileA.txt”5 in:=regA+1 (in=8)

Error: la orden de impresión de “fileB.txt” se ha perdido. Eldemonio de impresión sólo encontrará “fileA.txt” enspooler[7].

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 3 / 10

Race conditions

Hay incoherencia en los valores compartidos. A no sabe que Bcambió in := 8 y aún cree regA = 7 = in (incorrecto)

A este tipo de situaciones las llamamos race conditions(“condiciones de carrera”): el resultado final depende del orden deentrelazado de procesos.

Se dan sólo cuando hay recursos compartidos (las variables in,out y el spooler ).

Depurar errores en esta situación es muy complejo. La situaciónde error puede ser infrecuente, pero posible (ver model checkingen VVS, itinerarios Computación e Ingeniería SW)

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 4 / 10

Race conditions

Hay incoherencia en los valores compartidos. A no sabe que Bcambió in := 8 y aún cree regA = 7 = in (incorrecto)

A este tipo de situaciones las llamamos race conditions(“condiciones de carrera”): el resultado final depende del orden deentrelazado de procesos.

Se dan sólo cuando hay recursos compartidos (las variables in,out y el spooler ).

Depurar errores en esta situación es muy complejo. La situaciónde error puede ser infrecuente, pero posible (ver model checkingen VVS, itinerarios Computación e Ingeniería SW)

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 4 / 10

Race conditions

Hay incoherencia en los valores compartidos. A no sabe que Bcambió in := 8 y aún cree regA = 7 = in (incorrecto)

A este tipo de situaciones las llamamos race conditions(“condiciones de carrera”): el resultado final depende del orden deentrelazado de procesos.

Se dan sólo cuando hay recursos compartidos (las variables in,out y el spooler ).

Depurar errores en esta situación es muy complejo. La situaciónde error puede ser infrecuente, pero posible (ver model checkingen VVS, itinerarios Computación e Ingeniería SW)

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 4 / 10

Race conditions

Hay incoherencia en los valores compartidos. A no sabe que Bcambió in := 8 y aún cree regA = 7 = in (incorrecto)

A este tipo de situaciones las llamamos race conditions(“condiciones de carrera”): el resultado final depende del orden deentrelazado de procesos.

Se dan sólo cuando hay recursos compartidos (las variables in,out y el spooler ).

Depurar errores en esta situación es muy complejo. La situaciónde error puede ser infrecuente, pero posible (ver model checkingen VVS, itinerarios Computación e Ingeniería SW)

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 4 / 10

Sección crítica

¿Cómo se evitan las “carreras”?

Detectar regiones o secciones críticas: partes del código de unproceso que manipulan recursos compartidos de formasusceptible de entrar en carrera.

La solución debe garantizar:I Exclusión mutua: dos procesos no están a la vez en sus secciones

críticas

I Independencia de la velocidad o el número de procesadores

I Ningún proceso fuera de sección crítica bloquea a otros procesos

I Ningún proceso debería esperar para siempre a entrar en seccióncrítica

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 5 / 10

Sección crítica

¿Cómo se evitan las “carreras”?

Detectar regiones o secciones críticas: partes del código de unproceso que manipulan recursos compartidos de formasusceptible de entrar en carrera.

La solución debe garantizar:I Exclusión mutua: dos procesos no están a la vez en sus secciones

críticas

I Independencia de la velocidad o el número de procesadores

I Ningún proceso fuera de sección crítica bloquea a otros procesos

I Ningún proceso debería esperar para siempre a entrar en seccióncrítica

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 5 / 10

Sección crítica

¿Cómo se evitan las “carreras”?

Detectar regiones o secciones críticas: partes del código de unproceso que manipulan recursos compartidos de formasusceptible de entrar en carrera.

La solución debe garantizar:I Exclusión mutua: dos procesos no están a la vez en sus secciones

críticas

I Independencia de la velocidad o el número de procesadores

I Ningún proceso fuera de sección crítica bloquea a otros procesos

I Ningún proceso debería esperar para siempre a entrar en seccióncrítica

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 5 / 10

Atomicidad

Existen muchas soluciones (ver Concurrencia y paralelismo 2ocuatrimestre).

En la mayoría se usa atomicidad. Una secuencia de operacioneses atómica si el SO garantiza que no se cambia de procesodurante ellas. Su ejecución es indivisible.

Ejemplos de soluciones con atomicidad: : semáforos (Dijkstra1965), monitores (Hansen 1973, Hoare 1974)

La solución más habitual para procesos en UNIX es el uso desemáforos.

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 6 / 10

Atomicidad

Existen muchas soluciones (ver Concurrencia y paralelismo 2ocuatrimestre).

En la mayoría se usa atomicidad. Una secuencia de operacioneses atómica si el SO garantiza que no se cambia de procesodurante ellas. Su ejecución es indivisible.

Ejemplos de soluciones con atomicidad: : semáforos (Dijkstra1965), monitores (Hansen 1973, Hoare 1974)

La solución más habitual para procesos en UNIX es el uso desemáforos.

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 6 / 10

Atomicidad

Existen muchas soluciones (ver Concurrencia y paralelismo 2ocuatrimestre).

En la mayoría se usa atomicidad. Una secuencia de operacioneses atómica si el SO garantiza que no se cambia de procesodurante ellas. Su ejecución es indivisible.

Ejemplos de soluciones con atomicidad: : semáforos (Dijkstra1965), monitores (Hansen 1973, Hoare 1974)

La solución más habitual para procesos en UNIX es el uso desemáforos.

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 6 / 10

SemáforosUn semáforo es una variable entera sem con dos operaciones:

1 P(sem) o Wait(sem). Ejecuta de forma atómica las instrucciones:

wait until sem>0;sem--;

2 V (sem) o Signal(sem). Ejecuta simplemente:

sem++;

Un proceso bloqueado en wait until sem>0 no consumeCPU (queda en espera)

Cuando otro proceso ejecuta un Signal(sem), el SO toma algunode los que esperan por sem y lo despierta. Esto lo hace de formaatómica.

Por último, el proceso que despierta de su Wait(sem) decrementael semáforo de forma atómica.

Un semáforo binario es aquel que toma sólo valores {0,1}.

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 7 / 10

SemáforosUn semáforo es una variable entera sem con dos operaciones:

1 P(sem) o Wait(sem). Ejecuta de forma atómica las instrucciones:

wait until sem>0;sem--;

2 V (sem) o Signal(sem). Ejecuta simplemente:

sem++;

Un proceso bloqueado en wait until sem>0 no consumeCPU (queda en espera)

Cuando otro proceso ejecuta un Signal(sem), el SO toma algunode los que esperan por sem y lo despierta. Esto lo hace de formaatómica.

Por último, el proceso que despierta de su Wait(sem) decrementael semáforo de forma atómica.

Un semáforo binario es aquel que toma sólo valores {0,1}.

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 7 / 10

SemáforosUn semáforo es una variable entera sem con dos operaciones:

1 P(sem) o Wait(sem). Ejecuta de forma atómica las instrucciones:

wait until sem>0;sem--;

2 V (sem) o Signal(sem). Ejecuta simplemente:

sem++;

Un proceso bloqueado en wait until sem>0 no consumeCPU (queda en espera)

Cuando otro proceso ejecuta un Signal(sem), el SO toma algunode los que esperan por sem y lo despierta. Esto lo hace de formaatómica.

Por último, el proceso que despierta de su Wait(sem) decrementael semáforo de forma atómica.

Un semáforo binario es aquel que toma sólo valores {0,1}.

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 7 / 10

SemáforosUn semáforo es una variable entera sem con dos operaciones:

1 P(sem) o Wait(sem). Ejecuta de forma atómica las instrucciones:

wait until sem>0;sem--;

2 V (sem) o Signal(sem). Ejecuta simplemente:

sem++;

Un proceso bloqueado en wait until sem>0 no consumeCPU (queda en espera)

Cuando otro proceso ejecuta un Signal(sem), el SO toma algunode los que esperan por sem y lo despierta. Esto lo hace de formaatómica.

Por último, el proceso que despierta de su Wait(sem) decrementael semáforo de forma atómica.

Un semáforo binario es aquel que toma sólo valores {0,1}.

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 7 / 10

Solución al spooler

Declaramos un semáforo binario mutex inicializado conmutex = 1.

Cada vez que un proceso imprime, ejecuta:

void printFile(char *fname) {wait(mutex);load shared var "in" into reg;spooler[reg]=fname;write reg+1 in shared var "in";signal(mutex);

}

Cuando vaya a imprimir, el printer daemon también tendrá queacceder al spooler usando mutex

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 8 / 10

Solución al spooler

Declaramos un semáforo binario mutex inicializado conmutex = 1.

Cada vez que un proceso imprime, ejecuta:

void printFile(char *fname) {wait(mutex);load shared var "in" into reg;spooler[reg]=fname;write reg+1 in shared var "in";signal(mutex);

}

Cuando vaya a imprimir, el printer daemon también tendrá queacceder al spooler usando mutex

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 8 / 10

Llamadas UNIX: semop, semget y semctl

UNIX permite manipular un array de semáforos de forma atómica

Ejemplo de llamadas con semáforos:

/* similar a descriptor de fichero */int idgruposem;

/* Creando tres semaforos: 0,1,2 */if( (idgruposem = semget(IPC_PRIVATE, 3,

IPC_CREAT|0777))== -1 ){perror("Error al crear los semaforos");return(-1);

}

/* Valor inicial del semaforo 0 es 5 */semctl(idgruposem, 0, SETVAL, 5);

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 9 / 10

Llamadas UNIX: semop, semget y semctlvoid wait(ushort num_sem) {struct sembuf operac;operac.sem_num = num_sem;operac.sem_op = -1;operac.sem_flg = 0;semop(idgruposem, &operac, 1);

}void signal(ushort num_sem) {struct sembuf operac;operac.sem_num = num_sem;operac.sem_op = 1;operac.sem_flg = 0;semop(idgruposem, &operac, 1);

}void liberar(ushort num_sem) {semctl(idgruposem,0,IPC_RMID);

}

P. Cabalar ( Depto. de Computación Universidade da Coruña )Sistemas Operativos III. Procesos. Concurrencia 10 / 10

top related