Mis on Semaphore? Loendamine, binaarsed tüübid koos näitega

⚡ Nutikas kokkuvõte

Semaphore Operatsioonisüsteemis on see mittenegatiivne täisarvuline muutuja, mida jagavad lõimed ja mis koordineerib juurdepääsu jagatud ressurssidele kahe aatomioperatsiooni, ootamise ja signaalimise, kaudu, vältides võidujooksutingimusi protsesside sünkroniseerimise ajal.

  • 🔢 Määratlus: Semafor on mittenegatiivne täisarvmuutuja, mis annab märku, kas jagatud ressurss on konkureerivatele lõimedele saadaval.
  • ⚙️ Kaks Operatused: Ooteoperatsioon (P) taotleb ressurssi ja vähendab loendurit, samal ajal kui signaalioperatsioon (V) vabastab selle ja suurendab loendurit.
  • 🔁 Loendamise tüüp: Loendav semafor võimaldab kindlaksmääratud arvul niitidel samaaegselt kasutada identseid ressursse.
  • 🔒 Binaarne tüüp: Binaarne semafor on piiratud väärtustega 0 ja 1, seega käitub see nagu lihtne vastastikuse välistamise lukk.
  • ⚠️ Kompromissid: Semaphoreid on masinast sõltumatud ja paindlikud, kuid vale kasutamise korral on nende prioriteedi inversiooni ja ummikseisu oht.
  • 🤖 Tehisintellekti abi: Masinõppe ja tehisintellekti abilised saavad modelleerida samaaegsust ning genereerida korrektseid oote- ja signaalijadasid.

Semaphore in Operating System

Mis on Semaphore?

Semaphore on lihtsalt muutuja, mis ei ole negatiivne ja jagatud lõimede vahel. Semafor on signalisatsioonimehhanism ja semaforil ootavast niidist saab märku anda teine ​​niit. See kasutab kahte aatomioperatsiooni: 1) oodake ja 2) Signal protsessi sünkroonimiseks.

Semafor kas lubab või keelab juurdepääsu ressursile, mis sõltub sellest, kuidas see on seadistatud.

Karakteristikud Semaphore

Siin on semafori omadused:

  • See on mehhanism, mida saab kasutada ülesannete sünkroonimiseks.
  • See on madala taseme sünkroonimismehhanism.
  • Semaphore sisaldab alati mittenegatiivset täisarvu.
  • Semaphore saab realiseerida testoperatsioonide ja katkestuste abil, mida tuleks käivitada failideskriptorite abil.

Tüübid Semaphores

Kaks levinumat semafori tüüpi on:

  • Semaforide loendamine
  • Binaarsed semaforid

Loendamine Semaphores

Seda tüüpi Semaphore kasutab loendurit, mis aitab ülesandel mitu korda omandada või vabastada. Kui algne loendur = 0, tuleks loendava semafor luua kättesaamatus olekus.

Loendamine Semaphores

Kui aga arv on > 0, luuakse semafor saadaolevas olekus ja sellel olevate märkide arv võrdub selle arvuga.

Binaarne Semaphores

Binaarsed semafoorid on üsna sarnased semafooride loendamisega, kuid nende väärtus on piiratud 0 ja 1-ga. Seda tüüpi semafooris töötab ooteoperatsioon ainult siis, kui semafoor = 1, ja signaalioperatsioon õnnestub, kui semafoor = 0. Seda on lihtsam rakendada kui semafooride loendamist.

Binaarne Semaphores

Näide Semaphore

Allpool toodud programm on samm-sammult rakendatav ja hõlmab semafori kasutamist ja deklareerimist.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Oota ja Signal Operasisse Semaphores

Mõlemat toimingut kasutatakse rakendamiseks protsesside sünkroonimine. Selle semafori operatsiooni eesmärk on saavutada vastastikune välistamine.

Ootama Operamine

Seda tüüpi semaforoperatsioon aitab teil kontrollida ülesande sisestamist kriitilisse sektsiooni. Kui aga ootamise väärtus on positiivne, siis ooteargumendi X väärtust vähendatakse. Negatiivse või nullväärtuse korral toimingut ei teostata. Seda nimetatakse ka P(S)-operatsiooniks.

Pärast semafori väärtuse vähendamist, mis muutub negatiivseks, hoitakse käsku all, kuni nõutud tingimused on täidetud.

P(S)
{
    while (S<=0);
    S--;
}

Signal töö

Seda tüüpi Semaphore toimingut kasutatakse ülesande väljumise juhtimiseks kriitilisest jaotisest. See aitab suurendada argumendi väärtust 1 võrra, mida tähistatakse kui V(S).

P(S)
{
    while (S>=0);
    S++;
}

Loendamine Semaphore vs binaarne Semaphore

Siin on mõned peamised erinevused loendamise ja binaarse semafori vahel:

Loendamine Semaphore Binaarne Semaphore
Ei mingit vastastikust välistamist Vastastikune välistamine
Mis tahes täisarv Väärtus ainult 0 ja 1
Rohkem kui üks pesa Ainult üks pesa
Esitage protsesside komplekt Sellel on vastastikune välistamismehhanism.

Erinevus Semaphore vs. Mutex

Allolev tabel võrdleb semafor koos mutexiga mitme parameetri järgi:

