Mis on semafoor?
Semafoor on lihtsalt muutuja, mis pole negatiivne ja mida niidid jagavad. Semafoor on signaalimehhanism ja semafooris ootavat lõime saab signaalida teise lõimega. Protsessi sünkroniseerimiseks kasutatakse kahte aatomitoimingut, 1) ootamist ja 2) signaali.
Semafoor kas lubab või keelab juurdepääsu ressursile, mis sõltub selle seadistamisest.
Selles opsüsteemi (OS) õpetuses saate teada:
- Iseloomulik semafoorile
- Mis on semafoor?
- Semafooride tüübid
- Näide semaforist
- Oote- ja signaalitoimingud semafoorides
- Semafori ja binaarse semafori lugemine
- Erinevus semafori ja Mutexi vahel
- Semafooride eelised
- Semaforide puudus
Iseloomulik semafoorile
Siin on semaforile iseloomulikud:
- See on mehhanism, mida saab kasutada ülesannete sünkroonimiseks.
- See on madala taseme sünkroonimismehhanism.
- Semafoor hoiab alati mitte-negatiivset täisarvu.
- Semafoori saab rakendada testimisoperatsioonide ja katkestustega, mis tuleks täita failide kirjeldajate abil.
Semafooride tüübid
Kaks tavalist semafooriliiki on
- Semafooride lugemine
- Binaarsed semaforid.
Semafooride lugemine
Seda tüüpi semafoorid kasutavad loendust, mis aitab ülesannet mitu korda omandada või vabastada. Kui esialgne arv = 0, tuleks loendussemafoor luua kättesaamatus olekus.
Kui aga loend on> 0, luuakse semafor olemasolevas olekus ja sellel olevate märkide arv võrdub tema loendiga.
Binaarsed semaforid
Binaarsemafoorid sarnanevad semafooride loendamisega üsna sarnaselt, kuid nende väärtus piirdub 0 ja 1. Seda tüüpi semaforide korral töötab ootefunktsioon ainult siis, kui semafor = 1, ja signaalioperatsioon õnnestub, kui semafor = 0. Seda on lihtne rakendada kui semaforide loendamine.
Näide semaforist
Allpool toodud programm on järkjärguline rakendamine, mis hõlmab semafori kasutamist ja deklareerimist.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Oote- ja signaalitoimingud semafoorides
Mõlemat toimingut kasutatakse protsesside sünkroonimise rakendamiseks. Selle semaforioperatsiooni eesmärk on saada vastastikune tõrjutus.
Oodake toimimist
Seda tüüpi semaforioperatsioonid aitavad teil kontrollida ülesande sisestamist kriitilises jaotises. Kui aga ootamise väärtus on positiivne, vähendatakse ooteargumendi X väärtust. Negatiivse või nullväärtuse korral ei tehta ühtegi toimingut. Seda nimetatakse ka P (S) operatsiooniks.
Kui semafori väärtus on vähenenud, mis muutub negatiivseks, hoitakse käsku seni, kuni nõutavad tingimused on täidetud.
Copy CodeP(S){while (S<=0);S--;}
Signaali toimimine
Seda tüüpi semafooroperatsioone kasutatakse ülesande kriitilisest sektsioonist väljumise juhtimiseks. See aitab suurendada argumendi väärtust 1 võrra, mida tähistatakse kui V (S).
Copy CodeP(S){while (S>=0);S++;}
Semafori ja binaarse semafori lugemine
Siin on mõned suured erinevused loendamise ja binaarse semafori vahel:
Semafori lugemine | Binaarne semafoor |
Vastastikune tõrjutus puudub | Vastastikune välistamine |
Mis tahes täisarv | Ainult väärtus 0 ja 1 |
Rohkem kui üks pesa | Ainult üks pesa |
Esitage protsesside komplekt | Sellel on vastastikune tõrjutusmehhanism. |
Erinevus semafori ja Mutexi vahel
Parameetrid | Semafoor | Mutex |
Mehhanism | See on teatud tüüpi signaalimehhanism. | See on lukustusmehhanism. |
Andmetüüp | Semafoor on täisarvu muutuja. | Mutex on lihtsalt objekt. |
Muutmine | Oote- ja signaalitoimingud võivad muuta semaforit. | Seda muudab ainult protsess, mis võib ressurssi taotleda või välja anda. |
Ressursside haldamine | Kui ükski ressurss pole vaba, nõuab protsess ressurssi, mis peaks käivitama ooteaja. See peaks ootama, kuni semafori arv on suurem kui 0. | Kui see on lukustatud, peab protsess ootama. Protsessi tuleks hoida järjekorras. Sellele tuleb juurde pääseda ainult siis, kui muteks on lukustamata. |
Niit | Teil võib olla mitu programmi lõime. | Mutexis võib olla mitu programmi lõime, kuid mitte samaaegselt. |
Omandiline kuuluvus | Väärtust saab muuta mis tahes protsessiga, mis ressursi vabastab või hankib. | Objektiluku vabastab ainult protsess, mille käigus on sellel lukk saavutatud. |
Tüübid | Semafooride tüübid on semafori ja binaarse semafori loendamine | Mutexil pole alamtüüpe. |
Operatsioon | Semafoorväärtust muudetakse ootamise () ja signaali () abil. | Mutex-objekt on lukustatud või lukustamata. |
Ressursid Hõive | See on hõivatud, kui kõiki ressursse kasutatakse ja ressurssi taotlev protsess sooritab ootamise () operatsiooni ja blokeerib ennast, kuni semafooride arvuks saab> 1. | Kui objekt on juba lukustatud, ootab ressursse nõudev protsess enne süsteemi lukustuse vabastamist järjekorda. |
Semafooride eelised
Siin on semafori kasutamise plussid / eelised:
- See võimaldab kriitilisele sektsioonile juurde pääseda mitmel lõimel
- Semaforid on masinast sõltumatud.
- Semafoorid rakendatakse mikrotuuma masinast sõltumatus koodis.
- Need ei luba mitmel protsessil kriitilisse sektsiooni siseneda.
- Kuna semafooris on kiire ootamine, ei raiska kunagi protsessi aeg ja ressursid.
- Need on masinast sõltumatud, mida tuleks käivitada mikrotuuma masinast sõltumatu koodiga.
- Need võimaldavad ressursse paindlikult hallata.
Semaforide puudus
Siin on miinused / semafori puudused
- Semafori üks suurimaid piiranguid on prioriteetide inversioon.
- Operatsioonisüsteem peab jälgima kõiki ootekõnesid ja semafori signaale.
- Nende kasutamist ei sunnita kunagi, kuid seda ainult kokkuleppel.
- Semafori ummikute vältimiseks tuleb operatsioonid Oota ja signaal täita õiges järjekorras.
- Semafori programmeerimine on keeruline, seega on tõenäosus vastastikust tõrjutust mitte saavutada.
- Samuti ei ole see otstarbekas meetod suuremahuliseks kasutamiseks, kuna nende kasutamine viib modulaarsuse kadumiseni.
- Semafor on altim programmeerija vigadele.
- See võib programmeerija vea tõttu põhjustada ummikseisu või vastastikuse tõrjutuse rikkumise.
Kokkuvõte:
- Semafoor on määratletud kui muutuja, mis pole negatiivne ja mida niidid jagavad.
- See on mehhanism, mida saab kasutada ülesannete sünkroonimiseks.
- Semafori loendamisel kasutatakse loendust, mis aitab ülesannet mitu korda omandada või vabastada.
- Binaarsed semaforid sarnanevad semaforide loendamisega üsna sarnaselt, kuid nende väärtus piirdub 0 ja 1 väärtusega.
- Ootaoperatsioon aitab teil kontrollida ülesande sisestamist kriitilisse sektsiooni
- Signaali semafori operatsiooni kasutatakse ülesande kriitilisest sektsioonist väljumise juhtimiseks
- Semafoori loendamisel puudub vastastikune tõrjutus, samas kui binaarsemafooril on vastastikune tõrjutus
- Semafoor tähendab signaalimehhanismi, samas kui Mutex on lukustusmehhanism
- Semafoor lubab kriitilisele sektsioonile juurde pääseda mitmel niidil
- Semafori üks suurimaid piiranguid on prioriteetide inversioon.