Mutex vs. Semaphore

käyttöjärjestelmän terminologian mukaan mutex ja semaforit ovat synkronointipalveluja tarjoavia ytimen resursseja, joita kutsutaan myös synkronoinnin primitiiveiksi. Prosessin synkronoinnilla on tärkeä rooli jaetun tiedon johdonmukaisuuden ylläpitämisessä. Sekä ohjelmisto-että laitteistoratkaisut ovat läsnä kriittisten osioiden ongelmien käsittelyssä. Mutta laitteistoratkaisuja kriittisiin lohkoongelmiin on melko vaikea toteuttaa. Mutex ja semaphore tarjoavat molemmat synkronointipalveluja, mutta ne eivät ole sama asia.

mitä Mutex on?

Mutex on molemminpuolinen poissulkemisobjekti, joka synkronoi resurssin käytön. Se luodaan uniikilla nimellä ohjelman alussa. Mutex-lukitusmekanismi varmistaa, että vain yksi säie voi hankkia mutexin ja mennä kriittiseen osaan. Tämä säie vapauttaa mutexin vain, kun se poistuu kriittisestä osasta.

Mutex vs. Semafori

se on erityinen binäärinen semafori, jota käytetään ohjaamaan pääsyä yhteiseen resurssiin. Se sisältää prioriteettiperimismekanismin, jolla vältetään laajennetut prioriteettien inversio-ongelmat. Se mahdollistaa nykyisten tärkeämpien tehtävien pitämisen estetyssä tilassa mahdollisimman lyhyen ajan. Priority inheritance ei kuitenkaan korjaa priority inversiota, vaan ainoastaan minimoi sen vaikutuksen.

esimerkki

tämä käy ilmi seuraavan esimerkin avulla:

Mutexin käyttö

mutex aiheuttaa molemminpuolisen poissulkemisen joko tuottajalta tai kuluttajalta, joka voi saada avaimen (mutex) ja jatkaa työtään. Niin kauan kuin tuottaja täyttää puskurin, käyttäjän on odotettava, ja päinvastoin. Mutex lockissa koko ajan vain yksi säie voi toimia koko puskurin kanssa.

kun ohjelma käynnistyy, se pyytää järjestelmää luomaan mutex-olion tietylle resurssille. Järjestelmä luo mutex-objektin, jolla on yksilöllinen nimi tai tunnus. Aina kun ohjelmalanka haluaa käyttää resurssia, se vie lukituksen mutex-objektiin, käyttää resurssia ja käytön jälkeen vapauttaa lukon mutex-objektiin. Sitten seuraava prosessi saa hankkia lukon mutex-objektiin.

samaan aikaan prosessi on saanut mutex-objektin lukon, eikä mikään muu säie tai prosessi pääse käsiksi kyseiseen resurssiin. Jos mutex-objekti on jo lukittu, prosessi, joka haluaa hankkia lukon mutex-objektiin, joutuu odottamaan ja järjestelmä jonottaa sitä, kunnes mutex-objekti on avattu.

Mutexin edut

tässä ovat seuraavat mutexin edut, kuten:

  • Mutex on vain yksinkertainen lukot saadaan ennen sen kriittinen osa ja sitten vapauttaa se.
  • koska vain yksi säie on kulloinkin sen kriittisessä osiossa, kisaolosuhteita ei ole, ja tiedot pysyvät aina yhdenmukaisina.

Mutexin haitat

Mutexilla on myös joitakin haittoja, kuten:

  • jos jokin Lanka saa lukon ja menee nukkumaan tai sitä edeltää, toinen lanka ei välttämättä pääse eteenpäin. Tämä voi johtaa nälkään.
  • sitä ei voi lukita tai avata muusta kontekstista kuin siitä, joka sen hankki.
  • vain yksi säie sallitaan kriittisessä kohdassa kerrallaan.
  • normaali toteutus voi johtaa kiireiseen odotustilaan, joka tuhlaa suoritinaikaa.

mikä on Semafori?

Semafori on yksinkertaisesti muuttuja, joka on ei-negatiivinen ja jaettu säikeiden kesken. Semafori on signalointimekanismi, ja toinen lanka voi viestittää semaforilla odottavaa lankaa.

Mutex vs. Semafori

semafori käyttää kahta atomioperaatiota,

1. Odota: odotusoperaatio pienentää argumenttinsa arvoa s, jos se on positiivinen. Jos S on negatiivinen tai nolla, leikkausta ei suoriteta.

2. Signaali prosessin synkronointiin: signaalioperaatio kasvattaa argumenttinsa arvoa S.

semafori joko sallii tai hylkää resurssin käytön riippuen siitä, miten se on perustettu.

Semaforin käyttö

yhden puskurin tapauksessa voidaan erottaa 4 KB: n puskuri neljään 1 KB: n puskuriin. Semafori voidaan liittää näihin neljään puskuriin, jolloin käyttäjät ja tuottajat voivat työskennellä eri puskureilla samanaikaisesti.

Semaforityypit

semaforityypit erotetaan käyttöjärjestelmän mukaan kahteen luokkaan, joihin lasketaan semafori ja binäärinen semafori.

1. Semaforin laskeminen: semaforin arvo alustetaan järjestelmässä olevien resurssien lukumäärään. Aina kun jokin prosessi haluaa käyttää resurssia, se suorittaa odotusoperaation()semaforilla ja määrää semaforin arvon yhdellä. Kun se vapauttaa resurssin, se suorittaa signaalin() toiminnan semaforilla ja kasvattaa semaforin arvoa yhdellä.

