Ce este Semafor?
Semaforul este pur și simplu o variabilă care este non-negativă și partajată între fire. Un semafor este un mecanism de semnalizare, iar un fir care așteaptă pe un semafor poate fi semnalizat de un alt fir. Folosește două operații atomice, 1) așteptați și 2) semnal pentru sincronizarea procesului.
Un semafor permite sau interzice accesul la resursă, care depinde de modul în care este configurată.
În acest tutorial privind sistemul de operare (OS), veți afla:
- Caracteristic semaforului
- Ce este Semafor?
- Tipuri de semafore
- Exemplu de semafor
- Așteptați și semnalizați operațiile în semafore
- Numărarea semaforului față de semaforul binar
- Diferența dintre semafor și Mutex
- Avantajele semaforelor
- Dezavantajul semaforelor
Caracteristic semaforului
Aici, sunt caracteristice unui semafor:
- Este un mecanism care poate fi utilizat pentru a asigura sincronizarea sarcinilor.
- Este un mecanism de sincronizare de nivel scăzut.
- Semaforul va deține întotdeauna o valoare întreagă non-negativă.
- Semaforul poate fi implementat folosind operații de testare și întreruperi, care ar trebui executate folosind descriptori de fișiere.
Tipuri de semafore
Cele două tipuri comune de semafore sunt
- Numărarea semaforelor
- Semafoare binare.
Numărarea semaforelor
Acest tip de semafor folosește un număr care ajută sarcina să fie achiziționată sau lansată de mai multe ori. Dacă numărul inițial = 0, semaforul de numărare trebuie creat în starea indisponibilă.
Cu toate acestea, dacă numărul este> 0, semaforul este creat în starea disponibilă, iar numărul de jetoane pe care le are este egal cu numărul său.
Semafoare binare
Semaforele binare sunt destul de asemănătoare cu semaforele de numărare, dar valoarea lor este limitată la 0 și 1. În acest tip de semafor, operația de așteptare funcționează numai dacă semaforul = 1, iar operația semnalului reușește când semaforul este 0. Este ușor să implementează decât numărarea semaforelor.
Exemplu de semafor
Programul de mai jos este o implementare pas cu pas, care implică utilizarea și declararea semaforului.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Așteptați și semnalizați operațiile în semafore
Ambele operațiuni sunt utilizate pentru a implementa sincronizarea procesului. Scopul acestei operații de semafor este de a obține excluderea reciprocă.
Așteptați operațiunea
Acest tip de operație de semafor vă ajută să controlați intrarea unei sarcini în secțiunea critică. Cu toate acestea, dacă valoarea așteptării este pozitivă, atunci valoarea argumentului de așteptare X este diminuată. În cazul unei valori negative sau zero, nu se execută nicio operațiune. Se mai numește operațiunea P (S).
După scăderea valorii semaforului, care devine negativă, comanda este menținută până când sunt îndeplinite condițiile cerute.
Copy CodeP(S){while (S<=0);S--;}
Funcționarea semnalului
Acest tip de operație Semaphore este utilizat pentru a controla ieșirea unei sarcini dintr-o secțiune critică. Ajută la creșterea valorii argumentului cu 1, care este notat ca V (S).
Copy CodeP(S){while (S>=0);S++;}
Numărarea semaforului față de semaforul binar
Iată câteva diferențe majore între numărare și semafor binar:
Numărând semafor | Semafor binar |
Fără excludere reciprocă | Excludere mutuala |
Orice valoare întreagă | Valoare doar 0 și 1 |
Mai multe sloturi | Un singur slot |
Furnizați un set de procese | Are un mecanism de excludere reciprocă. |
Diferența dintre semafor și Mutex
Parametrii | Semafor | Mutex |
Mecanism | Este un tip de mecanism de semnalizare. | Este un mecanism de blocare. |
Tipul de date | Semaforul este o variabilă întreagă. | Mutex este doar un obiect. |
Modificare | Operațiile de așteptare și semnal pot modifica un semafor. | Este modificat numai prin procesul care poate solicita sau elibera o resursă. |
Managementul resurselor | Dacă nicio resursă nu este gratuită, atunci procesul necesită o resursă care ar trebui să execute operațiunea de așteptare. Ar trebui să aștepte până când numărul semaforului este mai mare de 0. | Dacă este blocat, procesul trebuie să aștepte. Procesul trebuie păstrat într-o coadă. Acest lucru trebuie accesat numai atunci când mutex este deblocat. |
Fir | Puteți avea mai multe fire de program. | Puteți avea mai multe fire de program în mutex, dar nu simultan. |
Proprietate | Valoarea poate fi modificată prin orice proces care eliberează sau obține resursa. | Blocarea obiectelor este eliberată numai prin proces, care a obținut blocarea pe ea. |
Tipuri | Tipurile de semafor contează semaforul și semaforul binar și | Mutex nu are subtipuri. |
Operațiune | Valoarea semaforului este modificată utilizând operația wait () și signal (). | Obiectul Mutex este blocat sau deblocat. |
Ocuparea resurselor | Este ocupat dacă toate resursele sunt utilizate și procesul de solicitare a resursei efectuează operația wait () și se blochează până când numărul de semafor devine> 1. | În cazul în care obiectul este deja blocat, procesul care solicită resurse așteaptă și este pus în așteptare de către sistem înainte ca blocarea să fie eliberată. |
Avantajele semaforelor
Iată care sunt avantajele / avantajele utilizării Semaphore:
- Permite mai multor fire să acceseze secțiunea critică
- Semaforele sunt independente de mașini.
- Semaforele sunt implementate în codul microkernel independent de mașină.
- Acestea nu permit mai multe procese să intre în secțiunea critică.
- Deoarece în semafor există o așteptare ocupată, nu se pierde niciodată timpul și resursele procesului.
- Sunt independente de mașină, care ar trebui să fie rulate în codul independent de mașină al microkernelului.
- Acestea permit gestionarea flexibilă a resurselor.
Dezavantajul semaforelor
Iată, sunt dezavantaje / dezavantaje ale semaforului
- Una dintre cele mai mari limitări ale unui semafor este inversarea priorității.
- Sistemul de operare trebuie să țină evidența tuturor apelurilor pentru a aștepta și semnaliza semaforul.
- Utilizarea lor nu este niciodată pusă în aplicare, dar este doar prin convenție.
- Pentru a evita blocajele în semafor, operațiile de așteptare și semnal trebuie executate în ordinea corectă.
- Programarea semaforului este complicată, deci există șanse să nu se realizeze excluderea reciprocă.
- De asemenea, nu este o metodă practică pentru utilizarea pe scară largă, deoarece utilizarea lor duce la pierderea modularității.
- Semaforul este mai predispus la erori de programare.
- Poate provoca blocarea sau încălcarea excluderii reciproce din cauza erorii programatorului.
Rezumat:
- Semaforul este definit ca o variabilă care este non-negativă și partajată între fire.
- Este un mecanism care poate fi utilizat pentru a asigura sincronizarea sarcinilor.
- Semaforul de numărare folosește un numărare care ajută la achiziționarea sau eliberarea sarcinii de mai multe ori.
- Semaforele binare sunt destul de similare cu semaforele de numărare, dar valoarea lor este limitată la 0 și 1.
- Operațiunea de așteptare vă ajută să controlați intrarea unei sarcini în secțiunea critică
- Operațiunea semaforului de semnal este utilizată pentru a controla ieșirea unei sarcini dintr-o secțiune critică
- Numărarea semaforului nu are excludere reciprocă, în timp ce semaforul binar are excludere reciprocă
- Semafor înseamnă un mecanism de semnalizare, în timp ce Mutex este un mecanism de blocare
- Semaforul permite mai multor fire să acceseze secțiunea critică
- Una dintre cele mai mari limitări ale unui semafor este inversarea priorității.