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 pamokoje sužinosite:
- Kas yra „Mutex“?
- Semaforo naudojimas
- Mutex naudojimas
- Skirtumas tarp semaforo ir „Mutex“
- Dažni klaidingi supratimai apie muteksą ir semaforą
- Semaforo privalumai
- „Mutex“ privalumai
- Semaforų trūkumas
- „Mutex“ trūkumai
Kas yra „Mutex“?
Visa „Mutex“ forma yra abipusio išskyrimo objektas. Tai specialus dvejetainės semaforos tipas, naudojamas kontroliuojant prieigą prie bendro šaltinio. Jis apima prioritetinį paveldėjimo mechanizmą, kad būtų išvengta išplėstinių prioritetinių inversijos problemų. Tai leidžia dabartines aukštesnio prioriteto užduotis kuo trumpiau laikyti užblokuotoje būsenoje. Tačiau prioritetinis paveldėjimas neištaiso prioriteto inversijos, o tik sumažina jo poveikį.
PAGRINDINIAI SKIRTUMAI
- „Mutex“ yra fiksavimo mechanizmas, o „semaforas“ yra signalizavimo mechanizmas
- Mutexas yra tik objektas, o semaforas yra sveikas skaičius
- „Mutex“ neturi potipio, o semaforai turi du tipus, kurie skaičiuoja semaforą ir dvejetainę semaforą.
- Semaforas palaiko laukimo ir signalo operacijų modifikavimą, o „Mutex“ modifikuoja tik procesas, kuris gali paprašyti arba paleisti šaltinį.
- Semaforo reikšmė keičiama naudojant laukimo () ir signalo () operacijas, kita vertus, „Mutex“ operacijos yra užrakintos arba atrakintos.
Semaforo naudojimas
Vieno buferio atveju galime atskirti 4 KB buferį į keturis 1 KB buferius. Semaforą galima susieti su šiais keturiais buferiais. Tai leidžia vartotojams ir gamintojams vienu metu dirbti su skirtingais buferiais.
Mutex naudojimas
Mutexas suteikia abipusę atskirtį, kuri gali būti tiek gamintojas, tiek vartotojas, galintys turėti raktą (muteksą) ir tęsti savo darbą. Kol gamintojas užpildo buferį, vartotojas turi laukti ir atvirkščiai. Naudojant „Mutex lock“, visą buferį gali dirbti tik vienas siūlas.
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. | „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. |
Bendri faktai apie muteksą ir semaforą
Štai keletas bendrų faktų apie „Mutex“ ir „Semaforą“:
- Tik viena užduotis gali įgyti muteksą. Taigi, su „mutex“ yra susijusios nuosavybės teisės ir tik savininkas gali išleisti „mutex“.
- Mutexo ir semaforo naudojimo priežastys yra skirtingos, galbūt dėl jų įgyvendinimo panašumo, muteksas būtų vadinamas dvejetainiu semaforu.
- Vienas labai žinomas klaidingas supratimas yra tas, kad muteksai ir semaforai yra beveik vienodi, tik skirtumas yra tas, kad muteksas sugeba suskaičiuoti iki 1, o semaforas - nuo 0 iki N.
- Tarp dvejetainės semaforos ir mutekso visada yra netikrumas. Galite išgirsti, kad muteksas yra dvejetainis semaforas, kuris nėra teisingas.
Semaforo privalumai
Č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.
„Mutex“ privalumai
Čia yra svarbūs „Mutex“ privalumai / privalumai
- „Mutexes“ yra tik paprastos spynos, gautos prieš įeinant į kritinę sekciją ir tada ją atleidžiant.
- Kadangi kritiniu ruožu bet kuriuo metu yra tik viena gija, varžybų sąlygų nėra, o duomenys visada išlieka nuoseklūs.
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 metodas, 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ą.
„Mutex“ trūkumai
Čia yra „Mutex“ trūkumai / trūkumai
- Jei gija gauna užraktą ir eina miegoti arba ji yra užkirsta kelią, kita gija gali negalėti judėti į priekį. Tai gali sukelti badą.
- Jo negalima užrakinti ar atrakinti iš kito konteksto nei tas, kuris jį įgijo.
- Kritiniame skyriuje vienu metu turėtų būti leidžiama tik viena gija.
- Įprastas diegimas gali sukelti laukimo būseną, kuri sugaišta procesoriaus laiką.