Iepazīstieties ar procesu vadības pamatjēdzieniem operētājsistēmās, ieskaitot procesu stāvokļus, plānošanas algoritmus, starpprocesu saziņu un strupceļu apstrādi.
Operētājsistēmas: Visaptverošs ceļvedis procesu vadībai
Procesu vadība ir jebkuras mūsdienu operētājsistēmas fundamentāls aspekts. Tas ietver procesu izpildes pārvaldību, resursu sadali un vienmērīgas daudzuzdevumu apstrādes nodrošināšanu. Šis ceļvedis sniedz detalizētu pārskatu par procesu vadības koncepcijām, metodēm un izaicinājumiem. Tas ir paredzēts studentiem, izstrādātājiem, sistēmu administratoriem un ikvienam, kas vēlas saprast, kā darbojas operētājsistēmas.
Kas ir process?
Savā būtībā process ir programmas instances izpildē. Tas ir vairāk nekā tikai programmas kods; tas ietver programmas skaitītāja, reģistru un mainīgo pašreizējās vērtības. Katram procesam ir sava atmiņas telpa, kas neļauj tam tieši iejaukties citos procesos.
Iedomājieties programmu kā recepti, un procesu kā ēdiena gatavošanu. Jums var būt vairāki procesi, kas vienlaikus izpilda vienu un to pašu programmu (piemēram, vairākas teksta redaktora instances), katram ar saviem datiem un stāvokli.
Procesa galvenās sastāvdaļas:
- Programmas kods (teksta sadaļa): Izpildāmās instrukcijas.
- Datu sadaļa: Globālie mainīgie un dinamiski piešķirtā atmiņa.
- Steks: Izmanto funkciju izsaukumiem, lokālajiem mainīgajiem un atgriešanās adresēm.
- Heap: Dinamiski piešķirtā atmiņa izpildlaikā.
- Procesa vadības bloks (PCB): Datu struktūra, ko OS uztur katram procesam, kas satur informāciju, piemēram, procesa ID, stāvokli, programmas skaitītāju un reģistra vērtības.
Procesu stāvokļi
Process savas dzīves laikā iziet cauri dažādiem stāvokļiem. Šo stāvokļu izpratne ir būtiska procesu vadības izpratnei.
- Jauns: Process tiek izveidots.
- Gatavs: Process gaida, kad tas tiks piešķirts procesoram.
- Darbojas: Tiek izpildītas instrukcijas.
- Gaida (Bloķēts): Process gaida, kad notiks kāds notikums (piemēram, I/O pabeigšana vai signāla saņemšana).
- Pārtraukts: Process ir pabeidzis izpildi.
Šie stāvokļi atspoguļo procesa dzīves ciklu, un operētājsistēma ir atbildīga par pāreju pārvaldību starp tiem. Piemēram, kad procesam ir jālasa dati no diska, tas pāriet no Darbojas stāvokļa uz Gaida stāvokli, līdz I/O operācija ir pabeigta. Pēc tam tas atkal pāriet uz Gatavs stāvokli, gaidot savu kārtu, lai atkal darbotos.
Procesa vadības bloks (PCB)
PCB ir datu struktūra, kas satur visu informāciju, kas operētājsistēmai ir nepieciešama procesa pārvaldībai. Tas ir kā procesa CV, kurā ir viss, kas OS jāzina, lai to izsekotu.
Tipisks PCB saturs:
- Procesa ID (PID): Unikāls procesa identifikators.
- Procesa stāvoklis: Pašreizējais procesa stāvoklis (piemēram, Gatavs, Darbojas, Gaida).
- Programmas skaitītājs (PC): Nākamās izpildāmās instrukcijas adrese.
- CPU reģistri: CPU reģistru saturs (akumulatori, indeksu reģistri, steka rādītāji, vispārējas nozīmes reģistri un jebkāda stāvokļa koda informācija).
- Atmiņas pārvaldības informācija: Informācija par procesam piešķirto atmiņu, piemēram, bāzes un limita reģistri, lapu tabulas vai segmentu tabulas.
- Grāmatvedības informācija: Izmantotais CPU laiks, laika ierobežojumi, kontu numuri, izmantotās atmiņas apjoms utt.
- I/O statusa informācija: Procesam piešķirtās I/O ierīces, atvērto failu saraksts utt.
Procesu plānošana
Procesu plānošana ir darbība, kurā tiek noteikts, kuram procesam gatavības rindā jāpiešķir CPU. Plānošanas mērķis ir optimizēt sistēmas veiktspēju atbilstoši noteiktiem kritērijiem, piemēram, maksimāli palielinot CPU izmantošanu, samazinot apgrozības laiku vai nodrošinot taisnīgumu starp procesiem.
Plānošanas rindas
OS izmanto rindas, lai pārvaldītu procesus. Parastās rindas ietver:
- Darbu rinda: Satur visus procesus sistēmā.
- Gatavības rinda: Satur visus procesus, kas ir gatavi izpildei un gaida CPU.
- Ierīču rindas: Rindu kopa, pa vienai katrai I/O ierīcei, kas satur procesus, kas gaida šo ierīci.
Plānotāji
Plānotāji ir sistēmas programmatūras moduļi, kas atlasa nākamo procesu, ko palaist. Ir divi galvenie plānotāju veidi:
- Ilgtermiņa plānotājs (Darbu plānotājs): Atlasa procesus no darbu rindas un ielādē tos atmiņā izpildei. Tas kontrolē daudzprogrammēšanas pakāpi (procesu skaitu atmiņā). Tas darbojas retāk nekā īstermiņa plānotājs.
- Īstermiņa plānotājs (CPU plānotājs): Atlasa procesu no gatavības rindas un piešķir tam CPU. Tas darbojas ļoti bieži, tāpēc tam jābūt āram.
Dažās sistēmās ir arī vidēja termiņa plānotājs, kas izņem procesus no atmiņas (diskā) un atkal ievieto tos, lai samazinātu daudzprogrammēšanas pakāpi. To sauc arī par apmaiņu.
Plānošanas algoritmi
Pastāv daudzi plānošanas algoritmi, katram ar savām stiprajām un vājajām pusēm. Algoritma izvēle ir atkarīga no sistēmas specifiskajiem mērķiem. Šeit ir daži izplatīti algoritmi:
- Pirmā ieradās, pirmā apkalpo (FCFS): Procesi tiek izpildīti tādā secībā, kādā tie ierodas. Vienkārši īstenojams, bet var izraisīt ilgu gaidīšanas laiku īsiem procesiem, ja vispirms ierodas garš process (konvoja efekts).
- Īsākais darbs vispirms (SJF): Procesi ar īsāko izpildes laiku tiek izpildīti vispirms. Optimāli no vidējā gaidīšanas laika samazināšanas viedokļa, bet prasa iepriekš zināt izpildes laiku, kas bieži vien nav iespējams.
- Prioritātes plānošana: Katram procesam tiek piešķirta prioritāte, un process ar visaugstāko prioritāti tiek izpildīts vispirms. Var izraisīt badu, ja zemas prioritātes procesus nepārtraukti izstumj augstākas prioritātes procesi.
- Round Robin (RR): Katram procesam tiek dots fiksēts laika fragments (kvants) izpildei. Ja process nepabeidz laika fragmentā, tas tiek pārvietots uz gatavības rindas beigām. Godīgs un novērš badu, bet konteksta pārslēgšanas izmaksas var samazināt efektivitāti, ja laika fragments ir pārāk mazs.
- Daudzlīmeņu rindu plānošana: Gatavības rinda ir sadalīta vairākās rindās, katrai ar savu plānošanas algoritmu. Procesi tiek piešķirti rindām, pamatojoties uz to īpašībām (piemēram, interaktīvs pretēji pakešapstrādei).
- Daudzlīmeņu atgriezeniskās saites rindu plānošana: Procesi var pārvietoties starp dažādām rindām. Tas ļauj plānotājam dinamiski pielāgot procesu prioritāti, pamatojoties uz to uzvedību.
Piemērs: Apsveriet trīs procesus, P1, P2 un P3, kuru sprādziena laiki (izpildes laiki) ir attiecīgi 24, 3 un 3 milisekundes. Ja tie ierodas secībā P1, P2, P3, FCFS plānošana nodrošinātu, ka vispirms tiek palaists P1, pēc tam P2, pēc tam P3. Vidējais gaidīšanas laiks būtu (0 + 24 + 27) / 3 = 17 milisekundes. Tomēr, ja mēs izmantotu SJF, procesi tiktu izpildīti secībā P2, P3, P1, un vidējais gaidīšanas laiks būtu (0 + 3 + 6) / 3 = 3 milisekundes – ievērojams uzlabojums!
Starpprocesu saziņa (IPC)
Starpprocesu saziņa (IPC) ļauj procesiem sazināties un sinhronizēties savā starpā. Tas ir būtiski, lai izveidotu sarežģītas lietojumprogrammas, kas sastāv no vairākiem procesiem, kas darbojas kopā.
Izplatītākie IPC mehānismi:
- Koplietojamā atmiņa: Procesi koplieto atmiņas apgabalu, ļaujot tiem tieši piekļūt datiem un tos modificēt. Nepieciešama rūpīga sinhronizācija, lai izvairītos no sacensību apstākļiem.
- Ziņojumu pārsūtīšana: Procesi sazinās, sūtot ziņojumus viens otram. Nodrošina labāku izolāciju nekā koplietojamā atmiņa, bet var būt lēnāka.
- Caurules: Vienvirziena saziņas kanāls starp diviem procesiem. Parasti izmanto saziņai starp saistītiem procesiem (piemēram, vecāku un bērnu).
- Nosauktās caurules (FIFOs): Līdzīgas caurulēm, bet var izmantot saziņai starp nesaistītiem procesiem.
- Ziņojumu rindas: Procesi var sūtīt un saņemt ziņojumus uz/no rindas. Nodrošina asinhrono saziņu.
- Ligzdas: Universāls mehānisms saziņai starp procesiem vienā un tajā pašā datorā vai tīklā. Izmanto klienta-servera lietojumprogrammām un izplatītām sistēmām.
- Signāli: Programmatūras pārtraukums, ko var nosūtīt procesam, lai informētu to par notikumu (piemēram, pārtraukšanas pieprasījums, kļūdas stāvoklis).
Piemērs: Tīmekļa serveris var izmantot vairākus procesus, lai vienlaikus apstrādātu ienākošos pieprasījumus. Katrs process varētu apstrādāt vienu pieprasījumu, un procesi varētu sazināties, izmantojot koplietojamu atmiņu vai ziņojumu pārsūtīšanu, lai koplietotu datus par servera stāvokli.
Sinhronizācija
Kad vairāki procesi piekļūst koplietojamiem resursiem, ir svarīgi nodrošināt sinhronizāciju, lai novērstu datu bojājumus un sacensību apstākļus. Sinhronizācijas mehānismi nodrošina veidus, kā koordinēt procesu izpildi un aizsargāt koplietojamus datus.
Izplatītākās sinhronizācijas metodes:
- Mutex slēdzenes: Binārais semafors, ko var izmantot, lai aizsargātu koda kritisko sadaļu. Vienlaikus tikai viens process var turēt mutex slēdzeni.
- Semafors: Mutex slēdzeņu vispārinājums, ko var izmantot, lai kontrolētu piekļuvi ierobežotam resursu skaitam.
- Monitori: Augsta līmeņa sinhronizācijas konstrukcija, kas ietver koplietojamus datus un operācijas, ko var veikt ar tiem. Nodrošina savstarpēju izslēgšanu un nosacījumu mainīgos gaidīšanai un signalizācijai.
- Nosacījumu mainīgie: Izmanto monitoros, lai ļautu procesiem gaidīt, kad kāds konkrēts nosacījums kļūst patiess.
- Spinlocks: Slēdzenes veids, kurā process atkārtoti pārbauda, vai slēdzene ir pieejama. Var būt efektīva īsām kritiskām sadaļām, bet tērē CPU laiku, ja slēdzene tiek turēta ilgu laiku.
Piemērs: Apsveriet koplietojamu skaitītāju, ko palielina vairāki procesi. Bez sinhronizācijas vairāki procesi varētu nolasīt skaitītāja vērtību, to palielināt un ierakstīt atpakaļ, izraisot nepareizus rezultātus. Izmantojot mutex slēdzeni, lai aizsargātu palielināšanas operāciju, tiek nodrošināts, ka vienlaikus tikai viens process var piekļūt skaitītājam, novēršot sacensību apstākļus.
Strupceļš
Strupceļš rodas, kad divi vai vairāki procesi ir bloķēti uz nenoteiktu laiku, katrs gaidot resursu, ko tur cits. Tā ir nopietna problēma, kas var apturēt sistēmu.
Strupceļa nosacījumi:
Lai iestātos strupceļš, vienlaikus jāizpildās četriem nosacījumiem (Kofmana nosacījumi):
- Savstarpēja izslēgšana: Vismaz viens resurss jātur režīmā, kas nav koplietojams; tas ir, vienlaikus resursu var izmantot tikai viens process.
- Turēt un gaidīt: Procesam jātur vismaz viens resurss un jāgaida papildu resursu iegūšana, kurus pašlaik tur citi procesi.
- Nav pirmstiesību: Resursus nevar piespiedu kārtā atņemt procesam; resursu var atbrīvot tikai brīvprātīgi process, kas to tur.
- Apļveida gaidīšana: Jāeksistē gaidošu procesu kopai {P0, P1, ..., Pn} tā, lai P0 gaidītu resursu, ko tur P1, P1 gaidītu resursu, ko tur P2, ..., Pn-1 gaidītu resursu, ko tur Pn, un Pn gaidītu resursu, ko tur P0.
Strupceļa apstrādes metodes:
Ir vairākas pieejas strupceļu apstrādei:
- Strupceļa novēršana: Nodrošiniet, lai vismaz viens no Kofmana nosacījumiem nevarētu iestāties. Piemēram, pieprasot procesiem pieprasīt visus resursus vienlaikus vai atļaujot resursu pirmstiesības.
- Strupceļa izvairīšanās: Izmantojiet informāciju par resursu sadali, lai izvairītos no iekļūšanas strupceļa stāvoklī. Banku algoritms ir izplatīts piemērs.
- Strupceļa noteikšana un atkopšana: Atļaujiet strupceļiem iestāties, pēc tam nosakiet tos un atkopiet. Atkopšana var ietvert procesu pārtraukšanu vai resursu atņemšanu.
- Strupceļa ignorēšana: Ignorējiet problēmu un ceriet, ka tā nenotiks. Šo pieeju izmanto lielākā daļa operētājsistēmu, tostarp Windows un Linux, jo strupceļa novēršana un izvairīšanās var būt dārga.
Piemērs: Apsveriet divus procesus, P1 un P2, un divus resursus, R1 un R2. P1 tur R1 un gaida R2, savukārt P2 tur R2 un gaida R1. Tas rada apļveida gaidīšanu, izraisot strupceļu. Viens no veidiem, kā novērst šo strupceļu, būtu pieprasīt procesiem pieprasīt visus resursus vienlaikus pirms izpildes sākšanas.
Reālās pasaules piemēri
Procesu vadības koncepcijas tiek izmantotas dažādās operētājsistēmās visā pasaulē:
- Linux: Izmanto sarežģītu plānošanas algoritmu, ko sauc par Completely Fair Scheduler (CFS), kura mērķis ir nodrošināt taisnīgu CPU sadali visiem procesiem.
- Windows: Izmanto prioritātēs balstītu plānošanas algoritmu ar vairākiem prioritātes līmeņiem.
- macOS: Izmanto hibrīdu pieeju, kas apvieno prioritātēs balstītu plānošanu ar laika sadalīšanu.
- Android: Balstīts uz Linux kodola, tas izmanto līdzīgas procesu vadības metodes, kas optimizētas mobilajām ierīcēm.
- Reāllaika operētājsistēmas (RTOS): Izmanto iegultās sistēmās un kritiskās lietojumprogrammās, bieži izmanto specializētus plānošanas algoritmus, kas garantē savlaicīgu uzdevumu izpildi. Piemēri ir VxWorks un FreeRTOS.
Secinājums
Procesu vadība ir operētājsistēmu būtisks aspekts, kas nodrošina daudzuzdevumu režīmu, resursu koplietošanu un efektīvu sistēmas izmantošanu. Šajā rokasgrāmatā apspriesto koncepciju izpratne ir būtiska ikvienam, kas strādā ar operētājsistēmām, izstrādā lietojumprogrammas vai pārvalda sistēmas. Pārzinot procesu stāvokļus, plānošanas algoritmus, starpprocesu saziņu un strupceļu apstrādi, varat izveidot robustākas, efektīvākas un uzticamākas programmatūras sistēmas. Atcerieties apsvērt kompromisus starp dažādām pieejām un izvēlēties metodes, kas vislabāk atbilst jūsu specifiskajām vajadzībām.
Turpmāka apmācība
Lai padziļinātu savu izpratni par procesu vadību, apsveriet iespēju izpētīt šādus resursus:
- Operating System Concepts, autori: Abraham Silberschatz, Peter Baer Galvin un Greg Gagne
- Modern Operating Systems, autors: Andrew S. Tanenbaum
- Tiešsaistes kursi un apmācības par operētājsistēmām no tādām platformām kā Coursera, edX un Udacity.
- Dokumentācija par jūsu izvēlēto operētājsistēmu (piemēram, Linux man pages, Windows API dokumentācija).