Semaphore vs. Mutex

Introduction

a Operating System (OS) process interacts with other processs running in the same system to complete a common task. Prosesseja, jotka ovat vuorovaikutuksessa muiden prosessien kanssa, kutsutaan yhteistyöprosesseiksi.

prosessin toteuttamien prosessien välisen viestinnän (IPC) strategioiden perusteella se voi joko jakaa osoiteavaruutensa muiden prosessien kanssa tai kommunikoida viestinvaihdon kautta. Aiemmassa tekniikassa viestinnän ohjaaminen on kriittistä, sillä molemmilla prosesseilla on yhteinen osoiteavaruus.

tätä prosessiviestinnän hallintaa kutsutaan synkronoinniksi. Ilman asianmukaista synkronointia prosessit voivat lukea vanhentuneita tietoja tai korvata muita prosessitietoja.

Semaphore ja mutex ovat kaksi mekanismia, joiden kautta voimme toteuttaa synkronointia ja hallita prosessikoordinaatiota. Tässä artikkelissa, tarkastelemme näitä kahta synkronointi apuohjelmia ja vertailla eri ominaisuuksia.

Ymmärtäkäämme kriittisen osan

ennen kuin käsittelemme semaforia ja mutexia, ymmärtäkäämme kriittisen osan ongelma.

Oletetaan, että meillä on järjestelmä, joka sisältää n prosesseja. Jokaisella näistä prosesseista on koodisegmentti, jossa prosessi voi suorittaa yhteisen muuttujan päivityksen, taulukon päivityksen tai kirjoittaa tiedostoon. Tätä koodisegmenttiä kutsutaan prosessin kriittiseksi osioksi.

2.1. Kriittisen osan ongelman ominaisuudet

kriittisen osan olennainen ominaisuus on se, että kun prosessi alkaa suorittaa kriittistä osiotaan, mikään muu prosessi ei saa suorittaa kriittistä osiotaan. Toisin sanoen ei kaksi prosessia voi suorittaa kriittisen osan samanaikaisesti. Tämä kriittinen osio ongelma on suunnitella protokolla niin, että prosessit voivat käyttää yhteistyötä.

jokainen prosessi tarvitsee luvan kriittiseen osioonsa. Luvan toteuttava koodinpätkä tunnetaan merkintäosiona. Vastaavasti koodinpätkä, joka toteuttaa kriittisen osan poistumisen, tunnetaan poistumisjaksona.

2.2. Kriittisen osan ongelman kriteerit

kriittisen osan ongelman ratkaisun on täytettävä seuraavat kriteerit:

  • keskinäinen poissulkeminen: jos prosessi suorittaa kriittisen osionsa, mikään muu prosessi ei voi suorittaa kriittistä osiotaan
  • Progress: jos yksikään prosessi ei suorita kriittistä osiotaan, muut prosessit voivat päättää suorittaa kriittisen osionsa. Ratkaisun ja toteutuksen perusteella valitaan prosessi, joka voi toteuttaa kriittisen osionsa. Huomattavaa on, että prosesseilla on kyky edetä valintaprosessiin kriittisen osionsa
  • toteuttamiseksi rajattu odotus: prosessia pitäisi odottaa rajallisesti, kun se on pyytänyt kriittisen osionsa syöttöosiota, ja kuinka monta kertaa toinen prosessi suorittaa kriittisen osionsa

Mutex-lukkoja

käyttöjärjestelmässä on useita apuohjelmia kriittisen osan ongelman ratkaisemiseksi. Mutual exclusion (mutex) lukot tai mutex on yksinkertaisin ratkaisu. Käytämme mutex-lukkoja suojaamaan kriittistä osaa ja estämään kisaolosuhteet. Prosessin on hankittava Lukko ennen kuin se pääsee kriittiseen osioonsa,ja se vapauttaa lukon, kun se on suorittanut kriittisen osan.

3.1. Miten Mutex-Lukko toimii?

nämä kaksi toimintoa lukkojen hankkimiseen ja vapauttamiseen esitetään kahden toiminnon kautta – hankkia() ja vapauttaa(). Acquire-toiminto hankkii lukon, ja release vapauttaa lukon. Mutex-lukossa on boolean-muuttuja, joka päättää, onko Lukko käytettävissä vai ei. Jos lukko on käytettävissä, niin acquire () – menetelmä onnistuu, ja lukkoa ei pidetä käytettävissä olevana. Kaikki prosessi, joka yrittää käyttää ei-käytettävissä olevaa lukkoa, on estetty, kunnes lukko on vapautettu.

seuraavassa pseudokoodissa esitetään acquire () – menetelmä:

renderöity QuickLaTeX.com

seuraava pseudokoodi osoittaa release () – menetelmän:

renderöity QuickLaTeX.com

3.2. Mutexien haitat

mutex-lukon suurin haittapuoli on se, että se päästää kierteen spinlockin, jos lukkoa ei ole saatavilla.

kun yksi säie on hankkinut lukon ja on sen kriittisessä osassa, kaikki muut lukkoa yrittävät kierteet ovat silmukassa, jossa Lanka tarkistaa määräajoin, onko Lukko käytettävissä. Näin se pyörii lukitukselle ja tuhlaa CPU-syklejä, joita jotkut muut kierteet olisivat voineet käyttää tuottavasti.

