Operacijski sistemi: trije preprosti deli. 2. del: Abstrakcija: Proces (prevod)

Uvod v operacijske sisteme

Hej Habr! Rad bi vam predstavil serijo člankov-prevodov ene po mojem mnenju zanimive literature - OSTEP. To gradivo precej poglobljeno obravnava delo operacijskih sistemov, podobnih unixu, in sicer delo s procesi, različnimi načrtovalci, pomnilnikom in drugimi podobnimi komponentami, ki sestavljajo sodoben OS. Original vseh materialov si lahko ogledate tukaj tukaj. Upoštevajte, da je prevod narejen neprofesionalno (precej svobodno), vendar upam, da sem ohranil splošni pomen.

Laboratorijske naloge na to temo najdete tukaj:

Drugi deli:

Ogledate si lahko tudi moj kanal na telegram =)

Poglejmo najbolj temeljno abstrakcijo, ki jo operacijski sistem ponuja uporabnikom: proces. Opredelitev postopka je povsem preprosta – je tekoči program. Sam program je brez življenja stvar, ki se nahaja na disku - je niz navodil in morda nekaj statičnih podatkov, ki čakajo na zagon. OS je tisti, ki vzame te bajte in jih zažene ter program spremeni v nekaj uporabnega.
Najpogosteje uporabniki želijo poganjati več kot en program hkrati, na prenosnem računalniku lahko na primer poganjate brskalnik, igro, medijski predvajalnik, urejevalnik besedil in podobno. Pravzaprav lahko tipičen sistem izvaja na desetine ali stotine procesov hkrati. To dejstvo olajša uporabo sistema, nikoli vam ni treba skrbeti, ali je procesor prost, samo izvajate programe.

To postavlja problem: kako zagotoviti iluzijo številnih procesorjev? Kako lahko OS ustvari iluzijo skoraj neskončnega števila procesorjev, tudi če imate samo en fizični procesor?

OS ustvarja to iluzijo z virtualizacijo procesorja. Z zagonom enega procesa, nato njegovo zaustavitvijo, zagonom drugega procesa in tako naprej lahko OS vzdržuje iluzijo, da obstaja veliko virtualnih procesorjev, medtem ko bo v resnici en ali več fizičnih procesorjev. Ta tehnika se imenuje delitev virov procesorja po času. Ta tehnika omogoča uporabnikom, da izvajajo toliko sočasnih procesov, kot želijo. Cena te rešitve je zmogljivost – če si CPE deli več procesov, bo vsak proces obdelan počasneje.
Za izvedbo virtualizacije procesorja in še posebej za dobro izvedbo potrebuje operacijski sistem podporo na nizki in visoki ravni. Podpora na nizki ravni se imenuje mehanizmi so nizkonivojske metode ali protokoli, ki izvajajo zahtevani del funkcionalnosti. Primer takšne funkcionalnosti je preklapljanje konteksta, ki daje operacijskemu sistemu možnost, da zaustavi en program in zažene drugega v procesorju. Ta časovna delitev je implementirana v vseh sodobnih operacijskih sistemih.
Poleg teh mehanizmov je nekaj logike, vgrajene v OS, v obliki "pravilnikov". Politika je določen algoritem odločanja za operacijski sistem. Takšni pravilniki na primer odločajo, kateri program je treba zagnati (s seznama ukazov) prvi. Tako bo na primer ta problem rešil pravilnik, imenovan razporejevalnik (politika razporejanja) in pri izbiri rešitve ga bodo vodili podatki, kot so: zgodovina zagona (kateri program je bil zagnan najdlje v zadnjih minutah), kakšno obremenitev nosi ta proces (katere vrste programov so bili zagnani), meritve delovanja (ali sistem je optimiziran za interaktivno interakcijo ali za prepustnost) in tako naprej.

Abstrakcija: proces

