Revisión final del sistema operativo—Hora de clase 8—Sincronización de procesos (2)

1, cantidad de señal

El mecanismo del semáforo es un mecanismo poderoso que se puede utilizar para resolver problemas de exclusión mutua y sincronización. Solo se puede acceder a él mediante dos primitivas estándar esperar (S) ( operación P ) y señal (S) ( operación V ).
Nota: El lenguaje primitivo es un segmento de programa especial, su ejecución solo se puede realizar de una vez y no se puede interrumpir, y el lenguaje primitivo se realiza mediante el comando interrupt- off/interrupt-on .
1) Semáforo de modelado
El semáforo de modelado se define como un número entero S utilizado para representar el número de recursos, las operaciones de espera y señal se pueden describir como:

wait(S){
    
    
while(S<=0);

/*注意:怎么理解这里,当资源数小于0时,就一直测试检测,所以会处于忙等
待情况,不是让权等待。*/

S=S-1;//上一句成功才会资源减一
}
signal(S){
    
    
S=S+1;//这里是释放资源的意思
}

Este mecanismo no sigue el principio de "rendimiento para esperar", sino que mantiene el proceso en un estado de "espera ocupada".

2) Semáforo grabado (para solucionar espera ocupada)
El semáforo grabado es un mecanismo de sincronización de procesos que no presenta el fenómeno de "espera ocupada". Además de un valor de variable entero que se usa para representar el número de recursos, se agrega una lista de procesos L para vincular todos los procesos que esperan el recurso. Los semáforos grabados obtienen su nombre del uso de estructuras de datos grabados. Un semáforo de registro se puede describir como:

typedef struct{
    
    
int value;
struct process*L;
}semaphore;
void wait(semaphore S){
    
    //申请资源
S.value--;//请求一个该类资源
if(S.value<0){
    
    
add this process to S.L;//这里的意思是资源不够就进入链表等待的进程(同一个资源)
block(S.L);//自我阻塞,放弃处理机
}
}

void signal(semaphore S){
    
    
S.value++;
if(S.value<=0){
    
    //这里意思是还有等待该资源的
remove a process to S.L;
wakeup(P);//所以再次唤醒P操作
}
}

(1) El valor inicial de S->value representa el número de ciertos tipos de recursos en el sistema, por lo que también se denomina semáforo de recursos; (2)
Cada operación de espera (S) (operación P) en él, ( nota aquí El sujeto es un proceso ) significa que el proceso solicita una unidad de este tipo de recurso, lo que reducirá en uno el número de este tipo de recurso disponible para asignación en el sistema, por lo que se describe como S->valor–; cuando S->value<0, indica que se ha asignado este tipo de recurso, por lo que el proceso debe llamar a la primitiva de bloque, bloquearse a sí mismo, abandonar el procesador e insertar el proceso en la lista de semáforos S->list. Puede verse que el mecanismo sigue el principio de "renunciar al poder y esperar".

1. ¿Cuál es el principio de ceder derechos y esperar?
Cuando el proceso no puede ingresar al área crítica, el procesador debe liberarse inmediatamente para evitar que el proceso esté ocupado esperando.
2. ¿Qué es una sección crítica?
El código que accede a los recursos críticos en cada proceso se denomina sección crítica. Solo un proceso puede ingresar a la sección crítica a la vez. Después de ingresar, otros procesos no pueden ingresar.
3. ¿Qué son los recursos críticos?
Un recurso compartido que solo un proceso puede usar a la vez. Cada proceso adopta un método mutuamente excluyente y los recursos compartidos se denominan recursos críticos.

(3) Cada operación de señal (S) (operación V) en el semáforo significa que el proceso de ejecución libera una unidad de recursos, lo que aumentará en uno el número de recursos disponibles para asignación en el sistema, por lo que la operación S.value++ significa Aumentar el número de recursos en 1. Si sigue siendo S->value<=0 después de agregar 1, significa que todavía hay procesos esperando el recurso bloqueado en la lista de cadenas de señales, por lo que se debe llamar a la primitiva de activación para activar el primer proceso en espera.
(4) Si el valor inicial de S->value es 1, significa que solo un proceso puede acceder a recursos críticos, y el semáforo en este momento se convertirá en un semáforo de exclusión mutua para la exclusión mutua de procesos.

