Registro de estudio de principios del sistema operativo para estudiantes universitarios
registro de aprendizaje cubeta familiar
Capítulo 6 Sincronización de procesos
6.1 Condiciones de carrera y tramos críticos
6.1.1 Condiciones de carrera
Las formas efectivas de prevenir las condiciones de carrera incluyen: sincronización y exclusión mutua
6.1.2 Secciones críticas
Un recurso que solo permite el uso de un proceso a la vez se denomina recurso crítico, recurso mutuamente excluyente, recurso exclusivo o variable compartida.
Un recurso que puede ser utilizado por más de un proceso a la vez se denomina recurso compartido.
Sección crítica: es una sección de código que involucra recursos críticos
Algunas notas:
-
Una sección crítica es un fragmento de código.
-
Una sección crítica es el código dentro de un proceso.
-
Cada proceso tiene una o más secciones críticas.
6.1.3 Directrices para el uso de secciones críticas
Exclusión mutua:
- Asumiendo que un proceso
P1
se ejecuta en una sección crítica, otros procesos serán excluidos de esta sección crítica - Las secciones críticas con el mismo recurso crítico deben ser mutuamente excluyentes
- No se permite que las secciones críticas sin el mismo recurso crítico sean mutuamente excluyentes
Disponible para ceder:
- No hay ejecución de procesos en la sección crítica, y el tiempo de espera para que el siguiente proceso ingrese a la sección crítica no puede extenderse indefinidamente.
- Es decir, cuando otros procesos quieran entrar, que entren.
Espera limitada:
- Cada proceso debe tener una cantidad finita de tiempo de espera antes de ingresar a una sección crítica
- no puedo esperar para siempre
Deja que la derecha espere:
- Cuando un proceso quiere ingresar a la sección crítica y descubre que no puede ingresar, debe liberar activamente el control de la CPU y dejar que otros procesos ocupen el control de la CPU.
- Correr se convierte en estado de espera
Acceso a los trámites de la sección crítica
- Implementación de criterios de exclusión mutua en zonas de entrada
- Implementación de criterios free-to-go en la zona de salida
- Cada sección crítica no puede ser demasiado grande para lograr el criterio de espera limitada
Dos procesos P0 P1
, solo algoritmos para dos procesos
do {
flag[i] = true;
turn = j;
while (flag[j] and turn == j);
critical section;
flag[i] = false;
remainder section;
}while(1);
6.2 Semáforo (importante)
6.2.1 Significado físico del semáforo
Asegúrese de que dos o más segmentos de código no se llamen simultáneamente
Antes de ingresar al segmento de código crítico, el proceso debe obtener un semáforo, de lo contrario no puede ejecutarse
Después de ejecutar el segmento del código clave, se debe liberar el semáforo
El semáforo tiene un valor, si es positivo significa que está libre, y si es negativo significa que está ocupado
S>0: hay S recursos disponibles
S=0: no hay recursos disponibles
S<0: entonces |S| indica el número de procesos en la cola de espera S
P(S): Solicitar un recurso
V(S): Liberar un recurso
Valor inicial del semáforo de exclusión mutua: generalmente 1
Valor inicial del semáforo síncrono: 0-N
6.2.2 Semáforos enteros
Semáforo S - variable entera
Proporciona dos [operaciones atómicas] inseparables para acceder al semáforo
wait (S):
while S <= 0 do no-op;
S--;
signal(S):
S++;
Espera(S) también conocido como P(S)
Señal(S) también conocida como V(S)
Problemas con semáforos enteros: espera ocupada
6.2.3 Semáforos grabados
Eliminar el semáforo de espera ocupada
记录型信号量定义:
typedef struct {
int value;
struct process *list;
} semaphore
Wait(semaphore *S)
{
S->value--;
if (S->value < 0) {
add this process to list S->list;
block(); //阻塞自身
}
}
Signal(semaphore *S) {
S->value++;
if (S->value <= 0) {
remove a process P from list S->list;
wakeup(P); //唤醒的是其他进程,P变为ready状态
}
}
El uso del semáforo S:
- S debe configurarse una vez y el valor inicial solo puede configurarse una vez
- El valor inicial de S no puede ser negativo
- Excepto para la inicialización, solo se puede acceder a S realizando operaciones P, V
6.2.4 Semáforos mutex
El semáforo binario también se llama semáforo de exclusión mutua, el semáforo S solo puede tomar 1 o 0
Semaphore *S;
S.value = 1; 全局变量,可以先这么理解
wait(S);
CritiaclSection() //临界区
signal();
6.2.5 Semáforos síncronos
Darse cuenta de varios problemas de sincronización y dispersarlos en diferentes procesos Cómo obtener el valor del problema de valor inicial de S también requiere observación y pensamiento
Ejemplo: P1
y P2
debe ejecutarse C1
antesC2
semaphore s = 0
P1:
C1:
signal(s); //运行完了之后要告诉 C1,我运行完了
P2:
wait(s); //因为一开始 S 为0,如果C1不执行,C2就会阻塞
C2; //判断C1有没有运行
6.2.6 Pequeño ejemplo
Los estudiantes en dos grupos AB pueden turnarse para lanzar la pelota, cómo lograr
Aplicar para múltiples semáforos, cruzarse entre sí
semaphore s1 = 0;
semaphore s2 = 1;
A :
while(1) {
wait(S2);
C1:投球
signal(S1);
}
B:
while(1) {
wait(S1);
C2:投球
signal(S2);
}
problema del conductor
Cuál es el problema de sincronización entre ellos:
Cierre la puerta para arrancar el vehículo, cierre la puerta primero y luego arranque
Espera() P
Señal() V
semapheore s1 = 0
s2 = 0
司机:
P(s1)
C2: 启动车辆
正常行驶
C3: 到站停车
V(s2)
售票员:
C1: 关门
V(s1)
售票
P(s2)
C4: 开门
6.3 Problema de sincronización clásico
6.3.1 Problema productor-consumidor
problema de búfer limitado compartido
La operación de sincronización de espera precede a la operación de sincronización de mutex
Descripción del problema
Productores (M): producir productos y ponerlos en el búfer
Consumidores (N): Toma el consumo del producto del búfer
Pregunta: ¿Cómo lograr la sincronización y la exclusión mutua entre productores y consumidores?
proceso de analisis de problemas
Proceso de producción del productor: producir un producto y ponerlo en el búfer
El proceso de consumo del consumidor: tomar un producto del búfer y consumir el producto
Análisis de problemas de exclusión mutua:
Los problemas de exclusión mutua a menudo se generan entre el mismo proceso y la operación de exclusión mutua se realiza en la sección crítica.
Cómo encontrar el área crítica, primero debemos encontrar los recursos críticos, los recursos críticos a menudo son operaciones realizadas por una clase de procesos, pero limitan el rango de operaciones que solo puede realizar un proceso a la vez.
En este problema, el recurso crítico del productor es poner en el búfer, y el recurso crítico del consumidor es sacar el producto del búfer.
Análisis del problema de sincronización:
Los problemas de sincronización suelen ocurrir entre diferentes tipos de procesos, generalmente , cuando un proceso de este tipo realiza la operación P y S disminuye, otro tipo de proceso necesita realizar la operación V para agregar este semáforo para mantener el equilibrio.
Las partes que necesitan coordinación entre los dos:
- Productor: coloque el producto en el búfer especificado (código clave C1)
- Consumidor: Tomar un producto del búfer lleno (código clave C2)
Solución
Problema de deformación:
- El búfer tiene un solo tamaño.
- Muchos productores diferentes, un consumidor (hay un ensamblador que ensambla productos. El productor 1 produce una parte, el productor 2 produce un producto 2, el productor 3 produce 3 y luego ensambla un producto
- Un productor, múltiples consumidores diferentes (correspondiente al padre que pone la fruta en el plato, hay naranjas, la hija se las come y el hijo se come las manzanas)
- Varios procesos S envían mensajes, S1 y S2 envían mensajes para que los reciba C1; S3 y S4 envían mensajes para que los reciba C2
6.3.2 El problema lector-escritor
Descripción del problema
Solución
Ponga el semáforo W a 1, como un semáforo mutuamente excluyente, que actúa sobre el hecho de que el escritor no puede escribir y leer y escribir al mismo tiempo
Para problemas que pueden ser leídos por múltiples lectores al mismo tiempo, configure un semáforo M, y el valor inicial del contador cnt es 0
6.3.3 El problema de los filósofos comedores
Si se analiza de acuerdo con el método general, habrá un problema de punto muerto, es decir, dos filósofos adyacentes han elegido los palillos de su izquierda, por lo que algunos filósofos no pueden obtener los palillos de la derecha porque son utilizados por otros filósofos. , esto eventualmente conducirá a un punto muerto.
Descripción del problema
5 filósofos,
5 palillos
Cada filósofo tiene un palillo a la izquierda y a la derecha
Cada filósofo solo puede comer con dos palillos a la izquierda y a la derecha
Medidas para evitar el estancamiento
Método 1: Solo cuatro filósofos pueden sentarse en una mesa y comer
Método 2: Recoja los palillos solo cuando los palillos izquierdo y derecho del filósofo estén disponibles
Método 3: Numere a todos los filósofos Los filósofos con números impares solo pueden recoger los palillos de la izquierda primero, y viceversa para los números pares.
método uno
Método dos
trabajo de la unidad MOOC
1. ¿Qué es una sección crítica? ¿Qué pautas se deben seguir para el acceso a las secciones críticas?
sección crítica:
La pieza de código que accede a los recursos críticos.
Pautas:
-
Exclusión mutua, si un proceso se ejecuta en una sección crítica, otros procesos serán excluidos de la sección crítica, las secciones críticas con los mismos recursos críticos necesitan exclusión mutua, las secciones críticas sin los mismos recursos críticos no necesitan exclusión mutua.
-
Si hay tiempo para ceder, no hay ejecución del proceso en el área crítica.Un proceso que solicita ingresar al área crítica debe poder ingresar a su propia área crítica de inmediato para utilizar los recursos críticos de manera efectiva.
-
Espera limitada, el tiempo de espera antes de que cada proceso ingrese a la sección crítica debe ser limitado, para no caer en el estado de "espera muerta".
2. Hable sobre el significado del valor del semáforo síncrono.
Cuando el valor del semáforo síncrono es mayor a 0, significa que no se utiliza la cantidad de este recurso, o la cantidad liberada puede destinarse al proceso que solicita usar este recurso.
Cuando el valor del semáforo síncrono es igual a 0, significa que este recurso se ha asignado o no se ha liberado, si hay un proceso que solicita este recurso ahora, debe esperar.
Cuando el valor del semáforo síncrono es menor a 0, indica que no se ha obtenido el recurso solicitado y se está esperando el número de este recurso.
3. Hay cuatro procesos S1、R1、R2
y R3
, entre ellos, S1
enviar mensajes al búfer BUFF R1、R2
y R3
recibir mensajes del búfer. Las reglas para enviar y recibir son las siguientes:
(1) El búfer BUFF solo puede almacenar un mensaje a la vez;
(2) R1、R2
Cada mensaje almacenado en el búfer R3
puede recuperarse; (3) Cada mensaje almacenado en el búfer debe solo se borrará después de ser recibido por ambos . Utilice el mecanismo de semáforo para realizar la sincronización entre estos 4 procesos.S1
R1、R2
R3
信号量初值 S1 = 1 R1 = 0 R2 = 0 R3 = 0 MUTEX = 1
int count = 0;
S1{
R1{
R2{
R3{
P(S1); P(R1); P(R2); P(R3);
Send message; Get message; Get message; Get message;
P(MUTEX); P(MUTEX); P(MUTEX); P(MUTEX);
V(R1); count += 1; count += 1; count += 1;
V(R2); if count == 3 if count == 3 if count==3
V(R3); V(S1); V(S1); V(S1);
V(MUTEX); V(MUTEX); V(MUTEX); V(MUTEX);
} } } }
4. Hay un plato de frutas vacío en la mesa, y solo se puede colocar una fruta en el plato a la vez. Papá pone manzanas en el plato, mamá pone naranjas en el plato, un hijo espera para comer las naranjas en el plato y una hija espera para comer las manzanas en el plato. Se fija que el padre o la madre puede poner una fruta en el plato cada vez que el plato esté vacío, y solo cuando el plato tiene la fruta que necesita, el hijo o la hija puede sacarla. Utilice PV
operaciones para sincronizar los cuatro procesos de padre, madre, hijo e hija.
信号量 Plate = 1 Orange = 0 Apple = 0
Dad{
Mum{
Son{
Daughter{
while(true){
while(true){
while(true){
while(true){
P(Plate); P(Plate); P(Orange); P(Apple);
put apple; put orange; take the orange; take the apple;
V(Apple); V(Orange); V(Plate); V(Plate);
} } eat the orange; eat the apple;
} }
} } } }
Ejercicios de gestión de procesos
Hay un almacén que puede contener dos tipos de artículos A y B,
设有两个信号量 a = N b = M
En la línea de producción de bicicletas, tres trabajadores realizan sus funciones. Escriba las preguntas de gestión.
Cierto puente es tan angosto que solo puede pasar un carro, de sur a norte, si un lado no tiene carros, el otro lado puede pasar continuamente.
Si ambos lados tienen autos esperando, pase alternativamente. Configure cada vehículo como un proceso y diseñe semáforos para realizar una gestión síncrona