Red de conocimiento informático - Material del sitio web - ¿Cómo escribir el funcionamiento fotovoltaico original del principio del sistema operativo? ¿Cómo es el proceso de pensamiento?

¿Cómo escribir el funcionamiento fotovoltaico original del principio del sistema operativo? ¿Cómo es el proceso de pensamiento?

Encontré una buena publicación en el foro, estúdiela:

En los sistemas operativos de las computadoras, la operación fotovoltaica es un punto difícil en la gestión de procesos.

En primer lugar, es necesario aclarar el significado de la operación PV: la operación PV consta de la primitiva de operación P y la primitiva de operación V (la primitiva es un proceso ininterrumpible), que opera el semáforo y se define como sigue:

p>

P (S): Disminuir el valor del semáforo S en 1, es decir, S=S-1

② Si S? S=S 1;

② Si Sgt; 0, el proceso continúa ejecutándose; de ​​lo contrario, se libera el primer proceso que espera el semáforo en la cola.

La importancia de la operación PV: utilizamos semáforo y operación PV para lograr la sincronización del proceso y la exclusión mutua pertenece a la comunicación de bajo nivel del proceso.

¿Qué es un registro? La estructura de datos de una señal es un valor y un puntero al siguiente proceso que espera la señal. El valor de la señal está relacionado con el uso del recurso correspondiente. Cuando es mayor que 0, representa la cantidad de recursos disponibles actualmente; cuando es menor que 0, su valor absoluto representa la cantidad de procesos que esperan usar el recurso. Tenga en cuenta que el valor de Semaphore solo se puede cambiar mediante operaciones PV.

Generalmente, cuando el registro de señal S?, S representa el número de recursos disponibles. Realizar la operación P significa solicitar la asignación de una unidad de recursos, por lo que el valor de S se reducirá en uno. Cuando Slt;0, significa que no hay recursos disponibles y el solicitante debe esperar a que otros procesos liberen recursos de este tipo antes de continuar ejecutándose. Realizar la operación V significa liberar una unidad de recursos, por lo que el valor de S es positivo 1 si S?

El modelo general de exclusión mutua de procesos utilizando semáforos y operaciones PV es:

Proceso P1 Proceso P2...Proceso Pn

... ... ... ......

P(S); (S);

Zona crítica; Zona crítica;

V(S); V(S);

p >

... ... ... ... ...

El registro semántico S se utiliza para la exclusión mutua y su valor inicial es 1.

Cuando utilice operaciones PV para lograr la exclusión mutua del proceso, tenga en cuenta:

(1) Las operaciones P y V que los usuarios implementan la exclusión mutua en cada programa deben aparecer en pares, y P Se debe realizar primero la operación, ingresar a la sección crítica y luego realizar la operación V para salir de la sección crítica. Si hay más de una rama, verifique su naturaleza por pares.

(2) Las operaciones P y V deben estar cerca del principio y el final de la sección crítica. El código en la sección crítica debe ser lo más corto posible y no debe haber un bucle infinito.

(3) El valor inicial de la señal mutuamente excluyente suele ser 1.

Utilice señales y operaciones PV para lograr la sincronización de procesos

Las operaciones PV son uno de los mecanismos de sincronización típicos. Los semáforos se utilizan para asociar mensajes. Cuando el valor del semáforo es 0, significa que el mensaje requerido aún no se ha generado; cuando el valor del semáforo no es 0, significa que el mensaje requerido ya existe. Al sincronizar un proceso utilizando la operación PV, debe llamar a la operación P para probar si el mensaje ha llegado y a la operación V para enviar el mensaje.

Al utilizar operaciones PV para lograr la sincronización de procesos, debe prestar atención a:

(1) Analizar las restricciones entre procesos y determinar el tipo de señal. Mientras se mantiene la relación de sincronización correcta entre procesos, qué proceso se ejecuta primero, qué proceso se ejecuta más tarde y qué recursos (transmisores de señal) se utilizan se coordinan entre sí, de modo que quede claro qué transmisor de señal está configurado.

(2) El valor inicial de la señal está relacionado con el número de recursos correspondientes y también con la ubicación donde aparecen las operaciones P y V en el código del programa.

(3) Las operaciones P y V de la misma señal deben aparecer en pares, pero están en códigos de proceso diferentes.

Ejemplo 1 Problema productor-consumidor

La sincronización de procesos es un tema muy importante e interesante en un entorno de programa multicanal, y el problema productor-consumidor es representativo de uno de los procesos de sincronización asuntos. A continuación, presentaremos varias situaciones del problema productor-consumidor. Un análisis en profundidad y una comprensión profunda de este ejemplo serán de gran ayuda para resolver de manera integral los problemas de sincronización y exclusión mutua en el sistema operativo.

(1) Un productor y un consumidor comparten un colchón común.

Defina dos señales de sincronización:

Vacío: indica si el búfer está vacío, el valor inicial es 1.

Lleno - Indica si el buffer está lleno, el valor inicial es 0.

Proceso productor

mientras(VERDADERO)

Producir un producto