Imenujemo abstrakcijo delujočega programa, ki ga izvaja operacijski sistem Postopek. Kot smo že omenili, je proces preprosto delujoč program v katerem koli trenutnem časovnem obdobju. Program, s katerim lahko pridobimo povzetek informacij iz različnih sistemskih virov, do katerih ta program dostopa ali na katere vpliva med svojim izvajanjem.
Da bi razumeli komponente procesa, morate razumeti stanja sistema: kaj lahko program prebere ali spremeni med svojim delovanjem. V vsakem trenutku morate razumeti, kateri elementi sistema so pomembni za izvajanje programa.
Eden od očitnih elementov stanja sistema, ki ga proces vključuje, je pamćenje. Navodila se nahajajo v pomnilniku. V pomnilniku se nahajajo tudi podatki, ki jih program prebere ali zapiše. Tako je pomnilnik, ki ga lahko obravnava proces (imenovan naslovni prostor), del procesa.
Del stanja sistema so tudi registri. Številna navodila so namenjena spreminjanju vrednosti registrov ali branju njihove vrednosti, s čimer tudi registri postanejo pomemben del delovanja procesa.
Treba je opozoriti, da se stanje stroja oblikuje tudi iz nekaterih posebnih registrov. na primer IP - kazalec navodil — kazalec na navodilo, ki ga program trenutno izvaja. Je tudi kazalec sklada in z njim povezano kazalec okvirja, ki se uporabljajo za upravljanje: funkcijskih parametrov, lokalnih spremenljivk in povratnih naslovov.
Končno, programi pogosto dostopajo do ROM-a (pomnilnik samo za branje). Te informacije o V/I (vhod/izhod) morajo vključevati seznam datotek, ki jih proces trenutno odpira.

Proces API

Da bi izboljšali naše razumevanje delovanja procesa, preučimo primere sistemskih klicev, ki bi morali biti vključeni v kateri koli vmesnik operacijskega sistema. Ti API-ji so na voljo v takšni ali drugačni obliki v katerem koli OS.

ustvarjanje (ustvarjanje): OS mora vsebovati neko metodo, ki vam omogoča ustvarjanje novih procesov. Ko vnesete ukaz v terminal ali zaženete aplikacijo z dvojnim klikom na ikono, se operacijskemu sistemu pošlje klic za ustvarjanje novega procesa in nato zagon navedenega programa.
Brisanje: Ker obstaja vmesnik za ustvarjanje procesa, mora OS zagotoviti tudi možnost prisilne odstranitve procesa. Večina programov se med izvajanjem naravno zažene in konča sama od sebe. V nasprotnem primeru bi jih uporabnik želel ubiti, zato bi bil uporaben vmesnik za zaustavitev postopka.
Čakaj (čaka): Včasih je koristno počakati, da se postopek zaključi, zato so na voljo nekateri vmesniki, ki omogočajo čakanje.
Razni nadzor (različne kontrole): Poleg ubijanja in čakanja na proces obstajajo tudi druge različne metode nadzora. Na primer, večina operacijskih sistemov omogoča zamrznitev procesa (ustavitev njegovega izvajanja za določen čas) in nato nadaljevanje (nadaljevanje izvajanja)
Status (stanje): Obstajajo različni vmesniki za pridobivanje nekaterih informacij o statusu procesa, na primer, kako dolgo se izvaja ali v kakšnem stanju je trenutno.

Operacijski sistemi: trije preprosti deli. 2. del: Abstrakcija: Proces (prevod)

Ustvarjanje procesa: podrobnosti

Ena od zanimivih stvari je, kako točno se programi pretvorijo v procese. Še posebej, kako OS pobere in zažene program. Kako točno je proces ustvarjen.
Najprej mora OS naložiti programsko kodo in statične podatke v pomnilnik (v naslovni prostor procesa). Programi se običajno nahajajo na disku ali pogonu SSD v nekem izvedljivem formatu. Tako proces nalaganja programa in statičnih podatkov v pomnilnik zahteva, da OS lahko prebere te bajte z diska in jih postavi nekam v pomnilnik.

