Compartir tecnología

OS_Sincronización y exclusión mutua

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

2024-07-04: Notas de estudio de exclusión mutua y sincronización del sistema operativo


Los procesos o programas concurrentes perderán su cierre cuando se ejecuten. Es decir, si dos programas usan un recurso compartido en áreas separadas, los resultados de cada ejecución pueden ser diferentes.
Insertar descripción de la imagen aquí
La razón es que no protegemos el recurso compartido x al que tienen acceso tanto el programa a como el programa b.


9.1 Conceptos básicos de sincronización y exclusión mutua

9.1.1 Relación de sincronización

La relación mutuamente restrictiva es la sincronización. Una comprensión simple de la sincronización es que debe haber un orden en la ejecución de los procesos.
Insertar descripción de la imagen aquí


9.1.2 Relación mutuamente excluyente

La relación que se restringe indirectamente entre sí se denomina relación mutuamente excluyente, por ejemplo, impresora.
Insertar descripción de la imagen aquí


9.1.3 Recursos críticos

  • Los recursos a los que solo se permite acceder a un proceso dentro de un período de tiempo se denominan recursos críticos (o recursos exclusivos).
  • Para compartir recursos críticos, se debe utilizar la exclusión mutua entre procesos.

"Modelo de Productor y Consumidor"
Insertar descripción de la imagen aquícontador+ +

首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

encimera- -

首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Insertar descripción de la imagen aquí

Solución: trate el contador como un recurso crítico y permita que el proceso acceda al contador variable mutuamente (aprenderá el mecanismo de sincronización más adelante)


9.1.4 Sección crítica

Ya sea que se trate de un recurso crítico de hardware o de software, varios procesos deben acceder a él mutuamente.
Insertar descripción de la imagen aquí
Estas áreas son esencialmente códigos.

  • Área de entrada
  • sección crítica
  • Área de salida
  • área restante

9.1.5 Los mecanismos de sincronización deben seguir reglas

  • Gratis para dejar entrar

Cuando no hay ningún proceso en la sección crítica, indica que los recursos de la sección crítica están inactivos. A un proceso que solicita ingresar a la sección crítica se le debe permitir ingresar inmediatamente a su propia sección crítica para utilizar los recursos de manera efectiva.

  • Si estas ocupado espera

Cuando un proceso existente ingresa a la sección crítica, indica que se está accediendo al recurso crítico. Por lo tanto, otros procesos que intentan ingresar a la sección crítica deben esperar para garantizar un acceso mutuamente excluyente al recurso crítico.

  • espera limitada

Para los procesos que requieren acceso a recursos críticos, deben asegurarse de poder ingresar a su propia sección crítica dentro de un tiempo limitado para evitar caer en un estado de "esperando a morir".

  • ceder y esperar

Cuando un proceso no puede ingresar a su propia sección crítica, el procesador (CPU) debe liberarse inmediatamente para evitar que el proceso caiga en un estado de "ocupado en espera".


9.2 Mecanismo de sincronización del software

9.2.1 Método de marca única

  • Establezca una variable entera pública para indicar si hay un proceso en la sección crítica. Si ya hay un proceso en la sección crítica, esperará a través de una verificación de bucle en el área de entrada. Después de que el proceso abandone la sección crítica, se marcará. Se modificará en la zona de salida.
  • El método de bandera única establece una variable entera pública turn para indicar el número de proceso al que se le permite ingresar a la sección crítica. Cuando turn = 0, el proceso P0 puede ingresar a la sección crítica.
  • Cuando turn=1, el proceso P1 puede ingresar a la sección crítica, y al salir de la sección crítica, el derecho a usar la sección crítica se le otorga a otro proceso (cuando Pi sale de la sección crítica, let turn=j)

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则


9.2.2 Método de primera verificación de doble marca

El método de primera verificación de doble bandera establece una bandera de matriz booleana [2] para marcar la voluntad de cada proceso de ingresar a la sección crítica. bandera [i] = verdadero significa que Pi quiere ingresar a la sección crítica.

  • Antes de que Pi ingrese a la sección crítica, primero verifique si la otra parte ha ingresado a la sección crítica. Si es así, espere.
  • De lo contrario, establezca el indicador [i] en verdadero antes de ingresar a la sección crítica
  • Cuando Pi sale de la sección crítica, establezca el indicador [i] en falso

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

  • El bucle while es equivalente al mecanismo del semáforo.
  • Establecer la bandera de la otra parte equivale a cambiar el semáforo de la otra parte.
  • Sin embargo, dado que ambos procesos verifican la bandera primero [mira primero el semáforo], y ambos son falsos [ambas luces verdes] inicialmente, es posible que los dos procesos pasen el semáforo al mismo tiempo y entren juntos a la sección crítica. .

9.2.3 Método de inspección posterior de doble marca

El método de verificación posterior de doble bandera verificará la bandera de la otra parte y luego establecerá la suya propia. Estas dos operaciones no se pueden realizar de una vez, por lo que los dos procesos pueden ingresar a la sección crítica al mismo tiempo. método de verificación posterior, primero establece mi propia bandera y luego verifica la bandera de la otra parte. Si la bandera de la otra parte es verdadera, espere; de ​​lo contrario, ingrese a la sección crítica;

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí


