Procesi in niti

Poglavje 2
Procesi in niti
2.1 Procesi
2.2 Niti
2.3 Medprocesna komunikacija
2.4 Klasični IPC problemi
2.5 Razporejanje
1
Procesi
Procesni model
• Multiprogramiranje štirih programov
• Konceptualni model 4 neodvisnih, sekvenčnih procesov
• Samo en program je aktiven v določenem času
2
Kreiranje procesa
Dogodki, ki povzročijo kreiranje procesa:
1. Inicializacija sistema
2. Izvajanje sistema - kreiranja procesa
3. Uporabniška zahteva po kreaciji procesa
4. Iniciacija svežnjev opravil
3
Kreiranje procesa
• Inicializacija sistema
– Proces init (pid=0)
• Vidnost procesa
– Viden: xtem, ura, urejevalnik,...
– V ozadju: mailer, web strežnik, tiskanje, ...
• Tehnično je proces kreiran vedno z uporabo
sistemskega klica za kreiranje procesa
– fork()
– createProcess
4
Ustavitev procesa
Pogoji za zaustavitev procesa
1. Normalen izhod (samostojno)
2. Izhod z napako (samostojno)
3. Težka napaka (na silo)
4. Ubije ga drug proces (na silo)
5
Hirarhije procesov
• Starš kreira otroka, otrok lahko kreira svoje
procese
• Kreiranje hierarhije
– UNIX imenuje to "skupina procesa"
• Windows nima koncepta hierarhije procesov
– Vsi procesi so kreirani enaki
6
Stanja procesa (1)
• Možna stanja procesa
– izvajanje
– blokiran
– pripravljen
• Prehodi med stanji
7
Stanja procesa (2)
• Najnižji nivo procesno strukturiranega OS
– Ureja prekinitve, razporejanje
• Nad tem nivojem so sekvenčni procesi
8
Implementacija procesov (1)
• Tabela procesov
– (ali) Kontrolni blok procesa
– Stanje procesa, PC, SP, spomin, odprte
datoteke, ...
• Dogajanje ob prekinitvi
9
Implementacija procesov (2)
Polja zapisa procesne tabele
10
Implementacija procesov (3)
Skelet scenarija: kaj naredi najnižji nivo ob prekinitvi.
11
Stopnja multi-programiranja
12
Niti
Model niti (1)
(a) Trije procesi vsak z eno nitjo
(b) En proces s tremi nitmi
13
Model niti (2)
• Stvari ki si jih niti delijo v procesu
• Stvari privatne za vsako nit
14
Model niti (3)
Vsaka nit ima svoj sklad
15
Uporaba niti (1)
Urejevalnik besedil s tremi nitmi
16
Uporaba niti (2)
Večnitni Web strežnik
17
Uporaba niti (3)
• Grob oris kode za prejšnjo prosojnico
(a) Razpečevalec nit
(b) Delavec nit
18
Uporaba niti (4)
Trije načini za konstrukcijo strežnika
19
Implementacija niti v uporabniškem
prostoru
Paket za niti na uporabniškem nivoju
20
Implementacija niti v
uporabniškem prostoru
• Pozitivne lastnosti
– Uporabniške niti se izvajajo hitreje.
– Lahko imamo na kožo pisan razvrščevalnik.
• Negativne lastnosti
– Če ena nit pokliče blokirajoč sistemski klic se
ustavi celoten proces.
• Lahko pogledamo vnaprej ali je sistemski klic blokirajoč.
• V tem primeru se nit uvrsti v tabelo niti; naslednjič se
zgodba ponovi.
– Uporabniška nit mora sama prepustiti kontrolo
razvrščevalniku.
• Drugače bo tekla v neskončnost
21
Implementacija niti v jedru
Paket za niti, ki ga uporablja jedro
22
Hibridna implementacija
Multipleksiranje niti iz uporabniškega
nivoja na jedrne niti
23
Razvrščanje
• Cilj – oponašanje funkcionalnosti jedrnih niti
– Dobimo uporabiške niti
• Izogibanje nepotrebnim prehodom v jedro
• Jedro priredi virtualne procesorje vsakemu procesu
– Runtime sistem alocira niti procesorjem
• Problem:
– Sistem se naslanja na jedro (nižji nivoji), ki kliče
uporabniške nivoje (višji nivo)
24
Proženje niti
• Kreacija nove niti ob sporočilu
(a) preden prispe sporočilo
(b) potem ko prispe sporočilo
25
Naredimo kodo z eno nitjo večnitno (1)
Konflikti med nitmi pri uporabi globalne spremenljivke
26
Naredimo kodo z eno nitjo večnitno (2)
Nit ima lahko privatno globalno
spremenljivko
27
Medprocesna komunikacija
Tekmovanja
Dva procesa hočeta dostopat do skupnega pomnilnika hkrati
28
Kritična področja (1)
Štirje pogoji za omogočenje vzajemnega izklučevanja
1.
2.
3.
4.
Dva procesa ne smeta bit hkrati v kritičnem območju
Ni predpostavk o hitrosti in številu procesorjev
Nobeden proces, ki teče izven kritične regije ne blokira
druge procese
Noben proces ne sme čakati v neskončnost, da vstopi v
kritično področje
29
Kritična področja (2)
Vzajemno izklučevanje s kritičnimi regijami
30
Rešitve za kritično sekcijo
• Vzajemno izključevanje s čakanjem v zanki
–
–
–
–
–
–
Prepoved prekinitev
Ključavnice
Striktno izmenjevanje
Dekkerjev algoritem
Petersonov algoritem
TSL (test-and-set-lock)
• Spanje in zbujanje (kasneje)
31
Vzajemno izključevanje s čakalno zanko (1)
Striktno izmenjevanje (spin lock)
(a) Proces 0.
(b) Proces 1.
32
Vzajemno izključevanje s čakalno zanko (2)
Petersonova rešitev za doseganje vzajemnega izključevanja33
Vzajemno izključevanje s čakalno zanko (3)
Vstop in izstop iz kritične sekcije z uporabo
TSL instrukcij
34
Proizvajalec-Uporabnik s kritičnim tekmovanjem
Spanje in zbujanje
(fatal race condition)
35
Semaforji (1)
// Implementacija semaforja iz knjige S.Hartley.
class semaphore {
protected int value = 0 ;
protected semaphore() { value = 0 ; }
protected semaphore(int initial) { value = initial ; }
public synchronized void P() {
value-- ;
if (value < 0)
try { wait() ; } catch( InterruptedException e ) { }
}
public synchronized void V() {
value++ ; if (value <= 0) notify() ;
}
}
36
Semaforji (2)
// Implementacija splosnega semaforja iz knjige Doug Lea.
class semaphore {
private int value ;
public semaphore(int i) {
value = i ;
}
synchronized void P() {
while ( value <= 0 )
try { wait() ; } catch (InterruptedException e) { }
value-- ;
}
synchronized void V() {
value++ ;
notify() ;
}
}
37
Semaforji (3)
Proizvajalec-Uporabnik z uporabo semaforjev
38
Mutex
Implementacija mutex_lock in mutex_unlock
39
Monitorji (1)
Primer monitorja
40
Pogojne spremenljivke
• Pogojne spremenljivke so uporabne samo v
monitorju
• Nitka lahko počaka na pogojno spremenljivko:
wait
– V tem trenutku druga nitka lahko vstopi v monitor
• Nitka lahko tudi sporoči drugi nitki, da je pogoj
izpolnjen: signal
– Ena čakajoča nitka lahko nadaljuje z delom
• Nitka lahko pošlje sporočilo vsem čakajočim
nitkam na pogojno spremenljivko - broadcast
41
Monitorji (2)
• Skica impl. Proizvajalca-Uporabnika z monitorji
– Samo en monitor je aktiven ob danem času
– Vmesni pomnilnik ima N predalov
42
Monitorji (3)
Rešitev problema Proizvajalca-Uporabnika v Javi (del 1)
43
Monitors (4)
Rešitev problema Proizvajalca-Uporabnika v Javi (del 2)
44
Pošiljanje sporočil
Problem Proizvajalca-Uporabnika z N sporočili
45
Meje (Barriers)
• Uporaba mej
– Proces se približuje meji
– Vsi procesi razen enega so blikorani pri meji
– Pride zadnji in vsi gredo naprej
46
Obedujoči filozofi (1)
• Filozofi jejo/razmišljajo
• Potrebujejo 2 vilici
• Jemljejo eno vilico
naenkrat
• Kako preprečiti smrtni
objem
47
Obedujoči filozofi (2)
Nepravilna rešitev za problem filozofov
48
Obedujoči filozofi (3)
Rešitev za obedujoče filozofe (del 1)
49
Obedujoči filozofi (4)
Rešitev za obedujoče filozofe (del 2)
50
Problem Bralcev in Pisalcev
Rešitev za bralce in pisalce
51
Problem spečega brivca (1)
52
Problem spečega brivca (2)
Rešitev za spečega brivca
53
Razporejanje
Uvod v razporejanje (1)
• Razporejanje na 2. generaciji: poženi naslednji
posel
• Razporejanje na večjih računalnikih 3.
generacije
– CPU čas je zelo dragocen
• Osebni računalniki
– Razporejanje ne pride toliko do izraza
• Razporejanje na omrežnih strežnikih
– Procesorski čas je zelo pomemben
– Zamenjava procesa je zelo draga
54
Uvod v razporejanje (2)
• Uporaba CPU se zamenjuje s čakanjem na I/O
– Proces vezan na CPU
– Proces vezan na I/O
55
Uvod v razporejanje (3)
• Kdaj razporejati?
– Ko se proces kreira se doda v vrsto READY.
– Ko se proces konča je potrebno pognati
razvrščevalnik.
– Ko je proces blokiran bodisi z I/O ali čem
drugim (npr. semafor).
– V primeru da se zgodi prekinitev se lahko
nadaljuje isti proces ali se izbere nov.
56
Uvod v razporejanje (4)
• Kdaj razporejati?
– Ura generira prekinitev z 60 Hz (20ms).
– Ne-preklopno razporejanje pusti, da se proces izvrši
do konca.
– Preklopno (preemptive) razporejanje pusti izvajanje
procesa določen čas potem izbere drug proces.
57
Uvod v razporejanje (5)
Algoritmi za razporejanje
58
Razporejanje v sveženjskih sistemih (1)
• Prvi pride prvi melje
• Najkrajši posel najprej
• Najkrajši preostali čas najprej
59
Razporejanje v sveženjskih sistemih (2)
Primer razporejanja: najkrajši posel najprej
60
Razporejanje v sveženjskih sistemih (3)
Trije nivoji razporejanja
61
Razporejanje v interaktivnih sistemih (1)
•
•
•
•
•
•
Round Robin
Prioritetno razporejanje
Prioritetno razporejanje z več vrstami
Razporejanje z zagotovljenimi roki
Razporejanje loterija
Pravično razporejanje
62
Razporejanje v interaktivnih sistemih (2)
• Razporejanje Round Robin
– Seznam procesov za izvajanje
– … po tem, ko je B naredil en kvant
63
Razporejanje v interaktivnih sistemih (3)
Prioritetno razporejanje
• Vsi procesi so enako pomembni pri RR
• Osnovna ideja:
– Vsak proces ima prioriteto
– Vedno se uporabi proces z najvišjo prioriteto
• Izogibanje preveliki uporabi procesov z
visoko prio.:
– Prioriteta pada vsak kvant
– Vsak proces ima max kvant
• Statično in dinamično dodeljevanje prioritet
64
Razporejanje v interaktivnih sistemih (4)
Prioritetno razporejanje
• Razporeditev procesov v razrede (vrste) glede na prio
– RR razporejanje znotraj razreda; prio razporejanje med
razredi
– Algoritem za razporejanje 1:
• Izvedi najvišjo prio vrsto, pojdi navzdol.
– Algoritem za razporejanje 2:
•
•
•
•
•
CTSS, MIT, IBM 7094, 1962
Ugotovitev: zamenjava procesov je draga
Najvišji razred 1 kvant; nižji razredi 2, 4, 8, 16, ... kvantov
Interaktivni procesi so odzivni
Procesom z daljšim CPU se dviguje čas
65
Razporejanje v interaktivnih sistemih (3)
Algoritem za razporejanje s štirimi prioritetnimi
razredi
66
Razporejanje za sisteme v realnem-času
Razporedljiv sistem v realnem času
• Dano
– m periodičnih dogodkov
– dogodek i se zgodi s periodo Pi in zahteva Ci
sekund
• Obremenitev se lahko izvede če
m
Ci
≤1
∑
i =1 Pi
67
Politika vs mehanizem
• Ločimo to kar je dovoljeno narediti od tega
kako je narejeno.
– Proces ve kateri otroci (niti) so pomembni in
potrebujejo prioriteto
• Algoritem razporejanja je parametriziran
– Mehanizem v jedru
• Parametri so definirani z uporabnikovimi
procesi
– Politiko določi uporabniški proces
68
Razporejanje niti (1)
Možna razporejanja uporabniških niti
• 50-msec kvant procesa
• Niti se izvajajo vsakih 5 msec/CPU
69
Razporejanje niti (2)
Možna razporejanja niti na nivoju jedra
• 50-msec kvant procesa
• Niti se izvajajo v 5 msec/CPU
70