V zgodnjih operacijskih sistemih se je postopek nalaganja izvajal vneto, kar pomeni, da je bila celotna koda naložena v pomnilnik, preden se je program zagnal. Sodobni operacijski sistemi to počnejo leno, se pravi, da nalagajo dele kode ali podatkov le, ko jih program med izvajanjem zahteva.

Ko so koda in statični podatki naloženi v pomnilnik OS, je treba narediti še nekaj stvari, preden se lahko postopek izvaja. Za sklad je treba dodeliti nekaj pomnilnika. Programi uporabljajo sklad za lokalne spremenljivke, parametre funkcij in povratne naslove. OS dodeli ta pomnilnik in ga da procesu. Skladu je mogoče dodeliti tudi nekaj argumentov, zlasti zapolni parametre funkcije main(), na primer z nizom argc in argv.

Operacijski sistem lahko tudi dodeli nekaj pomnilnika kopici programa. Kopico uporabljajo programi za izrecno zahtevanje dinamično dodeljenih podatkov. Programi zahtevajo ta prostor s klicem funkcije malloc () in ga eksplicitno počisti s klicem funkcije prost(). Kopica je potrebna za podatkovne strukture, kot so povezani listi, zgoščene tabele, drevesa in drugo. Sprva je kopici dodeljena majhna količina pomnilnika, toda sčasoma, ko se program izvaja, lahko kopica zahteva več pomnilnika prek klica knjižničnega API-ja malloc(). Operacijski sistem je vključen v postopek dodeljevanja več pomnilnika, da bi lahko zadovoljil te klice.

Operacijski sistem bo izvajal tudi inicializacijske naloge, zlasti tiste, povezane z V/I. Na primer, v sistemih UNIX ima vsak proces privzeto 3 odprte deskriptorje datotek za standardni vhod, izhod in napako. Ti ročaji omogočajo programom branje vnosa s terminala in prikaz informacij na zaslonu.

Tako z nalaganjem kode in statičnih podatkov v pomnilnik, ustvarjanjem in inicializacijo sklada ter opravljanjem drugega dela, povezanega z izvajanjem V/I nalog, OS pripravi stopnjo za izvedbo procesa. Končno ostane še zadnja naloga: izvajanje programa skozi njegovo vstopno točko, imenovano funkcija main(). Z izvajanjem funkcije main() OS prenese nadzor CPU na novo ustvarjeni proces, s čimer se program začne izvajati.

Stanje procesa

Zdaj, ko nekaj razumemo, kaj je proces in kako je ustvarjen, naštejmo stanja procesa, v katerih je lahko. V najpreprostejši obliki je proces lahko v enem od teh stanj:
Tek. Med izvajanjem se proces izvaja na procesorju. To pomeni, da se navodila izvajajo.
Želite. V stanju pripravljenosti je proces pripravljen za zagon, vendar ga OS iz neznanega razloga ne izvede ob določenem času.
blokiran. V blokiranem stanju proces izvaja nekatere operacije, ki preprečujejo, da bi bil pripravljen za izvedbo, dokler se ne zgodi dogodek. En pogost primer je, ko proces sproži operacijo IO, postane blokiran, tako da lahko nek drug proces uporablja procesor.

Operacijski sistemi: trije preprosti deli. 2. del: Abstrakcija: Proces (prevod)

Ta stanja si lahko predstavljate v obliki grafa. Kot lahko vidimo na sliki, se lahko stanje procesa spreminja med TEČE in PRIPRAVLJENO po presoji operacijskega sistema. Ko se stanje procesa spremeni iz READY v RUNNING, to pomeni, da je bil proces načrtovan. V nasprotni smeri - odstranjeno iz postavitve. V trenutku, ko postane proces BLOKIRAN, na primer sprožim operacijo IO, ga OS obdrži v tem stanju, dokler se ne zgodi dogodek, na primer dokončanje IO. v tem trenutku prehod v stanje READY in po možnosti takoj v stanje RUNNING, če OS tako odloči.
Oglejmo si primer, kako potekata dva procesa skozi ta stanja. Za začetek si predstavljajmo, da se oba procesa izvajata in vsak uporablja samo CPE. V tem primeru bodo njihova stanja videti takole.

