Diferența dintre semafor și monitor în sistem de operare

Autor: Laura McKinney
Data Creației: 1 Aprilie 2021
Data Actualizării: 1 Mai 2024
Anonim
Diferența dintre semafor și monitor în sistem de operare - Tehnologie
Diferența dintre semafor și monitor în sistem de operare - Tehnologie

Conţinut


Semaforul și Monitorul permit ambele procese să acceseze resursele partajate în excludere reciprocă. Ambele sunt instrumentul de sincronizare a procesului. În schimb, ei sunt foarte diferiți unul de celălalt. Unde Semafor este o variabilă întreagă care poate fi operată numai prin operare wait () și semnal () în afară de inițializare. Pe de altă parte, Monitor tip este un tip de date abstract al cărui construct permite un proces să se activeze simultan. În acest articol, vom discuta despre diferențele dintre semafor și monitor cu ajutorul graficului de comparație prezentat mai jos.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațieSemafor Monitor
De bază Semaforii este o variabilă întreagă S.Monitorul este un tip de date abstracte.
AcțiuneValoarea Semaphore S indică numărul de resurse partajate disponibile în sistemTipul Monitor conține variabile partajate și setul de proceduri care operează pe variabila partajată.
AccesCând orice proces accesează resursele partajate, el efectuează operațiunea wait () pe S și când eliberează resursele partajate, el efectuează operațiunea de semnal () pe S.Când orice proces dorește să acceseze variabilele partajate pe monitor, acesta trebuie să îl acceseze prin proceduri.
Variabilă de condițieSemaforul nu are variabile de condiție.Monitorul are variabile de stare.


Definiția Semaphore

Fiind un instrument de sincronizare a proceselor, Semafor este un variabilă întreagă S. Această variabilă întreagă S este inițializată la numărul de resurse prezent în sistem. Valoarea semaforului S poate fi modificată doar prin două funcții aștepta() și semnal() în afară de inițializare.

Operația de așteptare () și semnal () modifică indivizibil valoarea semaforului S. Ceea ce înseamnă că atunci când un proces modifică valoarea semaforului, niciun alt proces nu poate modifica simultan valoarea semaforului. Mai mult, sistemul de operare distinge semaforul în două categorii Numără semafoare și semafor binar.

În Numărarea semaforului, valoarea semaforului S este inițiată la numărul de resurse prezente în sistem. Ori de câte ori un proces dorește să acceseze resursele partajate, acesta are performanță aștepta() operație pe semafor care descreșteri valoarea semaforului cu unul singur. Când eliberează resursa partajată, execută o semnal() operație pe semafor care creșteri valoarea semaforului cu unul singur. Când numărul semaforului se duce la 0, inseamna toate resursele sunt ocupate de procese. Dacă un proces trebuie să utilizeze o resursă atunci când numărul de semafor este 0, acesta execută wait () și get blocat până când un proces care utilizează resursele partajate îl eliberează și valoarea semaforului devine mai mare de 0.


În Semafor binar, valoarea semaforului variază între 0 și 1. Este similară cu blocarea mutex, dar mutexul este un mecanism de blocare, în timp ce semaforul este un mecanism de semnalizare. În semafor binar, dacă un proces dorește să acceseze resursa, acesta efectuează operația wait () pe semafor și descreșteri valoarea semaforului de la 1 la 0. Când procesul eliberează resursa, acesta realizează a semnal() operațiunea pe semafor și își crește valoarea la 1. Dacă valoarea semaforului este 0 și un proces dorește să acceseze resursa pe care o efectuează operație wait () și să se blocheze până la procesul curent care utilizează resursele eliberează resursa.

Definiția Monitor

Pentru a depăși erorile de sincronizare care apar în timpul folosirii semaforului pentru sincronizarea proceselor, cercetătorii au introdus o construcție de sincronizare la nivel înalt, adică tip monitor. Un tip de monitor este un tip de date abstracte care este utilizat pentru sincronizarea proceselor.

Fiind un tip de monitor de tip abstract de date conține variabile de date partajate care urmează să fie partajate de toate procesele și de unele definite de programator operațiuni care permit executarea proceselor în excludere reciprocă în cadrul monitorului. Un proces poate nu acces direct variabila de date partajată pe monitor; procesul trebuie să îl acceseze prin proceduri definită în monitor care permite unui singur proces să acceseze variabilele partajate pe un monitor la un moment dat.

Sintaxa monitorului este următoarea:

monitor monitor_name {// procedura de declarații cu variabilă comună P1 (..) {} procedura P2 (..) {} procedura Pn (..) {} cod de inițializare (..) {}}

Un monitor este o construcție precum un singur proces este activ la un moment dat în monitor. Dacă un alt proces încearcă să acceseze variabila partajată pe monitor, acesta este blocat și este aliniat la coadă pentru a obține accesul la datele partajate atunci când accesarea anterioară a procesului o eliberează.

Variabile condiționale au fost introduse pentru un mecanism suplimentar de sincronizare. Variabila condiționată permite unui proces să aștepte în interiorul monitorului și permite ca un proces de așteptare să reia imediat după ce celălalt proces eliberează resursele.

variabilă condițională poate invoca doar două operații aștepta() și semnal(). În cazul în care, dacă un proces P invocă o așteptare () operație este suspendată pe monitor până la alt proces Q invoca semnal () operație, adică o operație semnal () invocată de un proces reia procesul suspendat.

  1. Diferența de bază între semafor și monitor este că semafor este un variabilă întreagă S care indică numărul de resurse disponibile în sistem, în timp ce Monitor este tip de date abstracte care permite executarea unui singur proces în secțiune critică simultan.
  2. Valoarea semaforului poate fi modificată prin aștepta() și semnal() numai operare. Pe de altă parte, un monitor are variabilele partajate și procedurile numai prin care procesele pot fi accesate de variabile partajate.
  3. În Semaphore când un proces dorește să acceseze resurse partajate, procesul se realizează aștepta() operează și blochează resursele și când eliberează resursele pe care le realizează semnal() Operațiune. În monitoare atunci când un proces trebuie să acceseze resurse partajate, acesta trebuie să le acceseze prin proceduri în monitor.
  4. Tipul monitorului are variabile de condiție pe care semaforul nu are.

Concluzie:

Monitoarele sunt ușor de implementat decât semaforul și există șanse mici de a greși în monitor în comparație cu semafoarele.