Mikä on Semaphore? Laskeminen, binäärityypit esimerkin kanssa
⚡ Älykäs yhteenveto
Semaphore käyttöjärjestelmässä on säikeiden kesken jaettu ei-negatiivinen kokonaislukumuuttuja, joka koordinoi jaettujen resurssien käyttöä kahden atomioperaation, odota ja signaali, avulla estäen kilpailutilanteet prosessien synkronoinnin aikana.

Mikä on Semaphore?
Semaphore on yksinkertaisesti muuttuja, joka ei ole negatiivinen ja jaetaan säikeiden kesken. Semafori on signalointimekanismi, ja semaforissa odottava säie voidaan signaloida toisella säikeellä. Se käyttää kahta atomioperaatiota, 1) Odota ja 2) Signal prosessin synkronointia varten.
Semafori joko sallii tai estää pääsyn resurssiin, mikä riippuu siitä, miten se on määritetty.
Ominaisuudet Semaphore
Tässä ovat semaforin ominaisuudet:
- Se on mekanismi, jota voidaan käyttää tehtävien synkronointiin.
- Se on matalan tason synkronointimekanismi.
- Semaphore sisältää aina ei-negatiivisen kokonaisluvun.
- Semaphore voidaan toteuttaa käyttämällä testioperaatioita ja keskeytyksiä, jotka tulee suorittaa tiedostokuvaajien avulla.
Tyyppisiä Semaphores
Kaksi yleisintä semaforityyppiä ovat:
- Semaforien laskeminen
- Binäärisemaforit
Counting Semaphores
Tämän tyyppinen Semaphore käyttää laskuria, joka auttaa tehtävän hankkimisessa tai vapauttamisessa useita kertoja. Jos alkuperäinen laskuri = 0, laskeva semafori tulisi luoda ei-käytettävissä-tilassa.
Jos luku on kuitenkin > 0, semafori luodaan käytettävissä olevaan tilaan ja siinä olevien merkkien määrä on yhtä suuri kuin sen määrä.
Binaarinen Semaphores
Binäärisemaforit ovat melko samanlaisia kuin semaforien laskeminen, mutta niiden arvo on rajoitettu arvoihin 0 ja 1. Tällaisessa semaforissa odotusoperaatio toimii vain, jos semafori = 1, ja signaalioperaatio onnistuu, kun semafori = 0. Se on helpompi toteuttaa kuin semaforien laskeminen.
Esimerkki Semaphore
Alla oleva ohjelma on vaiheittainen toteutus, johon kuuluu semaforin käyttö ja deklarointi.
Shared var mutex: semaphore = 1;
Process i
begin
.
.
P(mutex);
execute CS;
V(mutex);
.
.
End;
Odota ja Signal Operasisään Semaphores
Molempia näitä toimintoja käytetään toteuttamiseen prosessin synkronointi. Tämän semaforioperaation tavoitteena on saada molemminpuolinen poissulkeminen.
Odottaa OperaTUKSEN
Tämän tyyppinen semaforitoiminto auttaa hallitsemaan tehtävän syöttämistä kriittiseen osaan. Kuitenkin, jos odotusarvo on positiivinen, odotusargumentin X arvoa pienennetään. Jos arvo on negatiivinen tai nolla, toimintoa ei suoriteta. Sitä kutsutaan myös P(S)-operaatioksi.
Kun semaforin arvoa on pienennetty, mikä muuttuu negatiiviseksi, komentoa pidetään yllä, kunnes vaaditut ehdot täyttyvät.
P(S)
{
while (S<=0);
S--;
}
Signal toiminta
Tämän tyyppinen Semaphore -toimintoa käytetään ohjaamaan tehtävän poistumista kriittisestä osasta. Se auttaa kasvattamaan argumentin arvoa 1:llä, jota merkitään V(S).
P(S)
{
while (S>=0);
S++;
}
Counting Semaphore vs. binääri Semaphore
Tässä on joitain merkittäviä eroja laskennan ja binaarisen semaforin välillä:
| Counting Semaphore | Binaarinen Semaphore |
| Ei molemminpuolista poissulkemista | Yhteinen poissulkeminen |
| Mikä tahansa kokonaislukuarvo | Arvo vain 0 ja 1 |
| Useampi kuin yksi paikka | Vain yksi paikka |
| Tarjoa joukko prosesseja | Sillä on molemminpuolinen poissulkemismekanismi. |
Erotus Semaphore vs. Mutex
Alla olevassa taulukossa vertaillaan semafori, jossa on mutex useiden parametrien perusteella:
| parametrit | Semaphore | muteksi |
| Mekanismi | Se on eräänlainen signalointimekanismi. | Se on lukitusmekanismi. |
| Tietotyyppi | Semaphore on kokonaislukumuuttuja. | Mutex on vain esine. |
| muutos | Odotus- ja signaalitoiminnot voivat muokata semaforia. | Sitä muokkaa vain prosessi, joka voi pyytää tai vapauttaa resurssin. |
| Resurssienhallinta | Jos mikään resurssi ei ole vapaa, prosessi vaatii resurssin, jonka pitäisi suorittaa odotustoiminto. Sen pitäisi odottaa, kunnes semaforin määrä on suurempi kuin 0. | Jos se on lukittu, prosessin on odotettava. Prosessi on pidettävä jonossa. Tätä on käytettävä vain, kun mutex on auki. |
| Kierre | Sinulla voi olla useita ohjelmasäikeitä. | Sinulla voi olla useita ohjelmasäikeitä mutexissa, mutta ei samanaikaisesti. |
| Omistus | Arvoa voidaan muuttaa millä tahansa prosessilla vapauttamalla tai hankkimalla resurssi. | Objektilukon vapauttaa vain prosessi, joka on saanut lukon siihen. |
| Tyypit | Tyyppisiä Semaphore laskevat semaforin ja binaarisen semaforin. | Mutexilla ei ole alatyyppejä. |
| OperaTUKSEN | Semaphore arvoa muutetaan käyttämällä odotustoimintoa () ja signaalia (). | Mutex-objekti on lukittu tai avattu. |
| Resurssit Käyttöaste | Se on varattu, jos kaikki resurssit ovat käytössä ja resurssia pyytävä prosessi suorittaa odotustoiminnon () ja estää itsensä, kunnes semaforien määrästä tulee >1. | Jos objekti on jo lukittu, resursseja pyytävä prosessi odottaa ja järjestelmä asettaa sen jonoon ennen kuin lukitus vapautetaan. |
Edut Semaphores
Tässä on käytön edut/edut Semaphore:
- Se sallii useamman kuin yhden säikeen käyttää kriittistä osaa.
- Semaphores ovat koneista riippumattomia.
- Semaphores on toteutettu mikroytimen koneista riippumattomassa koodissa.
- Ne eivät salli useiden prosessien pääsyä kriittiseen osioon.
- Koska semaforissa on kiireinen odotus, prosessiaikaa ja resursseja ei koskaan mene hukkaan.
- Ne ovat koneriippumattomia, jotka tulisi ajaa mikroytimen koneriippumattomassa koodissa.
- Ne mahdollistavat resurssien joustavan hallinnan.
Haitat Semaphores
Tässä ovat semaforin haitat/haitat:
- Yksi semaforin suurimmista rajoituksista on prioriteetin inversio.
- Käyttöjärjestelmän on pidettävä track kaikista odotus- ja signaalisemaforin kutsuista.
- Niiden käyttöä ei koskaan pakoteta, vaan se tapahtuu vain sopimuksella.
- Välttääksesi umpikujan semaforissa, Odota ja Signal toiminnot on suoritettava oikeassa järjestyksessä.
- Semaphore Ohjelmointi on monimutkaista, joten on mahdollista, ettei keskinäistä poissulkemista saavuteta.
- Se ei myöskään ole käytännöllinen menetelmä laajamittaiseen käyttöön, koska niiden käyttö johtaa modulaarisuuden menettämiseen.
- Semaphore on alttiimpi ohjelmoijavirheille.
- Se voi aiheuttaa umpikuja tai vastavuoroisen poissulkemisen rikkominen ohjelmointivirheen vuoksi.