Operacijski sistemi: trije preprosti deli. 2. del: Abstrakcija: Proces (prevod)

V naslednjem primeru prvi proces, po določenem času delovanja, zahteva IO in preide v stanje BLOKIRAN, kar omogoči zagon drugemu procesu (SLIKA 1.4). OS vidi, da proces 0 ne uporablja CPE, in zažene proces 1. Medtem ko se proces 1 izvaja, je IO končan in status procesa 0 se spremeni v PRIPRAVLJEN. Končno se je proces 1 zaključil in po zaključku se proces 0 začne, izvaja in konča svoje delo.

Operacijski sistemi: trije preprosti deli. 2. del: Abstrakcija: Proces (prevod)

Struktura podatkov

Sam OS je program in tako kot vsak drug program ima nekaj ključnih podatkovnih struktur, ki spremljajo različne pomembne informacije. Za sledenje stanju vsakega procesa bo OS nekatere podpiral seznam procesov za vse procese v stanju READY in nekaj dodatnih informacij za sledenje procesom, ki se trenutno izvajajo. Poleg tega mora OS spremljati blokirane procese. Ko je IO končan, mora OS prebuditi zahtevani proces in ga postaviti v stanje, pripravljeno za izvajanje.

Na primer, OS mora ohraniti stanje registrov procesorja. V trenutku, ko se proces ustavi, se stanje registrov shrani v naslovni prostor procesa, v trenutku, ko se njegovo delovanje nadaljuje, pa se vrednosti registrov obnovijo in s tem nadaljujejo izvajanje tega procesa.

Poleg stanj pripravljeno, blokirano, delujoče obstaja še nekaj drugih stanj. Včasih je lahko proces v času ustvarjanja v stanju INIT. Končno lahko proces postavite v stanje FINAL, ko je že zaključen, vendar njegove informacije še niso izbrisane. V sistemih UNIX se to stanje imenuje zombi proces. To stanje je uporabno za primere, ko nadrejeni proces želi izvedeti povratno kodo otroka, na primer, običajno 0 signalizira uspeh in 1 napako, vendar lahko programerji izdajo dodatne izhodne kode za signaliziranje različnih težav. Ko se nadrejeni proces konča, opravi končni sistemski klic, kot je wait(), da počaka, da se podrejeni proces konča, in OS sporoči, da lahko izbriše vse podatke, povezane s končanim procesom.

Operacijski sistemi: trije preprosti deli. 2. del: Abstrakcija: Proces (prevod)

Ključne točke predavanja:

Postopek — glavna abstrakcija delujočega programa v OS. V katerem koli trenutku je mogoče proces opisati z njegovim stanjem: vsebino pomnilnika v njegovem naslovnem prostoru, vsebino registrov procesorja, vključno s kazalcem ukazov in kazalcem sklada, ter informacijami IO, kot so odprte datoteke, ki se berejo ali zapisujejo.
Proces API je sestavljen iz klicev, ki jih lahko programi opravijo procesom. Običajno so to klici ustvarjanja, brisanja ali drugi klici.
● Proces je v enem od mnogih stanj, vključno z izvajanjem, pripravljenostjo, blokiranostjo. Različni dogodki, kot so razporejanje, izjeme od razporejanja ali čakanja, lahko spremenijo stanje procesa iz enega v drugega.
Seznam procesov vsebuje informacije o vseh procesih v sistemu. Vsak vnos v njem se imenuje nadzorni blok procesa, ki je v resnici struktura, ki vsebuje vse potrebne informacije o določenem procesu. 

Vir: www.habr.com

Dodaj komentar