9.2.4 Algoritmo de Peterson

El algoritmo de Peterson combinamétodo de marca únicayMétodo de verificación posterior de doble marcaLa idea es usar flag [] para resolver el problema de acceso mutuamente excluyente y usar turn para resolver el problema del hambre.

Si ambas partes compiten para ingresar a la sección crítica, se puede permitir que el proceso le dé a la otra parte la oportunidad de ingresar a la sección crítica.
Antes de que cada proceso ingrese a la sección crítica, establece su propia bandera y establece la bandera de turno a la que se le permite ingresar. Después de eso, detecta la bandera de la otra parte y gira al mismo tiempo para garantizar que solo se permita la entrada a un proceso. Ambas partes solicitan ingresar a la sección crítica al mismo tiempo.
Insertar descripción de la imagen aquí
No renunciar al derecho a esperar.
Insertar descripción de la imagen aquí


9.3 Mecanismo de sincronización de hardware

Es difícil para el software resolver el problema de la exclusión mutua de cada proceso para que no ingrese a la sección crítica y tiene grandes limitaciones, por lo que la computadora proporciona algunas instrucciones de hardware especiales para resolver el problema.

9.3.1 Desactivar interrupciones

(1) Definición de apagar interrupciones

  • La desactivación de interrupciones se ha analizado en los principios de composición de la computadora. Se refiere a modificar un bit en el registro PSW en la CPU. Este bit controlará si la CPU actual interrumpirá en consecuencia. Esta interrupción solo puede bloquear las interrupciones enmascarables. ser detenido
  • La programación de procesos en el sistema operativo se basa en interrupciones, como las interrupciones del reloj.
  • Durante la ejecución de un proceso en la sección crítica, el sistema informático cierra las interrupciones, lo que no activará la programación y no habrá cambio de proceso o subproceso.

(2) Desventajas de desactivar las interrupciones

  • El mal uso de los terminales puede tener graves consecuencias
  • Si el tiempo de apagado es demasiado largo, afectará la eficiencia del sistema.
  • El método de desactivar las interrupciones no se aplica a sistemas con varias CPU. Desactivar las interrupciones en un procesador no impide que el proceso ejecute el mismo código crítico en otros procesadores.

9.3.2 Comando de prueba y configuración (comando TS)

Insertar descripción de la imagen aquí

La instrucción TS puede considerarse como un proceso funcional (primitivo) cuyo proceso de ejecución es indivisible.

  • El bloqueo tiene dos estados:
    • *lock=FALSE indica que el recurso es gratuito
    • *lock=TRUE indica que el recurso está siendo utilizado

Utilice TS para gestionar secciones críticas y establecer un bloqueo para cada recurso crítico.

  • El valor inicial es FALSO, lo que indica que los recursos críticos están inactivos.
  • Antes de que el proceso ingrese a la sección crítica, primero usa TS para probar el bloqueo. Si es FALSO, puede ingresar y asignar el valor VERDADERO al bloqueo, cerrando el recurso crítico.

9.3.3 Comando de intercambio

Insertar descripción de la imagen aquí
Se llama instrucción de intercambio y se utiliza para intercambiar el contenido de dos palabras.

  • Establezca un bloqueo de variable booleana global para cada recurso crítico, con un valor inicial de FALSO.
  • Utilice las instrucciones de hardware anteriores para completar el proceso de exclusión mutua
  • Sin embargo, este método también hará que el proceso de acceso se pruebe continuamente y se encuentre en un estado de "espera ocupada", lo que no cumple con el principio de "espera correcta".

9.4 Mecanismo de semáforo

9.4.1 Semáforo entero

Se define como un número entero S utilizado para representar la cantidad de recursos. Solo hay tres operaciones para este semáforo entero: inicialización (asignar un valor inicial), esperar (disminuir), señal (incrementar).
Insertar descripción de la imagen aquí

  • Tanto la espera como la señal son operaciones atómicas y no pueden interrumpirse durante la ejecución.
  • Cuando un proceso modifica un semáforo, ningún otro proceso puede modificar el semáforo al mismo tiempo.

9.4.2 Registro de semáforo

Mecanismo de sincronización de procesos sin fenómeno de "espera ocupada"

  • Además de un valor de variable entero utilizado para representar la cantidad de recursos
  • También es necesario agregar una lista vinculada de procesos L para vincular todos los procesos que esperan el recurso.

Insertar descripción de la imagen aquí

  • La operación de espera es equivalente a la operación P.
  • La operación de señal es equivalente a la operación V.
  • Sólo dos nombres diferentes, las funciones son exactamente las mismas.
  • esperar(A) = P(A)
  • señal(B) = V(A)

(1) Utilice semáforo para realizar procesos de exclusión mutua

Establezca un semáforo mutuamente excluyente mutex = 1 y luego coloque la sección crítica para que cada proceso acceda a recursos críticos entre espera (mutex) y señal (mutex)
Insertar descripción de la imagen aquí


(2) Utilice semáforos para lograr la sincronización de procesos.

Establezca un semáforo de sincronización S = 0, de modo que la señal de declaración (S) que debe ejecutarse primero y luego la espera (S)
Insertar descripción de la imagen aquí