2. Aplicación básica de semáforo

1) Implementar la exclusión mutua de múltiples procesos

(1) El valor inicial del mutex del semáforo de exclusión mutua es 1;
(2) El código de sección crítica se coloca entre las primitivas P (mutex) y V (mutex) en cada proceso;
(3) P y V deben usarse en Pares Primitivos (en el mismo proceso), no pueden estar desordenados, repetidos u omitidos.

Omitir la primitiva P no garantiza el acceso exclusivo.
Omitir la primitiva V evita que el recurso crítico se libere (a otros procesos en espera) después de que se haya utilizado.

semaphore mutex=1;
P1(){
    
    
...
P(mutex);
临界区代码段...
V(mutex);
...
}

P2(){
    
    
...
P(mutex);
临界区代码段...
V(mutex);
...
}

2) Lograr la sincronización

(1) Analizar dónde se debe realizar la "relación de sincronización", es decir, se debe garantizar que dos operaciones (o dos líneas de código) se ejecuten "una antes y una después de la otra"; (2) Establecer el semáforo de
sincronización S, inicialmente 0;
(3) Ejecutar V(S) después de la "operación previa";
(4) Ejecutar P(S) antes de la "operación posterior".

/*信号机制实现同步*/
semaphore S =0//初始化同步信号量,初始值为0
P1(){
    
    
代码1;
代码2;
V(S);//我的理解是这里转去P2
代码3}
P2(){
    
    
P(S);
代码4;
代码5;
代码6;
}

Se garantiza que el código 4 debe ejecutarse después del código 2.

3) Para realizar la relación de predecesor
De hecho, cada par de relación de predecesor es un problema de sincronización de procesos (es necesario garantizar el funcionamiento de uno tras otro) Por lo tanto, (
1) establezca una variable de sincronización para cada par de relación de predecesor;
(2) ) en " Realizar la operación V en la variable de sincronización correspondiente después de "antes de la operación";
(3) Realizar la operación P en la variable de sincronización correspondiente antes de la "operación posterior".
El punto donde el valor del semáforo es 0 es el punto clave de la restricción;
las primitivas P y V se usan en pares (en dos procesos con una relación de secuencia), y el orden no puede ser incorrecto, repetido u omitido, de lo contrario la secuencia de sincronización estar equivocado.

Métodos generales para preguntas de semáforo:
(1) Analice el problema para averiguar la relación entre sincronización y exclusión mutua;
(2) Establezca la variable de semáforo de acuerdo con el recurso;
(3) Escriba el proceso de código y preste atención a la posición de Operaciones P y V;
(4) Comprobar el código, simular el funcionamiento de la máquina, experimentar el cambio de semáforo y si el programa se está ejecutando correctamente.

3. Supervisar

1) ¿Por qué introducir el monitor?
El mecanismo del semáforo existe: la programación es difícil, propensa a errores, etc., y el monitor, un mecanismo de sincronización avanzado , permite a los programadores aprender programas sin tener que prestar atención a operaciones PV complejas, lo que facilita la escritura de programas.

2) Definición de monitor
Un monitor es un módulo de software especial que
incluye:
(1) múltiples subprocesos que pueden interactuar entre sí y compartir recursos
(2) múltiples variables relacionadas con el uso de recursos
(3) un bloqueo mutex
(4) un invariante utilizado para evitar condiciones de carrera

3) Características básicas del proceso del tubo
(1) Modularización.
Un monitor es un módulo de software básico que se puede compilar por separado.
(2) Tipos de datos abstractos.
Los datos y las operaciones sobre los datos se encapsulan en el monitor, que es un poco como la clase en el lenguaje de programación orientado a objetos.
(3) Ocultamiento de información.
Los procesos u otros módulos de software fuera del monitor solo pueden acceder a las operaciones proporcionadas por el monitor a través de la interfaz externa del monitor, y los detalles de implementación dentro del monitor son transparentes para el mundo exterior. (Significa invisible)
(4) Exclusión mutua utilizada
En cualquier momento, el monitor solo puede ser utilizado por un proceso. La exclusión mutua al ingresar al monitor la realiza el compilador.
inserte la descripción de la imagen aquí

おすすめ

転載: blog.csdn.net/weixin_52030647/article/details/130847674