2.1.2. La sección crítica
Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.
2.1.2. La sección crítica
Ante la posibilidad de generar resultados no coherentes e incorrectos durante la ejecución concurrente de procesos con variables compartidas, es absolutamente necesario encontrar alguna solución. Antes de hacer alguna propuesta, veamos cuál es el problema real en el funcionamiento descrito en el ejemplo
Página 14
anterior. Como hemos visto, la aparición de copias temporales y la posibilidad de que un proceso acceda al contenido de una variable compartida en cualquier instante antes de asegurarse de que todas las peticiones de modificación previas han finalizado son la causa principal de todos los males.
La actualización de una variable compartida puede ser considerada una sección crítica, es decir, una secuencia bien delimitada (con inicio y fin) de instrucciones que modifican una o más variables compartidas.
Cuando un proceso entra en una sección crítica, debe completar todas las instrucciones de dentro de la sección antes de que cualquier otro proceso pueda
acceder a la región crítica de la misma variable compartida. De esta manera, se garantiza que las variables compartidas que se modifican dentro de la sección tan sólo son modificadas por un único proceso a la vez. Esta manera de proceder se denomina acceso a la sección crítica en exclusión mutua y garantiza que hasta que un proceso no finaliza la modificación de la variable compartida ningún otro proceso pueda empezar a modificarla6.
La solución al problema del acceso en exclusión mutua a variables y dispositivos compartidos en el sistema debe cumplir los requisitos siguientes:
a) Asegurar la exclusión mutua entre los procesos a la hora de acceder al recurso compartido. b) No efectuar ningún tipo de suposición de la velocidad de los procesos ni del orden en el que se ejecutarán. c) Garantizar que si un proceso finaliza el acceso a la zona de exclusión mutua, no afectará al resto de procesos que estén interesados en acceder a la sección crítica. d) Permitir que todos los procesos que están esperando para entrar en la sección crítica puedan hacerlo en un tiempo finito (evitar la inanición, starvation).
La manera más sencilla de asegurar la exclusión mutua es no permitir la concurrencia de procesos. Pero esta solución es inaceptable. Lo que nos interesa es determinar protocolos y herramientas de acceso a las secciones críticas que cumplan los requisitos que hemos enumerado.
En la mayoría de las estrategias propuestas para garantizar la exclusión mutua, los procesos siguen el protocolo siguiente (figura 10):
-
- Petición de acceso a la sección
-
- Acceso a la sección crítica
-
- Liberar la sección crítica
Figura 10. Protocolo de entrada y salida de una región por crítica
Notas y pies de figura de la fuente
(6)Es decir, el acceso se efectúa estrictamente de manera secuencial.
Página 15
Antes de acceder a la sección crítica, todos los procesos formulan una petición de acceso; entonces:
-
Si la sección crítica está ocupada por otro proceso, esperan a que se liberen bien bloqueándose7, bien llevando a cabo una espera activa8. En esta asignatura consideraremos que los procesos en espera se bloquean y no realizan una espera activa porque, en general, ello supone una mejor utilización de los recursos del sistema operativo.
-
Cuando la sección crítica esté libre, entrará uno de los procesos en espera y cerrará el acceso a cualquier otro proceso que esté interesado en entrar. Una vez dentro, utilizará el recurso compartido y cuando lo haya utilizado, liberará la exclusión mutua para que otros procesos puedan utilizar el recurso.
En el apartado siguiente describimos los semáforos, una estrategia eficiente y fácil de utilizar que permite la exclusión mutua y que en general se utiliza para implementar otras herramientas de software de nivel más alto.
Notas y pies de figura de la fuente
(7)Durmiéndose, poniéndose en alguna cola de espera. (8)Consultando continuamente el estado del recurso hasta que se produzca un cambio de estado.
Ver fragmento extraído sin normalizar
2.1.2. La sección crítica
Ante la posibilidad de generar resultados no coherentes e incorrectos durante
la ejecución concurrente de procesos con variables compartidas, es absoluta-
mente necesario encontrar alguna solución. Antes de hacer alguna propuesta,
veamos cuál es el problema real en el funcionamiento descrito en el ejemplo
## Página 14
<!-- source-page: 14 -->
GNUFDL • PID_00214803 14 Comunicación y sincronización
anterior. Como hemos visto, la aparición de copias temporales y la posibilidad
de que un proceso acceda al contenido de una variable compartida en cual-
quier instante antes de asegurarse de que todas las peticiones de modificación
previas han finalizado son la causa principal de todos los males.
La actualización de una variable compartida puede ser considerada una
seccióncrítica, es decir, una secuencia bien delimitada (con inicio y
fin) de instrucciones que modifican una o más variables compartidas.
Cuando un proceso entra en una sección crítica, debe completar todas las ins- (6)Es decir, el acceso se efectúa es-
trucciones de dentro de la sección antes de que cualquier otro proceso pueda trictamente de manera secuencial.
acceder a la región crítica de la misma variable compartida. De esta manera, se
garantiza que las variables compartidas que se modifican dentro de la sección
tan sólo son modificadas por un único proceso a la vez. Esta manera de proce-
der se denomina accesoalaseccióncríticaenexclusiónmutua y garantiza
que hasta que un proceso no finaliza la modificación de la variable compartida
ningún otro proceso pueda empezar a modificarla6.
La solución al problema del acceso en exclusión mutua a variables y disposi-
tivos compartidos en el sistema debe cumplir los requisitos siguientes:
a) Asegurar la exclusión mutua entre los procesos a la hora de acceder al re-
curso compartido.
b) No efectuar ningún tipo de suposición de la velocidad de los procesos ni
del orden en el que se ejecutarán.
c) Garantizar que si un proceso finaliza el acceso a la zona de exclusión mutua,
no afectará al resto de procesos que estén interesados en acceder a la sección
crítica.
d) Permitir que todos los procesos que están esperando para entrar en la sec-
ción crítica puedan hacerlo en un tiempo finito (evitar la inanición, starva-
tion).
La manera más sencilla de asegurar la exclusión mutua es no permitir la con-
currencia de procesos. Pero esta solución es inaceptable. Lo que nos interesa
es determinar protocolos y herramientas de acceso a las secciones críticas que
cumplan los requisitos que hemos enumerado.
En la mayoría de las estrategias propuestas para garantizar la exclusión mutua,
los procesos siguen el protocolo siguiente (figura 10):
1. - Petición de acceso a la sección
2. - Acceso a la sección crítica
3. - Liberar la sección crítica
Figura 10. Protocolo de entrada y salida de una región por crítica
## Página 15
<!-- source-page: 15 -->
GNUFDL • PID_00214803 15 Comunicación y sincronización
Antes de acceder a la sección crítica, todos los procesos formulan una petición
de acceso; entonces:
1) Si la sección crítica está ocupada por otro proceso, esperan a que se liberen (7)Durmiéndose, poniéndose en al-
bien bloqueándose7, bien llevando a cabo una espera activa8. En esta asigna- guna cola de espera.
tura consideraremos que los procesos en espera se bloquean y no realizan una (8)Consultando continuamente el
espera activa porque, en general, ello supone una mejor utilización de los re- estado del recurso hasta que se
cursos del sistema operativo. produzca un cambio de estado.
2) Cuando la sección crítica esté libre, entrará uno de los procesos en espera
y cerrará el acceso a cualquier otro proceso que esté interesado en entrar. Una
vez dentro, utilizará el recurso compartido y cuando lo haya utilizado, liberará
la exclusión mutua para que otros procesos puedan utilizar el recurso.
En el apartado siguiente describimos los semáforos, una estrategia eficiente y
fácil de utilizar que permite la exclusión mutua y que en general se utiliza para
implementar otras herramientas de software de nivel más alto.