parameetrid Semaphore mutexid
Mehhanism See on teatud tüüpi signaalimismehhanism. See on lukustusmehhanism.
Andmetüüp Semaphore on täisarvuline muutuja. Mutex on lihtsalt objekt.
Muudatus Ootamise ja signaali toimingud võivad semafori muuta. Seda muudab ainult protsess, mis võib ressurssi taotleda või vabastada.
Ressursside juhtimine Kui ükski ressurss pole vaba, nõuab protsess ressurssi, mis peaks käivitama ootetoimingu. See peaks ootama, kuni semaforide arv on suurem kui 0. Kui see on lukus, peab protsess ootama. Protsessi tuleks hoida järjekorras. Sellele on vaja juurde pääseda ainult siis, kui mutex on lukustamata.
Keere Teil võib olla mitu programmilõimi. Mutexis võib olla mitu programmilõimi, kuid mitte korraga.
Omandiõigus Väärtust saab muuta mis tahes ressursi vabastamise või hankimise protsessiga. Objekti lukustus vabastatakse ainult protsessi abil, mis on selle luku saanud.
Liigid Tüübid Semaphore loevad semafori ja kahendsemafori. Mutexil pole alatüüpe.
Operamine Semaphore väärtust muudetakse ootamise () ja signaali () abil. Mutexi objekt on lukustatud või lukustamata.
Ressursid hõivatus See on hõivatud, kui kõik ressursid on kasutusel ja ressurssi taotlev protsess sooritab ootetoimingu () ja blokeerib end, kuni semaforide arv muutub >1. Juhul, kui objekt on juba lukustatud, ootab ressursse taotlev protsess ja süsteem seab selle järjekorda enne luku vabastamist.

Eelised Semaphores

Siin on kasutamise plussid/kasud Semaphore:

  • See võimaldab kriitilisele sektsioonile juurde pääseda rohkem kui ühel niidil.
  • Semaphores on masinast sõltumatud.
  • Semaphores on realiseeritud mikrokerneli masinast sõltumatus koodis.
  • Need ei luba mitmel protsessil kriitilisse sektsiooni siseneda.
  • Kuna semaforis on kiire ootamine, ei raisata kunagi protsessi aega ja ressursse.
  • Need on masinast sõltumatud, mida tuleks käivitada mikrokerneli masinast sõltumatus koodis.
  • Need võimaldavad ressursse paindlikult hallata.

Puudused Semaphores

Siin on semafori miinused/puudused:

  • Semafori üks suurimaid piiranguid on prioriteedi inversioon.
  • Operatsioonisüsteem peab säilitama track kõigist oote- ja signaalisemafori kõnedest.
  • Nende kasutamist ei jõustata kunagi, vaid see on ainult kokkuleppeline.
  • Semaforis ummikseisu vältimiseks tuleb Oodata ja Signal toimingud tuleb sooritada õiges järjekorras.
  • Semaphore Programmeerimine on keeruline, seega on võimalus, et vastastikust välistamist ei saavutata.
  • Samuti ei ole see praktiline meetod suuremahuliseks kasutamiseks, kuna nende kasutamine viib modulaarsuse kadumiseni.
  • Semaphore on rohkem altid programmeerija vigadele.
  • See võib põhjustada ummikseis või vastastikuse välistamise rikkumine programmeerija vea tõttu.

KKK

Edsger Dijkstra võttis semaforid kasutusele 1965. aastal. Oote- ja signaalioperatsioone nimetatakse ka P-ks ja V-ks, mis tulenevad hollandi sõnadest proberen (test) ja verhogen ( juurdekasv).

Puhas loendav semafor jääb mittenegatiivseks, kuid paljudes rakendustes laseb see väärtus negatiivseks minna. Selle suurusjärk võrdub siis semafori järjekorras ootavate protsesside arvuga.

Semaphorekoordineerivad klassikalisi samaaegsusprobleeme, näiteks tootja-tarbija (piiratud puhver) ja lugeja-kirjutaja. Nad piiravad juurdepääsu piiratud hulgale identsetele ressurssidele, kaitstes jagatud andmeid.

Mutexil on omanik, seega ainult lukustav lõim saab selle avada. Binaarsel semaforil pole omanikku, seega saab iga lõim sellest märku anda. Nad ei ole identsed.

Prioriteedi inversioon toimub siis, kui madala prioriteediga lõim hoiab semafori, mida kõrge prioriteediga lõim vajab, sundides kiireloomulist lõime ootama. Prioriteedi pärimisprotokollid vähendavad seda.

Enamik tänapäevaseid platvorme kasutab semafore: POSIX sem_t C-keeles Semaphore klassi sisse Javaja keermestamine.Semaphore in PythonArendajad ehitavad seda harva nullist.

Masinõpe saab analüüsida teostust tracennustada konkurentsi, häälestada, kui palju lube loendamise semafor omab, ja märgistada tõenäolisi ummikseisusid, abiping insenerid kavandavad turvalisema samaaegsuse.

Jah. Tehisintellekti assistendid, näiteks GitHub Copilot, saavad genereerida ootamis- ja signaalimisvorminguid, soovitada lukustusjärjekorda ja selgitada võistlustingimusi. RevVaadake väljundit hoolikalt, kuna peened ummikseisud kaovad kergesti ära.

Võta see postitus kokku järgmiselt: