Kao što sam već objasnio u članak o promjeni teme, također je važno vratiti se na ovu temu promjene konteksta Ali ovaj put primijenjeno na procese. Na taj način imat ćete nedostajuću informaciju kako biste razumjeli kako CPU i operativni sustav rade ruku pod ruku kada pokrećete softver za više zadataka istovremeno.
Što je proces?

U računalstvu, proces Proces je instanca programa ili softvera koja se izvršava. Može se smatrati aktivnim entitetom koji izvršava niz uzastopnih instrukcija, pristupa sistemskim resursima i komunicira s drugim procesima. Proces ima vlastiti dodijeljeni memorijski prostor, koji uključuje programski kod, podatke, izvršni stog i varijable.
Svaki postupak Stvara ga i njime upravlja operativni sustav, koji dodjeljuje resurse poput memorije, CPU vremena, otvorenih datoteka i ulazno/izlaznih uređaja. Operativni sustav je također odgovoran za raspoređivanje i koordinaciju izvršavanja procesa, osiguravajući učinkovito korištenje dostupnih resursa.
Svaki proces može imati svoje stanje, koje može biti aktivno (izvodi se), čeka (blokiran događajem), suspendirano (privremeno zaustavljeno) ili prekinuto (prekinuto). Procesi mogu međusobno komunicirati putem mehanizama kao što je međuprocesna komunikacija (IPC), koja omogućuje razmjenu podataka i sinkronizaciju između procesa.
Što je CPI?
IPC (Međuprocesna komunikacija) To je skup mehanizama i tehnika koje procesi u operativnom sustavu koriste za međusobnu komunikaciju i dijeljenje informacija. IPC omogućuje procesima komunikaciju i suradnju, bilo na istom računalu ili između različitih računala povezanih mrežom.
CPI je ključan za istovremeno programiranje i stvaranje aplikacija koje zahtijevaju interakciju i sinkronizaciju između više procesa. Pruža sredstva za razmjenu podataka, sinkronizaciju aktivnosti i koordinaciju zadataka između procesa.
Dostupni su različiti mehanizmi CPI-ja, uključujući:
- Redovi čekanja: omogućiti slanje i primanje poruka između procesa pomoću zajedničkog reda čekanja.
- Zajednička memorija: Omogućuje više procesa pristup zajedničkom memorijskom području, što im omogućuje brzu i učinkovitu razmjenu podataka.
- Utičnice: Oni pružaju mrežno sučelje za komunikaciju između procesa na različitim računalima putem TCP/IP-a ili drugih mrežnih protokola.
- Cijevi: Omogućuju jednosmjernu komunikaciju između procesa, gdje se izlaz jednog procesa preusmjerava kao ulaz drugom procesu.
- Sinkronizacija: Mehanizmi sinkronizacije, poput semafora, muteksa i uvjetnih varijabli, koriste se za koordinaciju pristupa dijeljenim resursima i izbjegavanje uvjeta utrke između procesa.
Izbor IPC mehanizma ovisi o specifičnim zahtjevima aplikacije i okruženju u kojem se procesi izvode. Svaki mehanizam ima svoje prednosti i ograničenja u pogledu performansi, složenosti i sigurnosti.
IPC igra temeljnu ulogu u konkurentnom programiranju i izgradnji distribuiranih sustava, jer omogućuje komunikaciju i suradnju između procesa, olakšavajući razvoj složenih aplikacija i učinkovito korištenje sistemskih resursa.
Što je PCB?
U kontekstu procesa, PCB (blok upravljanja procesom) odnosi se na strukturu podataka koju operativni sustav koristi za održavanje važnih informacija o procesu koji se izvršava. Također je poznat kao blok kontrole procesa.
PCB je stvoren od strane operativni sustav kada se novi proces stvori i pohrani u glavnu memoriju. Sadrži bitne informacije o statusu i administraciji procesa, omogućujući operativnom sustavu da pravilno kontrolira i upravlja njegovim izvršavanjem.
Neki od podataka pohranjenih na PCB-u mogu uključivati:
- Identifikacija procesa: jedinstveni identifikator za proces, kao što je broj ili naziv procesa.
- Status procesa: Označava je li proces u tijeku, čeka li, spreman za pokretanje, suspendiran ili prekinut.
- Informacije o upravljanju memorijom: veličina memorije dodijeljene procesu, osnovna adresa, ograničenja memorije, tablice stranica itd.
- Informacije o upravljanju resursima: popis datoteka koje je proces otvorio, dozvole pristupa, deskriptori datoteka itd.
- Informacije o planeruprioritet procesa, korišteno CPU vrijeme, raspoređivanje i dodjela resursa, između ostalog.
- Kontrolne informacijePodaci o kontekstu procesa, kao što su registri CPU-a, pokazivači stoga, brojač programa, registri statusa itd.
Operativni sustav kontinuirano ažurira PCB kako proces mijenja stanje ili dolazi do promjene konteksta. Kada je proces suspendiran ili prebačen na drugi proces, operativni sustav sprema trenutno stanje procesa na svoj PCB i učitava stanje sljedećeg procesa za izvršenje.
PCB je ključan za učinkovito upravljanje procesima od strane operativnog sustava, omogućujući pravilnu kontrolu i koordinaciju CPU resursa i raspoređivanja. Svaki put kada se izvrši operacija promjene konteksta, operativni sustav konzultira odgovarajući PCB kako bi dobio potrebne informacije o procesu koji se izvodi.
Razlike između procesa i niti
The niti i procesi Niti su dva važna koncepta u području programiranja i izvršavanja programa u operativnom sustavu. U nastavku su navedene neke ključne razlike između niti i procesa:
- Kontekst izvršenjaProces ima svoj vlastiti neovisni kontekst izvršavanja, koji uključuje vlastiti memorijski prostor, registre CPU-a, ID procesa, otvorene datoteke i druge resurse. S druge strane, niti dijele isti kontekst izvršavanja unutar procesa. Dijele isti memorijski prostor, otvorene datoteke i druge resurse kao i roditeljski proces.
- Stvaranje i uništenjeProcesi se stvaraju pozivom operacijskog sustava i imaju svoj vlastiti neovisni životni ciklus. Mogu se stvarati i uništavati neovisno, što znači da prekid jednog procesa ne utječe na druge procese koji se izvršavaju. S druge strane, niti se stvaraju unutar postojećeg procesa. Proces može imati više niti, a stvaranje i uništavanje niti se vrši unutar konteksta roditeljskog procesa.
- Komunikacija i sinkronizacijaProcesi obično komuniciraju i sinkroniziraju se pomoću mehanizama međuprocesne komunikacije (IPC), kao što su cijevi, redovi poruka ili dijeljena memorija. Niti, koje dijele isti memorijski prostor, mogu izravno komunicirati i sinkronizirati se pomoću dijeljenih varijabli ili međusobno isključenih zaključavanja.
- Izvedba i učinkovitost: Budući da niti dijele resurse i imaju niže troškove stvaranja i uništavanja od procesa, prebacivanje između niti unutar procesa općenito je brže i učinkovitije od prebacivanja između procesa. To čini niti prikladnim za istovremene i paralelne zadatke koji mogu imati koristi od istovremene obrade i dijeljenja resursa.
- Zaštita resursaNiti dijele isti memorijski prostor i resurse unutar procesa, što znači da moraju biti oprezni pri pristupu i modificiranju istih dijeljenih resursa. Pravilna sinkronizacija je potrebna kako bi se izbjegli uvjeti utrke i osigurala dosljednost dijeljenih podataka. Nasuprot tome, procesi imaju vlastiti memorijski prostor i resurse, što ih čini neovisnijima i manje sklonima sukobima resursa.
Razlike između promjene konteksta procesa i promjene konteksta niti
| Prekidač konteksta niti | Promjena konteksta procesa |
|---|---|
| TCS se događa kada CPU spremi trenutno stanje niti i pređe na drugu nit u istom procesu. | PCS se događa kada raspoređivač operacijskog sustava spremi trenutno stanje programa koji se izvršava (uključujući stanje PCB-a) i pređe na drugi program. |
| TCS pomaže CPU-u da istovremeno obrađuje više niti. | PCS uključuje učitavanje novih stanja programa za izvršenje. |
| TCS ne uključuje promjenu memorijskih adresnih prostora. Sve memorijske adrese koje procesor adresira ostaju spremljene. | PCS uključuje zamjenu memorijskih adresnih prostora. Sve memorijske adrese koje je procesor prebrojao se prazne. |
| Predmemorija procesora i međuspremnik za pretraživanje prijevoda zadržavaju svoje stanje. | Predmemorija procesora i TLB se isprazne. |
| Iako TCS uključuje promjenu registara i pokazivača stoga, ne uključuje trošak promjene adresnog prostora. Stoga je učinkovitiji. | PCS uključuje visoke troškove promjene adresnog prostora. Stoga je manje učinkovit. |
| TCS je malo brži i jeftiniji. | PCS je relativno sporiji i skuplji. |
U jednonitnim procesima, sama nit predstavlja cijeli proces. Međutim, u višenitnim procesima, prebacivanje između različitih niti je neophodno za izvršavanje programa:
- Promjena nitiPrebacivanje niti uključuje prebacivanje s jedne niti na drugu unutar istog procesa. Ova vrsta prebacivanja konteksta je vrlo učinkovita i ekonomična, jer uključuje samo promjenu određenih identiteta i resursa, kao što su programski brojač, registri i pokazivači stoga. Trošak prebacivanja s jedne niti na drugu gotovo je jednak trošku ulaska i izlaska iz kernela.
- Promjena procesaPrebacivanje procesa uključuje prebacivanje s jednog procesa na drugi. U ovom slučaju, svi resursi povezani s trenutnim procesom moraju se zamijeniti resursima potrebnim novom procesu. To uključuje promjenu adresnog prostora memorije, uključujući adrese memorije, tablice stranica i resurse jezgre, kao i predmemorije procesora.
Kako izvršiti promjenu konteksta
Vidjet ćemo kako promijeniti kontekst u računalnom sustavu, a da bismo to učinili, prvo moramo razumjeti neke koncepte:
Dok je na starijim procesorima promjena konteksta trajala stotine nanosekundi, na novijim procesorima traje samo nekoliko nanosekundi. Utjecaj promjene konteksta ovisi o procesoru i može se mjeriti u ciklusima takta, koji se u nekim slučajevima kreću u stotinama, a u drugim čak i preko tisuću. Imajte na umu da promjena konteksta podrazumijeva dodatne troškove zbog ispiranja TLB-a (Translation Lookaside Buffer), dijeljenja predmemorije među više zadataka i izvršavanja raspoređivača zadataka, između ostalog. Prebacivanje konteksta između dvije niti u istom procesu brže je nego između dva različita procesa, budući da niti dijele iste mape virtualne memorije. Zbog toga ispiranje TLB-a nije potrebno…
Što je promjena konteksta?
El promjena konteksta, je proces spremanja stanja procesa za kasnije vraćanje i nastavak, a zatim učitavanja prethodno spremljenog, različitog stanja. To omogućuje više procesa da dijele jednu središnju procesorsku jedinicu (CPU) i temeljna je značajka višeprogramskih ili višezadaćnih operativnih sustava. U tradicionalnom CPU sustavu, svaki pokrenuti proces koristi CPU registre za pohranu podataka i održavanje trenutnog stanja. Međutim, u višezadaćnom sustavu, operativni sustav prebacuje se između procesa ili niti kako bi omogućio istovremeno izvršavanje više procesa. Pri svakom prebacivanju, operativni sustav mora spremiti stanje trenutno pokrenutog procesa, a zatim učitati stanje sljedećeg procesa za izvršavanje na CPU-u. Ovaj niz operacija koje uključuju spremanje i učitavanje stanja procesa poznat je kao prebacivanje konteksta.
Trošak promjene konteksta: Utjecaj na performanse
Kontekst se često mijenja zahtijevaju značajnu količinu resursa hardver, a velik dio dizajna operacijskog sustava usredotočen je na optimizaciju njihove upotrebe. Prebacivanje s jednog procesa na drugi uključuje obavljanje raznih administrativnih zadataka, kao što su spremanje i učitavanje registara i memorijskih mapa, ažuriranje tablica i popisa i drugo. Točna priroda promjene konteksta ovisi o arhitekturi sustava, operacijskom sustavu i količini dijeljenih resursa. Niti koje pripadaju istom procesu dijele mnoge resurse, za razliku od nepovezanih procesa koji ne surađuju jedni s drugima.
Na primjer, u Linux jezgraPromjena konteksta uključuje učitavanje odgovarajućeg bloka upravljanja procesom (PCB) pohranjenog u PCB tablici na stog jezgre kako bi se dobile informacije o stanju novog procesa. Učitavaju se podaci o stanju CPU-a kao što su registri, pokazivač stoga i brojač programa, kao i informacije o upravljanju memorijom kao što su tablice segmentacije i tablice stranica (osim ako stari proces dijeli memoriju s novim). Kako bi se spriječile pogreške u prijevodu adresa u slučaju da stari i trenutni procesi koriste različite memorijske prostore, međuspremnik za prevođenje (TLB) mora se isprazniti. To negativno utječe na performanse, jer se nakon većine promjena konteksta gube sve memorijske reference u TLB-u, jer postaje prazan.
Nadalje, slična promjena konteksta događa se između korisničke niti, posebno u zelenim nitima, i obično je vrlo lagan, sprema i vraća samo minimalni kontekst. U ekstremnim slučajevima, kao što je prebacivanje između korutina u Gou, promjena konteksta je ekvivalentna performansama korutine i samo je neznatno skuplja od poziva podrutine.
Sažetak procesa
The uključeni koraci u kontekstu promjene su sljedeće:
- Spremi kontekst procesa koji se trenutno izvršava na CPU-u. Ažurirajte blok kontrole procesa i druga važna polja.
- Premjestite kontrolni blok prethodnog procesa u odgovarajući red čekanja, kao što je red čekanja, red čekanja I/O itd.
- Odaberite novi proces za pokretanje.
- Ažuriraj kontrolni blok odabranog procesa. To uključuje ažuriranje statusa procesa na "u pogonu".
- Po potrebi ažurirajte strukture podataka za upravljanje memorijom.
- Vrati kontekst prethodno izvršavanog procesa kada se ponovno učita u procesor. To se postiže učitavanjem prethodnih vrijednosti iz bloka za kontrolu procesa i registara.
Na primjer, u slučaj linuxa konkretno, koji je sustav koji najbolje poznajem, bio bi:
- Trenutni proces koji se izvršava na CPU-u doseže točku u kojoj se mora prekinuti ili se dogodi događaj koji zahtijeva promjenu konteksta, poput sistemskog poziva ili hardverskog prekida.
- Jezgra operativnog sustava sprema trenutno stanje procesa, uključujući registre CPU-a, pokazivač stoga i brojač programa, u svoj blok za kontrolu procesa (PCB). To se radi kako bi se sačuvalo stanje procesa i omogućio njegov kasniji nastavak.
- Jezgra odabire sljedeći proces za pokretanje, bilo iz reda čekanja ili prema algoritmu raspoređivanja. PCB novoodabranog procesa se ažurira, postavljajući njegov status na "izvršeno".
- Izvode se potrebni zadaci za postavljanje okruženja novog procesa, kao što je učitavanje registara CPU-a i pokazivača stoga vrijednostima pohranjenim na njegovoj tiskanoj ploči.
- Jezgra ažurira memorijske strukture, kao što su tablice segmentacije i tablice stranica, za novi proces.
- Konačno, kontekst novog procesa se vraća i dodjeljuje mu se CPU za izvršavanje. Proces nastavlja izvršavanje od mjesta gdje je prethodno stao.
Vrijedi napomenuti da je ovaj primjer pojednostavljenje stvarnog procesa koji se odvija u Linux kontekstualnoj promjeni. U stvarnosti, uključeno je više zadataka i razmatranja, poput upravljanja I/O uređajima i drugim sistemskim resursima. Nadalje, Linux kernel implementira različite politike raspoređivanja koje određuju kako se procesi odabiru za izvršavanje i kako se CPU vrijeme raspoređuje među njima.
Nadam se da je ovo bilo korisno, zajedno s člankom o promjeni teme... Ako ste zainteresirani za ove tutorijale, više možete vidjeti ovdje.