Raziščite osnovne koncepte upravljanja procesov v operacijskih sistemih, vključno s stanji procesov, algoritmi razporejanja in medprocesno komunikacijo. Ključno za razvijalce.
Operacijski sistemi: Celovit vodnik po upravljanju procesov
Upravljanje procesov je temeljni vidik vsakega sodobnega operacijskega sistema. Vključuje upravljanje izvajanja procesov, dodeljevanje virov in zagotavljanje nemotenega večopravilnosti. Ta vodnik ponuja podroben pregled konceptov, tehnik in izzivov upravljanja procesov. Namenjen je študentom, razvijalcem, sistemskim administratorjem in vsem, ki jih zanima razumevanje delovanja operacijskih sistemov.
Kaj je proces?
V svojem bistvu je proces primer programa v izvajanju. To je več kot le koda programa; vključuje trenutne vrednosti programskega števca, registrov in spremenljivk. Vsak proces ima svoj pomnilniški prostor, kar mu preprečuje neposredno vmešavanje v druge procese.
Predstavljajte si program kot recept in proces kot dejansko kuhanje jedi. Imate lahko več procesov, ki hkrati izvajajo isti program (npr. več primerkov urejevalnika besedil), vsak s svojimi podatki in stanjem.
Ključne komponente procesa:
- Koda programa (razdelek besedila): Navodila za izvedbo.
- Razdelek s podatki: Globalne spremenljivke in dinamično dodeljen pomnilnik.
- Zložnik: Uporablja se za klice funkcij, lokalne spremenljivke in povratne naslove.
- Kopica: Dinamično dodeljen pomnilnik med izvajanjem.
- Nadzorni blok procesa (PCB): Podatkovna struktura, ki jo OS vzdržuje za vsak proces in vsebuje informacije, kot so ID procesa, stanje, programski števec in vrednosti registrov.
Stanja procesov
Proces med svojim življenjem prehaja skozi različna stanja. Razumevanje teh stanj je ključno za razumevanje upravljanja procesov.
- Novo: Proces se ustvarja.
- Pripravljen: Proces čaka na dodelitev procesorja.
- Teče: Navodila se izvajajo.
- Čakanje (blokirano): Proces čaka na dogodek (npr. dokončanje I/O ali sprejem signala).
- Zaključen: Proces je končal izvajanje.
Ta stanja predstavljajo življenjski cikel procesa, operacijski sistem pa je odgovoren za upravljanje prehodov med njimi. Na primer, ko mora proces prebrati podatke z diska, preide iz stanja Teče v stanje Čakanje, dokler se operacija I/O ne zaključi. Nato se vrne v stanje Pripravljen in čaka na vrsto za ponovno zagon.
Nadzorni blok procesa (PCB)
PCB je podatkovna struktura, ki vsebuje vse informacije, ki jih operacijski sistem potrebuje za upravljanje procesa. To je kot življenjepis procesa, ki vsebuje vse, kar mora OS vedeti, da ga spremlja.
Tipična vsebina PCB:
- ID procesa (PID): Edinstveni identifikator za proces.
- Stanje procesa: Trenutno stanje procesa (npr. Pripravljen, Teče, Čakanje).
- Programski števec (PC): Naslov naslednjega navodila, ki ga je treba izvesti.
- Registri CPU: Vsebina registrov CPU (akumulatorji, indeksni registri, kazalci sklada, registri splošne namembnosti in vse informacije o kodi pogoja).
- Informacije o upravljanju pomnilnika: Informacije o pomnilniku, dodeljenem procesu, kot so bazni in mejni registri, straniške tabele ali tabeli segmentov.
- Računovodske informacije: Količina porabljenega časa CPU, časovne omejitve, številke računov, količina porabljenega pomnilnika itd.
- Informacije o stanju I/O: I/O naprave, dodeljene procesu, seznam odprtih datotek itd.
Razporejanje procesov
Razporejanje procesov je dejavnost določanja, kateri proces v čakalni vrsti pripravljenosti naj se dodeli CPU. Cilj razporejanja je optimizirati zmogljivost sistema v skladu z določenimi merili, kot so povečanje izkoriščenosti CPU, zmanjšanje časa obrata ali zagotavljanje pravičnosti med procesi.
Čakalne vrste razporejanja
OS uporablja čakalne vrste za upravljanje procesov. Običajne čakalne vrste vključujejo:
- Čakalna vrsta opravil: Vsebuje vse procese v sistemu.
- Čakalna vrsta pripravljenosti: Vsebuje vse procese, ki so pripravljeni za izvajanje in čakajo na CPU.
- Čakalne vrste naprav: Nabor čakalnih vrst, ena za vsako I/O napravo, ki vsebuje procese, ki čakajo na to napravo.
Razporejevalniki
Razporejevalniki so moduli sistemske programske opreme, ki izberejo naslednji proces za zagon. Obstajata dve glavni vrsti razporejevalnikov:
- Dolgotrajni razporejevalnik (razporejevalnik opravil): Izbere procese iz čakalne vrste opravil in jih naloži v pomnilnik za izvedbo. Nadzoruje stopnjo večprogramiranja (število procesov v pomnilniku). Deluje manj pogosto kot kratkoročni razporejevalnik.
- Kratkoročni razporejevalnik (razporejevalnik CPU): Izbere proces iz čakalne vrste pripravljenosti in mu dodeli CPU. Deluje zelo pogosto, zato mora biti hiter.
V nekaterih sistemih obstaja tudi srednjeročni razporejevalnik, ki zamenja procese iz pomnilnika (na disk) in nazaj, da zmanjša stopnjo večprogramiranja. To se imenuje tudi zamenjava.
Algoritmi razporejanja
Obstaja veliko algoritmov razporejanja, od katerih ima vsak svoje prednosti in slabosti. Izbira algoritma je odvisna od posebnih ciljev sistema. Tukaj je nekaj pogostih algoritmov:
- Prvi pride, prvi na vrsto (FCFS): Procesi se izvajajo v vrstnem redu, v katerem prispejo. Preprost za izvedbo, vendar lahko vodi do dolgih čakalnih dob za kratke procese, če pride najprej dolg proces (učinek konvoja).
- Najkrajša naloga prva (SJF): Procesi z najkrajšim časom izvajanja se izvedejo prvi. Optimalno glede na zmanjšanje povprečnega čakalnega časa, vendar zahteva predhodno poznavanje časa izvajanja, kar pogosto ni mogoče.
- Razporejanje po prioriteti: Vsakemu procesu je dodeljena prioriteta in proces z najvišjo prioriteto se izvede prvi. Lahko vodi do stradanja, če so procesi z nizko prioriteto nenehno izrinjeni s strani procesov z višjo prioriteto.
- Round Robin (RR): Vsak proces dobi fiksno časovno rezino (kvantum) za izvedbo. Če se proces ne dokonča v časovni rezini, se premakne na konec čakalne vrste pripravljenosti. Pošteno in preprečuje stradanje, vendar lahko režijski stroški preklapljanja konteksta zmanjšajo učinkovitost, če je časovna rezina premajhna.
- Večnivojsko razporejanje čakalnih vrst: Čakalna vrsta pripravljenosti je razdeljena na več čakalnih vrst, od katerih ima vsaka svoj algoritem razporejanja. Procesi se dodelijo čakalnim vrstam glede na njihove lastnosti (npr. interaktivni v primerjavi s paketnimi).
- Večnivojsko razporejanje čakalnih vrst s povratnimi informacijami: Procesi se lahko premikajo med različnimi čakalnimi vrstami. To omogoča razporejevalniku, da dinamično prilagaja prioriteto procesov glede na njihovo vedenje.
Primer: Razmislite o treh procesih, P1, P2 in P3, s časi porušitve (časi izvajanja) 24, 3 in 3 milisekunde. Če prispejo v vrstnem redu P1, P2, P3, bi razporejanje FCFS povzročilo, da se P1 najprej zažene, nato P2 in nato P3. Povprečni čakalni čas bi bil (0 + 24 + 27) / 3 = 17 milisekund. Če pa bi uporabili SJF, bi se procesi izvajali v vrstnem redu P2, P3, P1, povprečni čakalni čas pa bi bil (0 + 3 + 6) / 3 = 3 milisekunde – znatno izboljšanje!
Medprocesna komunikacija (IPC)
Medprocesna komunikacija (IPC) omogoča procesom komunikacijo in sinhronizacijo med seboj. To je bistveno za gradnjo kompleksnih aplikacij, ki so sestavljene iz več procesov, ki delujejo skupaj.
Pogosti mehanizmi IPC:
- Skupni pomnilnik: Procesi si delijo območje pomnilnika, kar jim omogoča neposreden dostop in spreminjanje podatkov. Zahteva skrbno sinhronizacijo, da se izognemo konkurenčnim razmeram.
- Pošiljanje sporočil: Procesi komunicirajo tako, da si pošiljajo sporočila. Zagotavlja boljšo izolacijo kot skupni pomnilnik, vendar je lahko počasnejši.
- Cevi: Enosmerni komunikacijski kanal med dvema procesoma. Običajno se uporablja za komunikacijo med povezanimi procesi (npr. starš in otrok).
- Imenovane cevi (FIFO): Podobno kot cevi, vendar se lahko uporabljajo za komunikacijo med nepovezanimi procesi.
- Čakalne vrste sporočil: Procesi lahko pošiljajo in prejemajo sporočila v/iz čakalne vrste. Zagotavlja asinhrono komunikacijo.
- Vtičnice: Vsestranski mehanizem za komunikacijo med procesi na istem računalniku ali prek omrežja. Uporablja se za odjemalec-strežnik in porazdeljene sisteme.
- Signali: Programski prekinitev, ki jo lahko pošljete procesu, da ga obvesti o dogodku (npr. zahteva za prekinitev, napaka).
Primer: Spletni strežnik bi lahko uporabil več procesov za sočasno obdelavo dohodnih zahtev. Vsak proces bi lahko obdelal eno zahtevo, procesi pa bi lahko komunicirali s pomočjo skupnega pomnilnika ali pošiljanja sporočil, da bi si delili podatke o stanju strežnika.
Sinhronizacija
Ko več procesov dostopa do deljenih virov, je ključno zagotoviti sinhronizacijo, da se prepreči poškodba podatkov in konkurenčne razmere. Sinhronizacijski mehanizmi omogočajo usklajevanje izvajanja procesov in zaščito deljenih podatkov.
Pogoste tehnike sinhronizacije:
- Ključavnice Mutex: Dvojiški semafor, ki se lahko uporablja za zaščito kritičnega odseka kode. Samo en proces lahko hkrati drži ključavnico mutex.
- Semaforji: Posplošitev ključavnic mutex, ki se lahko uporabljajo za nadzor dostopa do omejenega števila virov.
- Monitorji: Sinhronizacijska konstrukcija na visoki ravni, ki obsega deljene podatke in operacije, ki se lahko izvajajo nad njimi. Zagotavlja vzajemno izključevanje in spremenljivke pogojev za čakanje in signalizacijo.
- Spremenljivke pogojev: Uporabljajo se znotraj monitorjev, da se procesom omogoči čakanje na določen pogoj, da postane resničen.
- Spinlocki: Vrsta ključavnice, pri kateri proces večkrat preverja, ali je ključavnica na voljo. Lahko je učinkovita za kratke kritične odseke, vendar zapravlja čas CPU, če je ključavnica zadržana dlje časa.
Primer: Razmislite o deljenem števecu, ki ga poveča več procesov. Brez sinhronizacije bi lahko več procesov prebralo vrednost števca, ga povečalo in zapisalo nazaj, kar bi privedlo do napačnih rezultatov. Uporaba ključavnice mutex za zaščito operacije povečanja zagotavlja, da lahko le en proces hkrati dostopa do števca, kar preprečuje konkurenčne razmere.
Zastoj
Zastoj nastane, ko so dva ali več procesov nedoločno blokiranih, pri čemer vsak čaka na vir, ki ga ima drug. Je resen problem, ki lahko zaustavi sistem.
Pogoji za zastoj:
Za pojav zastoja morajo biti hkrati izpolnjeni štirje pogoji (Coffmanovi pogoji):
- Vzajemno izključevanje: Vsaj en vir mora biti shranjen v načinu, ki ni deljiv; to pomeni, da lahko le en proces naenkrat uporablja vir.
- Zadrži in počakaj: Proces mora imeti vsaj en vir in čakati na pridobitev dodatnih virov, ki jih trenutno imajo drugi procesi.
- Brez prednosti: Virov ni mogoče prisilno odvzeti procesu; vir lahko sprosti le prostovoljno proces, ki ga drži.
- Krožno čakanje: Obstajati mora niz {P0, P1, ..., Pn} čakajočih procesov, tako da P0 čaka na vir, ki ga ima P1, P1 čaka na vir, ki ga ima P2, ..., Pn-1 čaka na vir, ki ga ima Pn in Pn čaka na vir, ki ga ima P0.
Tehnike za obravnavo zastojev:
Obstaja več pristopov k obravnavi zastojev:
- Preprečevanje zastojev: Zagotovite, da vsaj en od Coffmanovih pogojev ne more veljati. Na primer, zahtevati, da procesi zahtevajo vse vire hkrati ali dovoliti prednost virov.
- Izogibanje zastojem: Uporabite informacije o dodeljevanju virov, da se izognete vstopu v stanje zastoja. Bankerjev algoritem je pogost primer.
- Zaznavanje in obnova zastojev: Dovolite, da pride do zastojev, nato jih zaznajte in se obnovite. Obnova lahko vključuje prekinitev procesov ali prednost virov.
- Ignoriranje zastoja: Ignorirajte problem in upajte, da se ne bo pojavil. To je pristop, ki ga uporabljajo večina operacijskih sistemov, vključno z Windows in Linux, ker lahko preprečevanje in izogibanje zastojem staneta veliko.
Primer: Razmislite o dveh procesih, P1 in P2, in dveh virih, R1 in R2. P1 ima R1 in čaka na R2, medtem ko ima P2 R2 in čaka na R1. To ustvari krožno čakanje, kar vodi do zastoja. Eden od načinov za preprečitev tega zastoja bi bil zahtevati, da procesi zahtevajo vse vire hkrati, preden se začne izvajanje.
Primeri iz resničnega sveta
Koncepti upravljanja procesov se uporabljajo v različnih operacijskih sistemih po vsem svetu:
- Linux: Uporablja prefinjen algoritem razporejanja, imenovan Completely Fair Scheduler (CFS), katerega cilj je zagotoviti pravično dodelitev CPU vsem procesom.
- Windows: Uporablja algoritem razporejanja, ki temelji na prioriteti, z več stopnjami prioritete.
- macOS: Uporablja hibridni pristop, ki združuje razporejanje, ki temelji na prioriteti, s časovno razporeditvijo.
- Android: Zgrajen na jedru Linux, uporablja podobne tehnike upravljanja procesov, optimizirane za mobilne naprave.
- Operacijski sistemi v realnem času (RTOS): Uporabljeni v vgrajenih sistemih in kritičnih aplikacijah pogosto uporabljajo specializirane algoritme razporejanja, ki zagotavljajo pravočasno izvajanje nalog. Primeri vključujejo VxWorks in FreeRTOS.
Sklep
Upravljanje procesov je kritičen vidik operacijskih sistemov, ki omogoča večopravilnost, delitev virov in učinkovito izkoriščanje sistema. Razumevanje konceptov, obravnavanih v tem vodniku, je bistveno za vse, ki delajo z operacijskimi sistemi, razvijajo aplikacije ali upravljajo sisteme. Z obvladovanjem stanj procesov, algoritmov razporejanja, medprocesne komunikacije in obravnave zastojev lahko ustvarite bolj robustne, učinkovite in zanesljive programske sisteme. Ne pozabite upoštevati kompromisov med različnimi pristopi in izbrati tehnike, ki najbolje ustrezajo vašim posebnim potrebam.
Nadaljnje učenje
Če želite poglobiti svoje razumevanje upravljanja procesov, razmislite o raziskovanju naslednjih virov:
- Operating System Concepts avtorjev Abraham Silberschatz, Peter Baer Galvin in Greg Gagne
- Modern Operating Systems avtorja Andrew S. Tanenbaum
- Spletni tečaji in vaje o operacijskih sistemih s platform, kot so Coursera, edX in Udacity.
- Dokumentacija za operacijski sistem po vaši izbiri (npr. strani Linux man, dokumentacija Windows API).