Descripción general: los
semáforos son tipos de datos compuestos con dos campos, uno es un SV entero no negativo y el segundo es un conjunto de procesos en una cola SL. Se utiliza para resolver problemas de sección crítica y, mediante el uso de dos operaciones atómicas, se resolverá. En este, espere y señale que se utiliza para la sincronización del proceso.
Estados del proceso:
Vamos a repasar las etapas del proceso que viene en su ciclo de vida. Esto ayudará a comprender el semáforo.
- Running –
Indica que el Proceso está en ejecución. - Listo:
indica que el proceso quiere ejecutarse. - Inactivo:
el proceso se ejecuta cuando no se está ejecutando ningún proceso . - Bloqueado:
los procesos que no están listos no son candidatos para un proceso en ejecución. Puede ser despertado por algunas acciones externas. - Inactivo:
el estado inicial del proceso. El proceso se activa en algún momento y queda listo. - Completo:
cuando un proceso ejecuta su declaración final.
Inicialización de semáforo:
El semáforo S debe inicializarse con un valor de SV > 0 y con SL vacío
Semaphore S <- (k,φ)
Operaciones atómicas en semáforo:
aquí discutiremos las dos operaciones atómicas espera y señal de la siguiente manera.
Operación-1:
Espera (S):
De acuerdo con el valor de SV si es distinto de cero, disminuya su valor y el proceso p puede continuar su ejecución y si es cero, el proceso p se agrega al componente del conjunto y el estado del el proceso p se bloquea en este caso se dice que el proceso p ha sido bloqueado en el semáforo.
Algoritmo –
if(S.V > 0) { S.V. = S.V -1 } else{ S.L. = S.L. U p p.state = blocked }
Operación-2:
Señal(S):
Según el valor de SL, si está vacío incrementa el valor del entero y si no está vacío desbloquea q un arbitrario del conjunto de procesos bloqueados o SL y cambia el estado de p a listo.
Algoritmo –
if(S.L. == φ){ S.V. = S.V.+1 } else{ Let q be some process in S.L. S S.L. = S.L. - {q} q.state = ready }
Tipos de semáforos:
aquí discutiremos los tipos de semáforos de la siguiente manera.
Tipo-1:
Semáforo general:
un semáforo cuyo componente entero puede tomar valores arbitrarios no negativos de SL, se denomina semáforo general. Son una especie de semáforo débil.
Tipo-2:
semáforo binario:
un semáforo cuyo componente entero SL toma solo los valores 0 y 1 se denomina semáforo binario. Esto también se conoce como «mutex», que significa exclusión mutua.
Inicialización –
S <- (0, φ) or S <- (1, φ)
Operación de espera:
permanece sin cambios como se indicó anteriormente.
Operación de señal:
cambia ligeramente de la siguiente manera
Algoritmo:
Signal(S) : if (S.V.== 1) { // Undefined // Return } else if (S.L == empty) { S.V.= 1 } else { Let q be some process in S.L. S.L. = S.L. - { q } q.state = ready }
Tipo-3:
semáforo fuerte:
en el semáforo fuerte, SL permanece sin cambios como semáforos débiles, mientras que SV se reemplaza por la cola. Como debido a la eliminación de un proceso arbitrario en un semáforo débil, puede provocar inanición, mientras que en este caso permanece libre de inanición.
Inicialización –
S <- (0,empty)
Operación de espera –
Algoritmo:
Wait(S) : if (S.V > 0) { S.V.= S.V - 1 } else { S.L.= S.L.U p p.state = blocked }
Operación de señal –
Algoritmo:
Signal(S) : if (S.L.== empty) { S.V.= S.V.+ 1 } else { q = head(S.L.) S.L. = S.L. - { q } q.state = ready }
Tipo-4:
Busy-Wait Semaphore:
no tiene un componente SL y el semáforo S se identifica solo por SVBusy-Wait Semaphore son apropiados en un sistema multiprocesador donde el proceso de espera tiene su propio procesador y no está desperdiciando tiempo de CPU que podría ser utilizado para el cálculo.
Operación de espera –
Algoritmo:
Wait(S): await S>0 S = S - 1
Operación de señal –
Algoritmo:
Signal(S): S = S + 1
Conclusión:
En esta sección, hemos discutido los semáforos y sus tipos, y también hemos discutido sus operaciones atómicas. Estos son los conceptos básicos del Semáforo que se utilizan para resolver el problema de una sección crítica.
Publicación traducida automáticamente
Artículo escrito por ashutoshsoni2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA