Procesų sinchronizavimas: OS kritinio skyriaus problema

Turinys:

Anonim

Kas yra procesų sinchronizavimas?

Procesų sinchronizavimas yra užduotis koordinuoti procesų vykdymą taip, kad nė vienas procesas negalėtų pasiekti tų pačių bendrų duomenų ir išteklių.

Jis specialiai reikalingas kelių procesų sistemoje, kai kartu veikia keli procesai, o daugiau nei vienas procesas vienu metu bando pasiekti prieigą prie tų pačių bendrų išteklių ar duomenų.

Tai gali sukelti bendrų duomenų nenuoseklumą. Taigi vieno proceso atliktas pakeitimas nebūtinai atsispindi, kai kiti procesai pasiekia tuos pačius bendrus duomenis. Norint išvengti tokio tipo duomenų nenuoseklumo, procesus reikia sinchronizuoti tarpusavyje.

Šioje operacinės sistemos pamokoje sužinosite:

  • Kas yra procesų sinchronizavimas?
  • Kaip veikia procesų sinchronizavimas?
  • Programos skyriai
  • Kas yra kritinio skyriaus problema?
  • Kritinio skyriaus taisyklės
  • Kritinio skyriaus sprendimai

Kaip veikia procesų sinchronizavimas?

Pvz., Procesas A keičia duomenis atminties vietoje, o kitas procesas B bando nuskaityti duomenis iš tos pačios atminties vietos. Didelė tikimybė, kad antrojo proceso metu perskaityti duomenys bus klaidingi.

Programos skyriai

Čia yra keturi esminiai kritinio skyriaus elementai:

  • Įėjimo skyrius: Tai yra proceso dalis, kuri nusprendžia įvesti konkretų procesą.
  • Kritinis skyrius: Ši dalis leidžia vienam procesui įvesti ir modifikuoti bendrą kintamąjį.
  • Išėjimo skyrius: Išėjimo skyrius leidžia kitam procesui, laukiančiam įrašo skyriuje, patekti į kritinius skyrius. Ji taip pat patikrina, ar procesas, kuris baigė vykdyti, turėtų būti pašalintas per šį skyrių.
  • Likusi dalis: visos kitos kodo dalys, kurios nėra kritinių, įrašų ir išėjimų skyriuose, yra žinomos kaip likusi dalis.

Kas yra kritinio skyriaus problema?

Kritinė sekcija yra kodo segmentas, prie kurio galima pasiekti signalo procesą tam tikru laiko momentu. Skyrius susideda iš bendrų duomenų išteklių, prie kurių reikia prisijungti naudojant kitus procesus.

  • Įvedimą į kritinį skyrių tvarko laukimo () funkcija ir jis pateikiamas kaip P ().
  • Išėjimą iš kritinės sekcijos valdo signalo () funkcija, vaizduojama kaip V ().

Kritiniame skyriuje galima vykdyti tik vieną procesą. Kiti procesai, laukiantys, kol bus įvykdytas jų kritinis skyrius, turi laukti, kol dabartinis procesas užbaigs jo vykdymą.

Kritinio skyriaus taisyklės

Kritinis skyrius turi įgyvendinti visas tris taisykles:

  • Abipusis išskyrimas: Abipusis išskyrimas yra 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ų. Kritiniame skyriuje vienu metu gali būti vykdomas ne daugiau kaip vienas procesas.
  • Pažanga: Šis sprendimas naudojamas, kai niekas nėra kritiniame skyriuje, o kažkas nori. Tada tie procesai, kurie nėra jų priminimų skiltyje, turėtų nuspręsti, kas turėtų įeiti per tam tikrą laiką.
  • Ribotas laukimas: Kai procesas pateikia užklausą patekti į kritinę sekciją, yra tam tikras apribojimas, kiek procesų gali patekti į jų kritinę sekciją. Taigi, kai pasiekiama riba, sistema turi leisti procesui prašyti patekti į kritinį skyrių.

Kritinio skyriaus sprendimai

Procesų sinchronizavime svarbiausias vaidmuo tenka kritiniam skyriui, todėl problema turi būti išspręsta.

Štai keletas plačiai naudojamų metodų, kaip išspręsti kritinio skyriaus problemą.

Petersono sprendimas

Petersono sprendimas yra plačiai naudojamas kritinių skyrių problemų sprendimas. Šį algoritmą sukūrė informatikas Petersonas, todėl jis įvardijamas kaip Petersono sprendimas.

