Mikä on Semaphore? Laskeminen, binäärityypit esimerkin kanssa
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.
Tyypillinen Semaphore
Tässä ovat semaforille ominaisia:
- 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 yleistä semaforien tyyppiä ovat
- Semaforien laskeminen
- Binaariset semaforit.
Counting Semaphores
Tämän tyyppinen Semaphore käyttää laskentaa, joka auttaa tehtävän hankkimisessa tai vapauttamisessa useita kertoja. Jos alkuluku = 0, laskentasemafori tulee luoda tilaan, jossa se ei ole käytettävissä.

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
Binaariset semaforit ovat melko samanlaisia kuin laskentasemaforit, mutta niiden arvo on rajoitettu 0:aan ja 1:een. Tämän tyyppisessä semaforissa odotustoiminto toimii vain, jos semafori = 1, ja signaalitoiminto onnistuu, kun semafori = 0. Se on helppo toteuttaa kuin semaforien laskeminen.

Esimerkki Semaphore
Alla oleva ohjelma on vaiheittainen toteutus, joka sisältää semaforin käytön ja ilmoittamisen.
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.
Copy CodeP(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).
Copy CodeP(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
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 ja | 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 pääsyn kriittiseen osaan
- 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.
Semaforien haitta
Tässä on semaforin haitat / haitat
- Yksi semaforin suurimmista rajoituksista on prioriteetin inversio.
- Käyttöjärjestelmän on seurattava kaikkia kutsuja odottaakseen ja lähettääkseen semaforin.
- 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 mahdollisuuksia, että molemminpuolista poissulkemista ei 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.
Yhteenveto
- Semaphore on määritelty muuttujaksi, joka ei ole negatiivinen ja jaetaan säikeiden kesken.
- Se on mekanismi, jota voidaan käyttää tehtävien synkronointiin.
- Semaforin laskenta käyttää laskuria, joka auttaa tehtävän hankkimisessa tai vapauttamisessa useita kertoja.
- Binaariset semaforit ovat melko samanlaisia kuin laskentasemaforit, mutta niiden arvo on rajoitettu nollaan ja 0:een.
- Odotustoiminto auttaa hallitsemaan tehtävän syöttämistä kriittiseen osioon
- Signal semaforitoimintoa käytetään ohjaamaan tehtävän poistumista kriittisestä osasta
- Counting Semaphore ei sisällä keskinäistä poissulkemista, kun taas Binary Semaphore on molemminpuolinen poissulkeminen
- Semaphore tarkoittaa merkinantomekanismia, kun taas Mutex on lukitusmekanismi
- Semaphore sallii useamman kuin yhden säikeen pääsyn kriittiseen osaan
- Yksi semaforin suurimmista rajoituksista on prioriteetin inversio.