Išnagrinėkite pagrindines procesų valdymo operacinėse sistemose sąvokas, įskaitant procesų būsenas, planavimo algoritmus, tarpprocesinį ryšį ir aklaviečių tvarkymą.
Operacinės sistemos: išsamus procesų valdymo vadovas
Procesų valdymas yra pagrindinis bet kurios šiuolaikinės operacinės sistemos aspektas. Tai apima procesų vykdymo valdymą, išteklių paskirstymą ir sklandaus daugiafunkcinio apdorojimo užtikrinimą. Šiame vadove pateikiama išsami procesų valdymo koncepcijų, metodų ir iššūkių apžvalga. Jis skirtas studentams, kūrėjams, sistemų administratoriams ir visiems, norintiems suprasti, kaip veikia operacinės sistemos.
Kas yra procesas?
Iš esmės procesas yra vykdomos programos egzempliorius. Tai daugiau nei tik programos kodas; jis apima dabartines programos skaitiklio, registrų ir kintamųjų reikšmes. Kiekvienas procesas turi savo atminties erdvę, kuri neleidžia jam tiesiogiai trukdyti kitiems procesams.
Pagalvokite apie programą kaip apie receptą, o apie procesą – kaip apie patiekalo gaminimą. Galite turėti kelis procesus, vienu metu vykdančius tą pačią programą (pvz., kelis teksto redaktoriaus egzempliorius), kurių kiekvienas turi savo duomenis ir būseną.
Pagrindiniai proceso komponentai:
- Programos kodas (teksto sekcija): Instrukcijos, kurias reikia vykdyti.
- Duomenų sekcija: Globalūs kintamieji ir dinamiškai paskirstyta atmintis.
- Stekas: Naudojamas funkcijų iškvietimams, vietiniams kintamiesiems ir grąžinimo adresams.
- Kupa: Dinamiškai paskirstyta atmintis vykdymo metu.
- Proceso valdymo blokas (PCB): Duomenų struktūra, kurią OS prižiūri kiekvienam procesui, kurioje yra informacija, tokia kaip proceso ID, būsena, programos skaitiklis ir registro reikšmės.
Proceso būsenos
Procesas per savo gyvavimo ciklą pereina skirtingas būsenas. Šių būsenų supratimas yra labai svarbus norint suprasti procesų valdymą.
- Naujas: Procesas kuriamas.
- Paruoštas: Procesas laukia, kol bus priskirtas procesoriui.
- Vykdomas: Vykdomos instrukcijos.
- Laukiantis (užblokuotas): Procesas laukia, kol įvyks tam tikras įvykis (pvz., I/O užbaigimas arba signalo gavimas).
- Nutrauktas: Procesas baigė vykdymą.
Šios būsenos atspindi proceso gyvavimo ciklą, o operacinė sistema yra atsakinga už perėjimus tarp jų. Pavyzdžiui, kai procesui reikia nuskaityti duomenis iš disko, jis pereina iš Vykdomos būsenos į Laukimo būseną, kol I/O operacija bus baigta. Tada jis vėl pereina į Paruoštą būseną, laukdamas savo eilės vėl paleisti.
Proceso valdymo blokas (PCB)
PCB yra duomenų struktūra, kurioje yra visa informacija, kurios reikia operacinei sistemai procesui valdyti. Tai tarsi proceso gyvenimo aprašymas, kuriame yra viskas, ką OS turi žinoti, kad galėtų jį sekti.
Tipinis PCB turinys:
- Proceso ID (PID): Unikalus proceso identifikatorius.
- Proceso būsena: Dabartinė proceso būsena (pvz., Paruoštas, Vykdomas, Laukiantis).
- Programos skaitiklis (PC): Kito vykdomos instrukcijos adresas.
- CPU registrai: CPU registrų turinys (akumuliatoriai, indekso registrai, steko rodyklės, bendrosios paskirties registrai ir bet kokia sąlygos kodo informacija).
- Atminties valdymo informacija: Informacija apie procesui paskirtą atmintį, pvz., baziniai ir ribiniai registrai, puslapių lentelės arba segmentų lentelės.
- Apskaitos informacija: Sunkniojo procesoriaus laiko kiekis, laiko apribojimai, sąskaitų numeriai, naudojamos atminties kiekis ir kt.
- I/O būsenos informacija: Procesui priskirti I/O įrenginiai, atidarytų failų sąrašas ir kt.
Procesų planavimas
Procesų planavimas yra veikla, kurios metu nustatoma, kuris procesas parengties eilėje turėtų būti priskirtas CPU. Planavimo tikslas yra optimizuoti sistemos našumą pagal tam tikrus kriterijus, pvz., maksimaliai padidinti CPU panaudojimą, sumažinti apyvartos laiką arba užtikrinti procesų teisingumą.
Planavimo eilės
OS naudoja eiles procesams valdyti. Įprastos eilės apima:
- Užduočių eilė: Apima visus procesus sistemoje.
- Parengties eilė: Apima visus procesus, kurie yra pasirengę vykdyti ir laukia CPU.
- Įrenginių eilės: Eilių rinkinys, po vieną kiekvienam I/O įrenginiui, kuriame yra procesai, laukiantys to įrenginio.
Planuokliai
Planuokliai yra sistemos programinės įrangos moduliai, kurie pasirenka kitą procesą, kurį reikia paleisti. Yra du pagrindiniai planuoklių tipai:
- Ilgalaikis planuoklis (užduočių planuoklis): Pasirenka procesus iš užduočių eilės ir įkelia juos į atmintį vykdyti. Jis kontroliuoja daugiaprogramavimo laipsnį (procesų skaičių atmintyje). Jis veikia rečiau nei trumpalaikis planuoklis.
- Trumpalaikis planuoklis (CPU planuoklis): Pasirenka procesą iš parengties eilės ir priskiria jam CPU. Jis veikia labai dažnai, todėl turi būti greitas.
Kai kuriose sistemose taip pat yra vidutinės trukmės planuoklis, kuris iškeičia procesus iš atminties (į diską) ir atgal, kad sumažintų daugiaprogramavimo laipsnį. Tai taip pat vadinama keitimu.
Planavimo algoritmai
Yra daug planavimo algoritmų, kurių kiekvienas turi savo stipriąsias ir silpnąsias puses. Algoritmo pasirinkimas priklauso nuo konkrečių sistemos tikslų. Štai keletas įprastų algoritmų:
- Pirmas atėjo, pirmas aptarnautas (FCFS): Procesai vykdomi tokia tvarka, kokia jie atvyksta. Paprasta įdiegti, bet gali lemti ilgą laukimo laiką trumpiems procesams, jei pirmas atvyksta ilgas procesas (vilkstinės efektas).
- Trumpiausias darbas pirmas (SJF): Procesai su trumpiausiu vykdymo laiku vykdomi pirmiausia. Optimalus, kalbant apie vidutinio laukimo laiko mažinimą, bet reikalauja žinoti vykdymo laiką iš anksto, o tai dažnai neįmanoma.
- Prioritetinis planavimas: Kiekvienam procesui priskiriamas prioritetas, o procesas su didžiausiu prioritetu vykdomas pirmiausia. Gali sukelti badavimą, jei žemo prioriteto procesus nuolat išstumdo didesnio prioriteto procesai.
- Apskritas Robinas (RR): Kiekvienam procesui suteikiamas fiksuotas laiko intervalas (kvantinis), kurį reikia įvykdyti. Jei procesas nebaigiamas per laiko intervalą, jis perkeliamas į parengties eilės galą. Teisingas ir apsaugo nuo badavimo, bet konteksto perjungimo viršutinė riba gali sumažinti efektyvumą, jei laiko intervalas yra per mažas.
- Daugiafunkcinis eilių planavimas: Parengties eilė padalijama į kelias eiles, kurių kiekviena turi savo planavimo algoritmą. Procesai priskiriami eilėms pagal jų savybes (pvz., interaktyvus vs. paketas).
- Daugiafunkcinis grįžtamojo ryšio eilių planavimas: Procesai gali judėti tarp skirtingų eilių. Tai leidžia planuotojui dinamiškai reguliuoti procesų prioritetą pagal jų elgesį.
Pavyzdys: Apsvarstykite tris procesus, P1, P2 ir P3, kurių sprogimo laikas (vykdymo laikas) atitinkamai yra 24, 3 ir 3 milisekundės. Jei jie atvyksta tokia tvarka P1, P2, P3, FCFS planavimas lemtų, kad pirmiausia bus paleistas P1, tada P2, tada P3. Vidutinis laukimo laikas būtų (0 + 24 + 27) / 3 = 17 milisekundžių. Tačiau jei naudotume SJF, procesai būtų vykdomi tokia tvarka P2, P3, P1, o vidutinis laukimo laikas būtų (0 + 3 + 6) / 3 = 3 milisekundės – reikšmingas patobulinimas!
Tarpprocesinis ryšys (IPC)
Tarpprocesinis ryšys (IPC) leidžia procesams bendrauti ir sinchronizuotis vieni su kitais. Tai būtina norint kurti sudėtingas programas, susidedančias iš kelių procesų, dirbančių kartu.
Įprasti IPC mechanizmai:
- Bendrinama atmintis: Procesai dalijasi atminties sritimi, leisdami jiems tiesiogiai pasiekti ir modifikuoti duomenis. Reikia kruopščios sinchronizacijos, kad būtų išvengta lenktynių sąlygų.
- Pranešimų perdavimas: Procesai bendrauja siųsdami vienas kitam pranešimus. Užtikrina geresnę izoliaciją nei bendrinama atmintis, bet gali būti lėtesnis.
- Vamzdžiai: Vienakryptis ryšio kanalas tarp dviejų procesų. Paprastai naudojamas ryšiui tarp susijusių procesų (pvz., tėvų ir vaikų).
- Vardiniai vamzdžiai (FIFO): Panašūs į vamzdžius, bet gali būti naudojami ryšiui tarp nesusijusių procesų.
- Pranešimų eilės: Procesai gali siųsti ir gauti pranešimus į/iš eilės. Užtikrina asinchroninį ryšį.
- Lizdai: Universalus mechanizmas ryšiui tarp procesų toje pačioje mašinoje arba tinkle. Naudojamas klientų ir serverių programoms bei paskirstytoms sistemoms.
- Signalai: Programinės įrangos pertrauktis, kuri gali būti siunčiama procesui, kad praneštų apie įvykį (pvz., nutraukimo užklausa, klaidos būsena).
Pavyzdys: Žiniatinklio serveris gali naudoti kelis procesus, kad vienu metu apdorotų gaunamas užklausas. Kiekvienas procesas galėtų apdoroti vieną užklausą, o procesai galėtų bendrauti naudodami bendrinamą atmintį arba pranešimų perdavimą, kad bendrintų duomenis apie serverio būseną.
Sinchronizacija
Kai keli procesai pasiekia bendrinamus išteklius, labai svarbu užtikrinti sinchronizavimą, kad būtų išvengta duomenų sugadinimo ir lenktynių sąlygų. Sinchronizavimo mechanizmai suteikia būdų koordinuoti procesų vykdymą ir apsaugoti bendrinamus duomenis.
Įprasti sinchronizavimo metodai:
- Mutex užraktai: Dvejetainis semaforas, kuris gali būti naudojamas apsaugoti kritinę kodo sekciją. Vienu metu mutex užraktą gali turėti tik vienas procesas.
- Semaforai: Mutex užraktų apibendrinimas, kuris gali būti naudojamas kontrolei prieigai prie riboto išteklių skaičiaus.
- Monitoriai: Aukšto lygio sinchronizavimo konstrukcija, kuri apima bendrinamus duomenis ir operacijas, kurias galima atlikti su jais. Užtikrina abipusį išskyrimą ir sąlygos kintamuosius laukimui ir signalizavimui.
- Sąlygos kintamieji: Naudojami monitoriuose, kad procesai galėtų laukti, kol taps teisinga konkreti sąlyga.
- Spin užraktai: Užrakto tipas, kai procesas nuolat tikrina, ar užraktas yra pasiekiamas. Gali būti efektyvus trumpoms kritinėms sekcijoms, bet švaisto CPU laiką, jei užraktas laikomas ilgą laiką.
Pavyzdys: Apsvarstykite bendrinamą skaitiklį, kuris padidinamas keliais procesais. Be sinchronizavimo keli procesai galėtų nuskaityti skaitiklio reikšmę, padidinti ją ir įrašyti atgal, todėl rezultatai būtų neteisingi. Naudojant mutex užraktą inkrementavimo operacijai apsaugoti, užtikrinama, kad tik vienas procesas vienu metu galėtų pasiekti skaitiklį, užkertant kelią lenktynių sąlygoms.
Aklavietė
Aklavietė įvyksta, kai du ar daugiau procesų yra užblokuoti neribotam laikui, kiekvienas laukdamas ištekliaus, kurį turi kitas. Tai rimta problema, kuri gali sustabdyti sistemą.
Aklavietės sąlygos:
Kad įvyktų aklavietė, turi būti įvykdytos keturios sąlygos vienu metu (Coffman sąlygos):
- Abipusis išskyrimas: Bent vienas išteklius turi būti laikomas nebendrinamuoju režimu; tai reiškia, kad vienu metu išteklių gali naudoti tik vienas procesas.
- Laikyti ir laukti: Procesas turi turėti bent vieną išteklių ir laukti, kol gaus papildomų išteklių, kuriuos šiuo metu turi kiti procesai.
- Nėra pirmumo teisės: Ištekliai negali būti atimti iš proceso jėga; išteklius gali būti paleistas tik savanoriškai jį turinčio proceso.
- Apskritas laukimas: Turi būti procesų rinkinys {P0, P1, ..., Pn}, kad P0 lauktų ištekliaus, kurį turi P1, P1 lauktų ištekliaus, kurį turi P2, ..., Pn-1 lauktų ištekliaus, kurį turi Pn, o Pn lauktų ištekliaus, kurį turi P0.
Aklavietės tvarkymo metodai:
Yra keletas būdų, kaip tvarkyti aklavietes:
- Aklavietės prevencija: Užtikrinkite, kad bent viena iš Coffman sąlygų negali galioti. Pavyzdžiui, reikalauti, kad procesai vienu metu paprašytų visų išteklių arba leistų atimti išteklius.
- Aklavietės vengimas: Naudokite informaciją apie išteklių paskirstymą, kad išvengtumėte patekimo į aklavietės būseną. Bankininko algoritmas yra įprastas pavyzdys.
- Aklavietės aptikimas ir atkūrimas: Leiskite įvykti aklavietėms, tada aptikite jas ir atkurkite. Atkūrimas gali apimti procesų nutraukimą arba išteklių atėmimą.
- Aklavietės ignoravimas: Ignoruokite problemą ir tikėkitės, kad ji neįvyks. Tai metodas, kurį naudoja dauguma operacinių sistemų, įskaitant Windows ir Linux, nes aklavietės prevencija ir vengimas gali būti brangūs.
Pavyzdys: Apsvarstykite du procesus, P1 ir P2, ir du išteklius, R1 ir R2. P1 turi R1 ir laukia R2, o P2 turi R2 ir laukia R1. Tai sukuria apskritą laukimą, dėl kurio atsiranda aklavietė. Vienas iš būdų išvengti šios aklavietės būtų reikalauti, kad procesai vienu metu paprašytų visų išteklių prieš pradedant vykdymą.
Realaus pasaulio pavyzdžiai
Procesų valdymo koncepcijos naudojamos įvairiose operacinėse sistemose visame pasaulyje:
- Linux: Naudoja sudėtingą planavimo algoritmą, vadinamą visiškai teisingu planuotoju (CFS), kurio tikslas – užtikrinti teisingą CPU paskirstymą visiems procesams.
- Windows: Naudoja prioritetų planavimo algoritmą su keliais prioritetų lygiais.
- macOS: Naudoja hibridinį metodą, kuris sujungia prioritetų planavimą su laiko skaidymu.
- Android: Sukurtas ant Linux branduolio, naudoja panašius procesų valdymo metodus, optimizuotus mobiliesiems įrenginiams.
- Realaus laiko operacinės sistemos (RTOS): Naudojamos įterptinėse sistemose ir kritinėse programose, dažnai naudoja specializuotus planavimo algoritmus, kurie garantuoja savalaikį užduočių vykdymą. Pavyzdžiai yra VxWorks ir FreeRTOS.
Išvada
Procesų valdymas yra esminis operacinių sistemų aspektas, kuris leidžia atlikti daugiafunkcį apdorojimą, dalintis ištekliais ir efektyviai panaudoti sistemą. Šiame vadove aptartų sąvokų supratimas yra būtinas visiems, dirbantiems su operacinėmis sistemomis, kuriantiems programas ar valdantiems sistemas. Įvaldę procesų būsenas, planavimo algoritmus, tarpprocesinį ryšį ir aklavietės tvarkymą, galite sukurti patikimesnes, efektyvesnes ir patikimesnes programinės įrangos sistemas. Nepamirškite atsižvelgti į kompromisus tarp skirtingų metodų ir pasirinkti metodus, kurie geriausiai atitinka jūsų konkrečius poreikius.
Tolesnis mokymasis
Norėdami pagilinti procesų valdymo supratimą, apsvarstykite galimybę ištirti šiuos išteklius:
- Operacinės sistemos sąvokos autoriai Abraham Silberschatz, Peter Baer Galvin ir Greg Gagne
- Šiuolaikinės operacinės sistemos autorius Andrew S. Tanenbaum
- Internetiniai kursai ir mokymo programos apie operacines sistemas iš tokių platformų kaip Coursera, edX ir Udacity.
- Pasirinktos operacinės sistemos dokumentacija (pvz., Linux man puslapiai, Windows API dokumentacija).