kun semaforiluku menee arvoon 0, se tarkoittaa, että prosessit vievät kaikki resurssit. Prosessin on käytettävä resurssia, kun semaforiluku on 0. Se suorittaa odotusoperaation () ja estyy, kunnes semaforin arvo on suurempi kuin 0.

 Mutex vs. Semafori

2. Binäärinen semafori: semaforin arvo vaihtelee välillä 0 ja 1. Se muistuttaa mutex-lukkoa, mutta mutex on lukitusmekanismi, kun taas semafori on signalointimekanismi. Jos binäärisessä semaforissa jokin prosessi haluaa käyttää resurssia, se suorittaa odotusoperaation () semaforilla ja määrää semaforin arvon 1: stä 0: een. Kun se vapauttaa resurssin, se suorittaa semaforille signaalin() operaation ja kasvattaa arvonsa arvoon 1. Oletetaan, että semaforin arvo on 0 ja prosessi haluaa käyttää resurssia. Tällöin se suorittaa odota () – toiminnon ja estää itsensä, kunnes nykyinen resursseja hyödyntävä prosessi vapauttaa resurssin.

Mutex vs. Semafori

Semaforin edut

tässä ovat seuraavat semaforin edut, kuten:

  • sen avulla useampi kuin yksi säie pääsee kriittiseen osioon.
  • semaforit ovat koneriippumattomia.
  • semaforit toteutetaan koneesta riippumattomalla koodilla mikrokerneli.
  • ne eivät salli useiden prosessien pääsyä kriittiseen osioon.
  • koska semaforissa on kiirettä ja odottelua, prosessiaikaa ja resursseja ei koskaan hukata.
  • ne ovat koneriippumattomia, joita tulisi ajaa mikromikernelin koneriippumattomalla koodilla.
  • ne mahdollistavat resurssien joustavan hallinnoinnin.

semaforien haitta

Semaforeilla on myös joitakin haittoja, kuten:

  • yksi semaforin suurimmista rajoituksista on prioriteettinversio.
  • käyttöjärjestelmän on pidettävä kirjaa kaikista puheluista odottaakseen ja signaloidakseen semaforia.
  • niiden käyttöä ei koskaan valvota, vaan se tapahtuu vain tavan mukaan.
  • odotus-ja Signaalioperaatiot on suoritettava oikeassa järjestyksessä, jotta vältytään umpikujilta semaforeissa.
  • Semaforiohjelmointi on monimutkainen menetelmä, joten on mahdollista, ettei molemminpuolista syrjäytymistä tapahdu.
  • se ei myöskään ole käytännöllinen menetelmä laajamittaiseen käyttöön, sillä niiden käyttö johtaa modulaarisuuden menetykseen.
  • Semafori on alttiimpi ohjelmointivirheelle
  • , ja se voi aiheuttaa ohjelmointivirheestä johtuvaa umpikujaa tai molemminpuolisen poissulkemisen rikkomista.

ero Mutexin ja Semaforin välillä

perusero semaforin ja mutexin välillä on se, että semafori on merkinantomekanismi, eli prosessit suorittavat odotus – () ja signaalitoiminnan() osoittaakseen, hankkivatko vai vapauttavatko ne resurssin. Sen sijaan mutex on lukitusmekanismi, ja prosessin on hankittava Lukko mutex-objektiin, jos se haluaa hankkia resurssin. Tässä on joitakin enemmän eroja semaforin ja mutexin välillä, kuten:

 Mutex vs. Semafori

termit Mutex Semafori
määritelmä mutex on lukitusmekanismi, sillä resurssin hankkimiseksi prosessin on lukittava mutex-objekti,ja resurssiprosessin vapauttamisen yhteydessä mutex-objekti on avattava. Semafori on merkinantomekanismi, sillä semaforimuuttujalla suoritetut odotus – () ja signaalitoiminnot() kertovat, onko prosessi hankkimassa vai vapauttamassa resurssia.
olemassaolo mutex on objekti. Semafori on kokonaislukumuuttuja.
funktio Mutex sallii useiden ohjelmaketjujen käyttää yhtä resurssia, mutta ei samanaikaisesti. Semafori mahdollistaa useiden ohjelmaketjujen pääsyn rajalliseen resurssiesiintymään.
Ownership Mutex object lock vapautuu vain prosessilla, joka on hankkinut lukon mutex-objektiin. Semaforiarvoa voi muuttaa mikä tahansa prosessi, joka hankkii tai vapauttaa resurssin suorittamalla odotus – () ja signaalitoiminnon ().
kategorisointia Mutexia ei luokitella pidemmälle. semafori voidaan luokitella semaforin ja binäärisen semaforin laskemiseen.
operaatio mutex-objekti lukitaan tai avataan resurssin pyytämisen tai vapauttamisen yhteydessä. Semaforiarvoa muokataan alustuksen lisäksi odotus – () ja signaalioperaatiolla ().
käytössä olevat resurssit jos mutex-objekti on jo lukittu, prosessi, joka haluaa hankkia resurssin, odottaa ja jonottaa järjestelmään, kunnes resurssi vapautetaan ja mutex-objekti avataan. Oletetaan, että prosessi hankkii kaikki resurssit, eikä mikään resurssi ole vapaa. Tällöin prosessi, joka haluaa hankkia resurssin, suorittaa odotusoperaation() semaforimuuttujalla ja blokkaa itsensä, kunnes semaforin luku on suurempi kuin 0.

Leave a Reply