tämä on suuri ongelma yksittäisessä SUORITINKONEESSA. Spinlock tunnetaan myös nimellä busy waiting, koska lanka on” kiireinen ” odottamassa lukkoa.

3.3. Mutexien edut

vaikka mutex-lukot kärsivät spinlock-ongelmasta, niillä on kuitenkin etulyöntiasema. PROSESSINPYÖRITTÄJÄNÄ se poistaa tarpeen prosessiyhteyskytkimelle, joka muuten olisi vaatinut.

prosessin Kontekstikytkin on aikaintensiivinen toimenpide, koska se vaatii prosessitilastojen tallentamista Prosessinohjauslohkossa (PCB) ja toisen prosessin lataamista suorittimeen. On olemassa moniprosessorisia suorittimia, joissa yksi prosessi voi pyöriä yhdessä prosessoriytimessä ja toinen voi suorittaa kriittisen osionsa. Näin ollen lyhytkestoinen spinlock on joissakin skenaarioissa hyödyllisempi kuin prosessiyhteyskytkin.

Semafori

semafori on toinen apuohjelma, joka tarjoaa myös synkronointiominaisuuksia, jotka muistuttavat mutex-lukkoja, mutta on vankempi ja hienostuneempi.

semafori on kokonaislukumuuttuja, johon pääsee alustuksen lisäksi käsiksi kahdella normaalilla atomioperaatiolla – odotus() ja signaali(). Odotusoperaatiota() kutsutaan nimellä P ja signaalioperaatiota() nimellä V.

Katsotaanpa odotusoperaatiota ():

 renderöity QuickLaTeX.com

lopuksi tarkastellaan signaalin () operaatiota:

renderöity QuickLaTeX.com

!

kaikki operaatiot semaforin kokonaislukuarvoon odotuksessa() ja signaalissa() suoritetaan atomisesti. Toisin sanoen kun yksi prosessi muokkaa semaforiarvoa, mikään muu prosessi ei voi samanaikaisesti muuttaa samaa semaforiarvoa.

semaforien arvon perusteella se luokitellaan kahteen luokkaan: laskettavaan semaforiin ja binääriseen semaforiin. Laskevan semaforin arvo voi vaihdella yli 0 äärelliseen arvoon. Kun taas binäärisen semaforin arvo voi olla välillä 0 ja 1.

4.1. Semaforien laskeminen

semaforien laskeminen voi hallita tietyn resurssin N-tapausten lukumäärää. Selitetäänpä laskemisen semafori analogialla.

oletetaan, että on olemassa kirjasto, jossa on kolme työhuonetta, ja on kirjastonhoitaja, jolla on kymmenen avainta, jokainen eri huoneeseen. Kun lukija vaatii pääsyä huoneeseen, hänen on hankittava avain huoneen käyttöön. Kun lukija on lopettanut niiden käytön, hän palauttaa huoneen avaimen kirjastonhoitajalle. Kun kaikki huoneet ovat käytössä, uuden lukijan on odotettava, kunnes jo olemassa oleva lukija tyhjentää huoneen.

yllä olevassa esimerkissä resurssi on huone, ja on kymmenen tapauksia siitä. Näitä tapauksia hallitaan laskusemaforin avulla, joka alustetaan kymmenellä. Tätä semaforin arvoa hallitaan semaforin odotus – () ja signaalimenetelmillä (). Seuraava kaavio havainnollistaa tätä:

4.2. Binäärisellä Semaforilla

binäärisellä semaforilla on kaksi mahdollista arvoa, 0 ja 1. Jos semaforin hallinnoima resurssi on käytettävissä, niin semaforin arvo on 1. Muussa tapauksessa se on asetettu arvoon 0, mikä osoittaa, että resurssi ei ole käytettävissä.

binäärisellä semaforilla on sama toiminnallisuus kuin mutex-lukolla. Järjestelmät, jotka eivät tue mutex-lukkoja, voivat hyödyntää binäärisiä semaforeita saman toiminnallisuuden saavuttamiseksi.

seuraava kaavio havainnollistaa binäärisen semaforin:

Semafori vs. Mutex

seuraavassa taulukossa on yhteenveto semaforin ja mutex-lukkojen tärkeistä ominaisuuksista:

renderöity QuickLaTeX.com

johtopäätös

tässä kirjoituksessa käsittelimme muteksien ja semaforien eri puolia.

ensin keskusteltiin kriittisestä osiosta ja siitä, tarvitaanko mutexia tai semaforia kontrolloimaan kriittisen osan toteutusta. Sitten puhuimme mutexista ja semaforesta.

lopuksi vertasimme semaforia ja mutexia.

jos sinulla on muutaman vuoden kokemus tietojenkäsittelytieteestä tai tutkimuksesta, ja olet kiinnostunut jakamaan tämän kokemuksen yhteisön kanssa, tutustu Panosohjeisiimme.

Vastaa

Sähköpostiosoitettasi ei julkaista.