Ce este Semafor? Tipuri binare, de numărare cu exemplu

Cuprins:

Anonim

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.