P(vacío); Producto para amortiguar;

V(full);

}

(2) Un productor, un consumidor y un distrito de amortiguamiento de n-ring normal.

Defina dos señales de sincronización:

vacío: indica si el búfer está vacío, el valor inicial es n.

full-Indica si el buffer está lleno, el valor inicial es 0.

Deje que los buffers estén numerados del 1 al n-1 y defina dos punteros de entrada y salida, utilizados por el proceso productor y el proceso consumidor respectivamente para el siguiente buffer disponible.

Proceso de producción

while(TRUE){

Producir un producto

P(vacío); > Producto a búfer(en);

in=(en 1)mod n;

V(completo); >(3) Un grupo de productores y un grupo de consumidores comparten n buffers de anillo

En este problema, no solo los productores y consumidores deben sincronizarse entre sí, sino también entre un solo productor y un solo consumidor. deben acceder a los buffers de cada uno.

Defina cuatro registros:

vacío: indica si el búfer está vacío, el valor inicial es n.

lleno: indica si el búfer está lleno, el valor inicial es 0.

mutex2 - Señal Mutex entre consumidores, el valor inicial es 1.

Establecemos los números de búfer de 1 a n-1 y definimos dos punteros, punto y salida. El proceso productor y el proceso consumidor utilizan estos dos punteros para apuntar al siguiente búfer disponible respectivamente.

Proceso productor

while(TRUE){

Producir un producto

P(vacío); > P(mutex1);

Producto al búfer (en);

in=(en 1)mod n

V( mutex1); p>

V(full);

}

Cabe señalar que, ya sea en el proceso de productor o en el proceso de consumidor, las dos operaciones P El orden no debe ser revertido. Primero se debe realizar la operación P para una señal de sincronización y luego la operación P para una señal mutuamente excluyente; de ​​lo contrario, el proceso puede quedarse atascado en un punto muerto.

Ejemplo 2 Hay un plato vacío sobre la mesa, que permite guardar una fruta. El padre puede poner una manzana o una naranja en el plato, el hijo espera la naranja en el plato y la hija espera la manzana en el plato. Se estipula que cuando el plato esté vacío, solo se podrá colocar una fruta a la vez para la persona que come.

Sincronice tres procesos concurrentes de padre, hijo e hija usando primitivas P y V.

Análisis En este problema, el padre, el hijo y la hija**** usan un plato y solo pueden poner una fruta en el plato a la vez. Cuando el plato esté vacío, papá puede poner una pieza de fruta en el plato de frutas. Si hay naranjas en el plato de frutas, el hijo puede comerlas, pero la hija debe esperar; si hay manzanas en el plato de frutas, la hija puede comerlas, pero el hijo debe esperar. Este problema es en realidad una variante del problema productor-consumidor. Aquí, hay dos tipos de productos colocados en el buffer por los productores y dos tipos de consumidores, y cada consumidor sólo consume un producto fijo.

Solución: S representa si el disco está vacío y su valor inicial es l; So representa si hay naranjas en el disco y su valor inicial es 0 Sa representa si hay manzanas en el disco; , y su valor inicial es 0. La descripción de la sincronización es la siguiente:

int S = 1;

int Sa = 0;

int So = 0; main()

{

cobegin

padre() /*Proceso padre

hijo() /*Proceso hijo<; /p>

hija();

}

padre()

{

mientras(1)

{

P(S);

Pon la fruta en el plato

Si (pon una naranja) V(So); /p >

En caso contrario V(Sa

}<

}

hijo()

{

while(1)

{

P(So);

Retira la naranja del plato

V; (S) ;

Come la naranja;

}

}

hija()

{

while(1)

{

P(Sa);

Toma la manzana del plato; > V( S);

Come la manzana

}

Preguntas para pensar:

Los cuatro procesos A, B, C y D son todos Quieren leer un ***disfrutar del archivo F. El sistema permite que varios procesos lean el archivo F al mismo tiempo, pero la limitación es que el proceso A y el proceso C no pueden leer el archivo F al mismo tiempo, y el proceso B y el proceso D no pueden leer el archivo F al mismo tiempo. Para que estos cuatro procesos se ejecuten simultáneamente y usen este archivo de acuerdo con los requisitos del sistema, y ​​ahora usen operaciones PV para la administración, responda las siguientes preguntas:

(1) El semáforo y el valor inicial que debe definirse: .

(2) Complete las operaciones P y V apropiadas en el siguiente programa para asegurarse de que funcionen correctamente y al mismo tiempo:

A() B() C() D()

{ { {

[1]; [5];

Leer F; F ;

[2]; [4]; [6]; [8];

}}}}

Piensa en la respuesta a la pregunta. :

(1) Defina dos señales S1 y S2 cuyos valores iniciales sean ambos 1, es decir, S1=1, S2=1, donde los procesos A y C usan la señal S1, y los procesos B y D utilizar la señal S2.

(2) De [1] a [8] respectivamente P(S1) V(S1) P(S2) V(S2) P(S1) V(S1) P(S2) V(S2 ).