RESPUESTA: evita el que dispositivos de entrada/salida muy lentos (por ejemplo lectores de tarjetas) ralenticen el sistema, debido a que la CPU debe esperar por ellos, esto se logra sustituyéndolos por equipos más rápidos( por ejemplo unidades de cinta).
RESPUESTA: permitiendo el solapamiento entre las operaciones de CPU y de Entrada/Salida de procesos diferentes; de esta manera estarán más ocupados tanto la CPU como los equipos de Entrada/Salida.
RESPUESTA: el procesador y la memoria puesto que deberán ser compartidos entre los procesos del sistema. Para el procesador se tendrá que decidir a qué proceso y durante cuanto tiempo y para la memoria qué cantidad se asigna y asegurar la protección entre las distintas áreas asignadas.
RESPUESTA: Si no se utilizan interrupciones, los procesos para esperar por la finalización de una operación Entrada/Salida deberán entrar en un ciclo de espera activa, en cambio, el uso de las interrupciones permite el bloqueo de estos hasta que ésta finalice.
RESPUESTA: Para controlar el acaparamiento de ciertos recursos del sistema por parte de los procesos. Por ejemplo: la ejecución de un programa durante demasiado tiempo y el uso de la CPU.
RESPUESTA: Para garantizar que ciertas tareas de control sólo sean ejecutadas por el sistema operativo, por ejemplo la carga en memoria de un determinado programa, y no por programas de usuario.
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
P0
|
P0
|
P2
|
P3
|
P2
|
P0
|
P0
|
P1
|
P1
|
P1
|
P1
|
P1
|
Proceso
|
Tiempo
de retorno
|
Tiempo
de espera
|
P0
|
7
|
3
|
P1
|
11
|
6
|
P2
|
3
|
1
|
P3
|
1
|
0
|
Tiempo medio de retorno: 22/4 Tiempo medio de espera:10/4
También sería correcto el siguiente diagrama:
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
P0
|
P0
|
P0
|
P0
|
P3
|
P2
|
P2
|
P1
|
P1
|
P1
|
P1
|
P1
|
Proceso
|
Tiempo
de retorno
|
Tiempo
de espera
|
P0
|
4
|
0
|
P1
|
11
|
6
|
P2
|
5
|
3
|
P3
|
2
|
1
|
Tiempo medio de retorno: 22/4 Tiempo medio de espera: 10/4
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
P0
|
P0
|
P0
|
P1
|
P1
|
P1
|
P2
|
P2
|
P3
|
P0
|
P1
|
P1
|
Proceso
|
Tiempo
de retorno
|
Tiempo
de espera
|
P0
|
10
|
6
|
P1
|
11
|
6
|
P2
|
6
|
4
|
P3
|
6
|
5
|
Tiempo medio de retorno: 33/4 Tiempo medio de espera: 21/4
El problema es básicamente el de los lectores y escritores, pero añadiendo el límite de 20 procesos lectores. Con semáforos, se resuelve sencillamente utilizando un semáforo inicializado a 20, sobre el que hay que realizar una "P" si se quiere entrar a leer. Cada vez que un lector termina, realiza una "V" sobre el semáforo. Por lo demás la solución es la misma que se puede ver en el Silberschatz.
Con regiones críticas, se trata simplemente de añadir en la condición de entrada del lector que el número de lectores tiene que ser menor que 20.
Variables:
lectores:integer=0; -- contador de lectores cerrojo:semáforo=1; -- cerrojo para manipular "lectores" plazas_lectura:semáforo=20; -- bloqueo de lectores escribe:semáforo=1; -- bloqueo de escritoresProceso lector:
P(plazas_lectura); -- reserva plaza de lector P(cerrojo); -- esto es una sección crítica lectores:=lectores+1; -- un nuevo lector if lectores=1 -- si es el primer lector then P(escribe); -- bloquea a los escritores -- o deja bloqueados a todos los lectores V(cerrojo); -- sale de la sección crítica ... realiza la lectura ... P(cerrojo); -- otra sección crítica lectores:=lectores-1; if lectores=0 -- si es el último lector then V(escribe); -- cede el paso a los escritores V(plazas_lectura); -- cede el paso a otro lector V(cerrojo); -- sale de la sección críticaProceso escritor:
P(escribe); ... realiza la escritura ... V(escribe);
Variables:
var contador: shared integer = 0;
Proceso lector:
region contador when contador<20 do contador:=contador+1; ... realiza la lectura ... region contador do contador:=contador-1;
Proceso escritor:
region contador when contador=0 do begin ... realiza la escritura ... end;
Las variables condición y los semáforos guardan muchas semejanzas, dado que ambos son herramientas de sincronización entre procesos. También ambos ofrecen una pareja de operaciones, una bloqueante (wait) y otra para desbloquear (signal). Sin embargo, la semántica de las operaciones es bien distinta: la operación de signal de una variable condición desbloquea un proceso en espera con wait, pero si no hay nadie bloqueado, se pierde el signal; un semáforo, por el contrario, mantiene el estado de las operaciones de signal que se han realizado. En este mismo sentido, la operación de wait de una variable condición siempre es bloqueante, lo cual no ocurre con los semáforos. En definitiva, un semáforo tiene un valor (representado como un número entero), mientras que una variable tipo condición no.
Las variables condición por sí solas no son tan potentes como los semáforos, ya que no almacenan estado; si se quiere notificar un evento, hay que guardarlo en una variable global y aparecen los problemas de carrera (si se intenta construir una solución al problema de la sección crítica usando variables condición, se ve lo complicado que es). De hecho, las variables condición sólo tienen sentido dentro de una estructura mayor, como es el monitor, que es quien proporciona la exclusión mutua.
Pregunta
|
Opción
correcta
|
---|---|
1
|
b
|
2
|
b
|
3
|
d
|
4
|
c
|
5
|
b
|
6
|
a
|
7
|
c
|
8
|
d
|
9
|
a
|
10
|
b
|
11
|
d
|
12
|
d
|
13
|
c
|
14
|
c
|
15
|
b
|
16
|
b
|
17
|
a
|
18
|
d
|