Šiame sprendime, kai procesas vykdomas kritinėje būsenoje, kitas procesas vykdo tik likusią kodo dalį ir gali atsitikti priešingai. Šis metodas taip pat padeda įsitikinti, kad kritiniame skyriuje konkrečiu metu vyksta tik vienas procesas.

Pavyzdys

PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
  • Tarkime, kad yra N procesų (P1, P2, ... PN), o kiekvienam procesui tam tikru momentu reikia patekti į kritinį skyrių
  • Palaikomas N dydžio FLAG [] masyvas, kuris pagal nutylėjimą yra klaidingas. Taigi, kai procesui reikia patekti į kritinę sekciją, jis turi nustatyti savo žymą kaip teisingą. Pvz., Jei Pi nori įvesti, jis nustatys FLAG [i] = TRUE.
  • Kitas kintamasis, vadinamas TURN, nurodo proceso numerį, kuris šiuo metu laukia įvedimo į CS.
  • Procesas, įeinantis į kritinę sekciją išeinant, pakeis TURN į kitą skaičių iš paruoštų procesų sąrašo.
  • Pavyzdys: posūkis yra 2, tada P2 patenka į kritinį skyrių, o išvažiuodamas iš posūkio = 3, todėl P3 nutrūksta iš laukimo ciklo.

Sinchronizavimo aparatinė įranga

Kartais kritinės dalies problemos sprendžiamos ir aparatine įranga. Kai kuri operacinė sistema siūlo užrakto funkciją, kai procesas įgyja užraktą, kai įeina į kritinių skyrių, ir paleidžia užraktą.

Taigi, kai kitas procesas bando patekti į kritinę sekciją, jis negalės patekti, nes yra užrakintas. Tai gali padaryti tik tuo atveju, jei jis yra laisvas, įsigydamas patį užraktą.

„Mutex“ spynos

Sinchronizavimo aparatūra nėra paprastas metodas visiems, todėl taip pat buvo įdiegtas griežtas programinės įrangos metodas, žinomas kaip „Mutex Locks“.

Taikant šį metodą, kodo įvedimo skyriuje LOCK gaunama iš kritinių išteklių, naudojamų kritinio skyriaus viduje. Išėjimo skyriuje tas užraktas atleidžiamas.

Semaforo sprendimas

Semaforas yra tiesiog kintamasis, kuris nėra neigiamas ir bendrinamas tarp gijų. Tai dar vienas kritinio skyriaus problemos algoritmas ar sprendimas. Tai signalinis mechanizmas ir semaforo laukianti gija, kurią gali signalizuoti kita gija.

Proceso sinchronizavimui naudojamos dvi atominės operacijos: 1) laukimas ir 2) signalas.

Pavyzdys

WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;

Santrauka:

  • Procesų sinchronizavimas yra užduotis koordinuoti procesų vykdymą taip, kad nė vienas procesas negalėtų pasiekti tų pačių bendrų duomenų ir išteklių.
  • Keturi kritinio skyriaus elementai yra 1) Įrašo skyrius 2) Kritinis skyrius 3) Išėjimo skyrius 4) Priminimo skyrius
  • Kritinė sekcija yra kodo segmentas, prie kurio galima pasiekti signalo procesą tam tikru laiko momentu.
  • Trys privalomos taisyklės, kurias reikia įgyvendinti kritiniu skyriumi, yra šios: 1) abipusė atskirtis 2) proceso sprendimas 3) privalomas laukimas
  • Abipusis išskyrimas yra specialus dvejetainio semaforo tipas, naudojamas kontroliuojant prieigą prie bendro šaltinio.
  • Proceso sprendimas naudojamas, kai niekas nėra kritiniame skyriuje, o kažkas nori.
  • Įprastame laukimo sprendime po to, kai procesas pateikia užklausą patekti į kritinį skyrių, yra riba, kiek kitų procesų gali patekti į jų kritinį skyrių.
  • Petersono sprendimas yra plačiai naudojamas kritinių skyrių problemų sprendimas.
  • Kritinio skyriaus problemos taip pat sprendžiamos sinchronizuojant aparatinę įrangą
  • Sinchronizavimo aparatūra nėra paprastas metodas, kurį gali įgyvendinti visi, todėl taip pat buvo įdiegtas griežtas programinės įrangos metodas, žinomas kaip „Mutex Locks“.
  • Semaforas yra dar vienas kritinio skyriaus problemos algoritmas ar sprendimas.