Kas yra semaforas?
Semaforas yra tiesiog kintamasis, kuris nėra neigiamas ir bendrinamas tarp gijų. Semaforas yra signalinis mechanizmas, o semaforą laukiančią giją gali signalizuoti kita gija. Proceso sinchronizavimui naudojamos dvi atominės operacijos: 1) laukimas ir 2) signalas.
Semaforas leidžia arba neleidžia naudotis ištekliu, o tai priklauso nuo jo nustatymo.
Šioje operacinės sistemos (OS) pamokoje sužinosite:
- Būdinga semaforai
- Kas yra semaforas?
- Semaforų tipai
- Semaforo pavyzdys
- Laukimo ir signalo operacijos semaforuose
- Semaforo skaičiavimas prieš dvejetainę semaforą
- Skirtumas tarp semaforo ir „Mutex“
- Semaforų pranašumai
- Semaforų trūkumas
Būdinga semaforai
Čia yra būdingi semaforui:
- Tai yra mechanizmas, kuris gali būti naudojamas užduočių sinchronizavimui užtikrinti.
- Tai žemo lygio sinchronizavimo mechanizmas.
- Semaforas visada turės neigiamą sveikojo skaičiaus vertę.
- Semaforas gali būti įgyvendinamas naudojant bandymo operacijas ir pertraukimus, kurie turėtų būti vykdomi naudojant failų aprašus.
Semaforų tipai
Dvi paplitusios semaforų rūšys yra
- Semaforų skaičiavimas
- Dvejetainės semaforos.
Semaforų skaičiavimas
Šio tipo semaforai naudoja skaičiavimą, kuris padeda užduotį daug kartų įsigyti ar išleisti. Jei pradinis skaičius = 0, skaičiavimo semaforas turėtų būti sukurtas nepasiekiamoje būsenoje.
Tačiau, jei skaičius yra> 0, semaforas sukuriamas esama būsena ir jo turimų žetonų skaičius yra lygus jo skaičiui.
Dvejetainės semaforos
Dvejetainės semaforos yra gana panašios į semaforų skaičiavimą, tačiau jų vertė ribojama 0 ir 1. Šio tipo semaforų laukimo operacija veikia tik tuo atveju, jei semaforas = 1, o signalo operacija pavyksta, kai semaforas = 0. Lengva įgyvendinti nei skaičiuoti semaforas.
Semaforo pavyzdys
Žemiau pateikta programa yra žingsnis po žingsnio įgyvendinimas, apimantis semaforo naudojimą ir deklaravimą.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Laukimo ir signalo operacijos semaforuose
Abi šios operacijos naudojamos procesų sinchronizavimui įgyvendinti. Šios semaforinės operacijos tikslas yra gauti abipusę atskirtį.
Palaukite operacijos
Šio tipo semaforo operacijos padeda valdyti užduoties įvedimą į kritinį skyrių. Tačiau jei laukimo vertė yra teigiama, tada laukimo argumento X vertė yra mažinama. Neigiamos arba nulinės vertės atveju jokia operacija nevykdoma. Tai dar vadinama P (S) operacija.
Sumažinus semaforo vertę, kuri tampa neigiama, komanda laikoma tol, kol bus įvykdytos reikiamos sąlygos.
Copy CodeP(S){while (S<=0);S--;}
Signalo veikimas
Šio tipo semaforo operacijos naudojamos valdyti užduotį iš kritinio skyriaus. Tai padeda padidinti argumento vertę 1, kuri žymima kaip V (S).
Copy CodeP(S){while (S>=0);S++;}
Semaforo skaičiavimas prieš dvejetainę semaforą
Štai keletas pagrindinių skirtumų tarp skaičiavimo ir dvejetainės semaforos:
Skaičiuojant semaforą | Dvejetainis semaforas |
Jokios abipusės atskirties | Abipusė atskirtis |
Bet kuri sveiko skaičiaus reikšmė | Tik 0 ir 1 vertė |
Daugiau nei vienas lizdas | Tik vienas lizdas |
Pateikite procesų rinkinį | Jis turi abipusį pašalinimo mechanizmą. |
Skirtumas tarp semaforo ir „Mutex“
Parametrai | Semaforas | Mutex |
Mechanizmas | Tai yra signalizacijos mechanizmo tipas. | Tai yra fiksavimo mechanizmas. |
Duomenų tipas | Semaforas yra sveikasis skaičius. | Mutexas yra tik objektas. |
Modifikacija | Laukimo ir signalo operacijos gali modifikuoti semaforą. | Ją modifikuoja tik procesas, kuris gali pateikti užklausą arba išleisti šaltinį. |
Resursu valdymas | Jei nė vienas išteklius nėra laisvas, procesui reikalingas išteklius, kuris turėtų atlikti laukimo operaciją. Ji turėtų palaukti, kol semaforo skaičius bus didesnis nei 0. | Jei jis užrakintas, proceso reikia laukti. Procesas turėtų būti laikomas eilėje. Tai reikia pasiekti tik tada, kai „mutex“ yra atrakintas. |
Siūlas | Galite turėti kelias programos gijas. | „Mutex“ galite turėti kelias programos gijas, bet ne vienu metu. |
Nuosavybė | Vertę galima pakeisti bet kuriuo procesu išleidžiant ar gaunant šaltinį. | Objekto užraktą atleidžia tik tas procesas, kuris užfiksavo jo užraktą. |
Tipai | Semaforų tipai yra semaforų ir dvejetainių semaforų skaičiavimas ir | „Mutex“ neturi potipių. |
Operacija | Semaforo vertė modifikuojama naudojant laukimo () ir signalo () operacijas. | „Mutex“ objektas yra užrakintas arba atrakintas. |
Išteklių užimtumas | Jis užimtas, jei naudojami visi ištekliai, o procesas, kurio metu prašoma išteklių, atlieka laukimo () operaciją ir blokuoja save, kol semaforų skaičius taps> 1. | Jei objektas jau užrakintas, procesas, reikalaujantis išteklių, laukia ir, prieš paleidžiant užraktą, sistemos laukia eilėje. |
Semaforų pranašumai
Čia yra privalumai / privalumai naudojant semaforą:
- Tai leidžia daugiau nei vienai gijai pasiekti kritinę sekciją
- Semaforai nepriklauso nuo mašinos.
- Semaforos yra įdiegtos nuo kompiuterio nepriklausomame mikrobranduolio kode.
- Jie neleidžia keliems procesams patekti į kritinę sekciją.
- Kadangi semaforuose laukia įtemptas laukimas, niekada neišeikvojama proceso laiko ir išteklių.
- Jie yra nepriklausomi nuo mašinų, kurie turėtų būti paleisti iš kompiuterio nepriklausomo mikrobranduolio kodo.
- Jie leidžia lanksčiai valdyti išteklius.
Semaforų trūkumas
Čia yra semaforo trūkumai / trūkumai
- Vienas didžiausių semaforo apribojimų yra prioritetinė inversija.
- Operacinė sistema turi sekti visus laukimo skambučius ir signalizuoti semaforą.
- Jų naudojimas niekada nevykdomas, tačiau tai taikoma tik pagal susitarimą.
- Norint išvengti aklavietės semaforoje, laukimo ir signalo operacijas reikia atlikti teisinga tvarka.
- Semaforų programavimas yra sudėtingas, todėl yra tikimybės nepasiekti abipusės atskirties.
- Tai taip pat nėra praktiškas metodas plačiam naudojimui, nes dėl jų prarandamas moduliškumas.
- Semaforas yra labiau linkęs į programuotojo klaidas.
- Dėl programuotojo klaidos tai gali sukelti aklavietę arba abipusės atskirties pažeidimą.
Santrauka:
- Semaforas apibrėžiamas kaip kintamasis, kuris nėra neigiamas ir bendrinamas tarp gijų.
- Tai yra mechanizmas, kuris gali būti naudojamas užduočių sinchronizavimui užtikrinti.
- Skaičiuojant semaforą naudojamas skaičiavimas, kuris padeda užduotį daug kartų įgyti ar išleisti.
- Dvejetainės semaforos yra gana panašios į semaforų skaičiavimą, tačiau jų vertė ribojama 0 ir 1.
- Laukimo operacija padeda kontroliuoti užduoties įvedimą į kritinį skyrių
- Signalo semaforo operacija naudojama užduoties išėjimui iš kritinio skyriaus valdyti
- Skaičiuojant semaforą nėra abipusės, o dvejetainėje - abipusė atskirtis
- Semaforas reiškia signalizacijos mechanizmą, o „Mutex“ yra fiksavimo mechanizmas
- Semaforas leidžia daugiau nei vienai gijai pasiekti kritinį skyrių
- Vienas didžiausių semaforo apribojimų yra prioritetinė inversija.