Principper for Samtidighed og Styresystemer - Styresystemkernen
Principper for Samtidighed og Styresystemer - Styresystemkernen
Principper for Samtidighed og Styresystemer - Styresystemkernen
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Principper</strong> <strong>for</strong> <strong>Samtidighed</strong> <strong>og</strong> <strong>Styresystemer</strong><br />
<strong>Styresystemkernen</strong><br />
René Rydhof Hansen<br />
APR 2011<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 1 / 19
Mål<br />
At kunne redegøre <strong>for</strong> tråd- <strong>og</strong> procesrealisering (herunder<br />
fem-tilstandsmodellen)<br />
At kunne redegøre <strong>for</strong> tidsplanlægning (scheduling): begreb <strong>og</strong> brug<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 2 / 19
Part II<br />
<strong>Styresystemkernen</strong><br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 3 / 19
Tråde<br />
one process<br />
one thread<br />
one process<br />
multiple threads<br />
multiple processes<br />
one thread<br />
multiple processes<br />
multiple threads<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 4 / 19
Proces- <strong>og</strong> trådkontrolblok<br />
• Tråde kan implementeres<br />
i user-space (pthreads)<br />
• Proces- <strong>og</strong> trådkontrolblokke<br />
placeret<br />
“højt” i user-space hukommelse<br />
(lige under grænsen<br />
til OS).<br />
Single-Threaded<br />
Process Model<br />
Multithreaded<br />
Process Model<br />
Thread<br />
Thread<br />
control<br />
block<br />
Thread<br />
Thread<br />
control<br />
block<br />
Thread<br />
Thread<br />
control<br />
block<br />
Process<br />
Control<br />
Block<br />
User<br />
stack<br />
Process<br />
Control<br />
Block<br />
User<br />
stack<br />
User<br />
stack<br />
User<br />
stack<br />
User<br />
Address<br />
Space<br />
Kernel<br />
stack<br />
User<br />
Address<br />
Space<br />
Kernel<br />
stack<br />
Kernel<br />
stack<br />
Kernel<br />
stack<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 5 / 19
Tilstandsmodellen<br />
Running<br />
Terminated<br />
Started<br />
Resumed<br />
Ready to run<br />
Timeslice<br />
expired<br />
En tråd er i en af flere mulige tilstande<br />
Klassisk model: fem-tilstandsmodellen<br />
Ved kontekstskift skal konteksten gemmes<br />
Pr<strong>og</strong>ramtæller<br />
Statusregister<br />
Stakpointer<br />
Processorregistre<br />
Operation<br />
complete<br />
Blocking operation<br />
Blocked<br />
Konteksten gemmes typisk i trådkontrolblokken<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 6 / 19
Trådkontrolblok<br />
Next<br />
Thread 1<br />
ESP<br />
Next<br />
Thread 2<br />
ESP<br />
Next<br />
Thread 3<br />
ESP<br />
SUSPEND:<br />
PUSHAD ; push all reg’s<br />
PUSHFD ; push flags<br />
MOV EBX, [CURRENT]<br />
MOV 4[EBX], ESP<br />
MOV EBX, 0[EBX]<br />
MOV [CURRENT], EBX<br />
MOV ESP, 4[EBX]<br />
POPFD ; pop flags<br />
POPAD ; pop all reg’s<br />
Stack 1 Stack 2 Stack 3<br />
Trådkontrolblok med stakpointer ved<br />
offset 4 <strong>og</strong> en pointer til næste blok<br />
ved offset 0.<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 7 / 19
Trådoprettele <strong>og</strong> nedlæggelse<br />
Oprettelse af ny tråd<br />
Alloker ny trådkontrolblok<br />
Alloker ny stak <strong>og</strong> initialiser stakpointer i kontrolblokken<br />
Initialiser stak eller kontrolblok med initielle registerværdier<br />
Returadressen peger på den første instruktion i den nye tråd<br />
Nedlæggelse af tråd<br />
Kald exit funktion<br />
Denne nedlægger stakken <strong>og</strong> kontrolblokken<br />
Aktiver næste tråd<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 8 / 19
Implementation af tråde<br />
User-space<br />
Simpel <strong>og</strong> portabel<br />
Meget hurtig da traps til kernen undgås<br />
I/O blokerer alle processens tråde<br />
Multiprocessering ikke mulig<br />
Begrænset kontrol over scheduling<br />
Kernel-space<br />
Multiprocessering<br />
Ingen problemer med blokerende kald<br />
Fuld kontrol over scheduling<br />
Langsommere p.gr.a. skift til kernel-space (faktor 10)<br />
Begrænset skalerbarhed da kerne-lager er begrænset<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 9 / 19
Implementation af tråde<br />
Kombineret user- <strong>og</strong> kernel-space<br />
Skalerbarhed, god hastighed, multiprocessering etc.<br />
Komplekst<br />
Begrænset scheduling, da to schedulere er involveret<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 10 / 19
Cooperative vs. preemptive<br />
Cooperative multipr<strong>og</strong>ramming<br />
Frivillig tidsdeling<br />
Tråd kalder yield/suspend <strong>for</strong> frivilligt at slippe CPU’en<br />
Trådskifte kan af <strong>og</strong> til laves som bivirkning til systemkald<br />
Mulighed <strong>for</strong> at monopolisere processoren<br />
Preemptive multipr<strong>og</strong>ramming<br />
Tvungen tidsdeling<br />
Timer bruges til at gennemtvinge trådskifte<br />
Kombinationer<br />
Preemptive multipr<strong>og</strong>ramming med mulighed <strong>for</strong> at afgive CPU’en før<br />
tid<br />
Nyttigt, men yield-kald skal bruges med stor <strong>for</strong>sigtighed <strong>og</strong> kun af<br />
eksperter<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 11 / 19
Procesrealisering<br />
Procesbilledet<br />
Pr<strong>og</strong>ramteksten<br />
Pr<strong>og</strong>ramdata<br />
Proces-kontrolblok<br />
Stak (en per tråd)<br />
Tråd-kontroblok (en per tråd)<br />
Proceskontrolblok<br />
Procesidentifikation<br />
Sidetabeller <strong>og</strong> anden in<strong>for</strong>mation til hukommelsesstyring<br />
File descriptor tabellen<br />
Sema<strong>for</strong>er<br />
Ejerskabsin<strong>for</strong>mation<br />
Scheduling-in<strong>for</strong>mation<br />
Køretidsin<strong>for</strong>mation (accounting)<br />
Børn <strong>og</strong> <strong>for</strong>ældre<br />
etc.<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 12 / 19
Processkifte<br />
Tråde (ikke processer) er den størrelse, der udføres af CPU’en<br />
Ved trådskifte skal det rette procesmiljø genskabes<br />
Korrekt proceskontrolblok skal markeres som aktiv<br />
Processens sidetabel skal aktiveres<br />
TLB skal tømmes<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 13 / 19
Processer <strong>og</strong> tråde i Linux<br />
Minimal <strong>for</strong>skel på realiseringen af processer <strong>og</strong> tråde<br />
Kun kerne-niveau tråde<br />
Ingen trådkontrolblok<br />
Hver tråd har sin egen proceskontrolblok<br />
Tråde i samme proces deler d<strong>og</strong> store dele af proceskontrolblokken<br />
(såsom memory management)<br />
Tråde tilhører en trådgruppe med eget ID — svarende til proces ID<br />
Kun muligt <strong>for</strong>di procesoprettelse <strong>og</strong> -skifte er hurtigere i Linux end i<br />
de fleste andre styresystemer<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 14 / 19
Tilstandsmodel <strong>for</strong> Linux<br />
ZOMBIE CPU INTERRUPTIBLE<br />
terminate<br />
wait<br />
schedule<br />
signal<br />
event<br />
preempt<br />
STOPPED<br />
signal<br />
RUNNING<br />
create<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 15 / 19
Scheduling<br />
Styresystemet schedulerer tråde<br />
Men politikken kan afhænge af processerne<br />
Ud<strong>for</strong>dringer<br />
Hvilken tråd skal vælges?<br />
Hvor lang tid skal sættes (quantum)?<br />
Interaktivitet<br />
CPU cache<br />
CPU affinity<br />
Responstid (realtidskrav)<br />
Overhead i beregningstid<br />
CPU bound<br />
I/O bound<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 16 / 19
Scheduling-politikker<br />
Round-robin<br />
Enkelt kø af tråde (run-queue). Første tråd kører i et tidsrum <strong>og</strong> flytter<br />
derefter om bag i køen<br />
Kan udvides til multiple køer <strong>for</strong> flere prioriteter<br />
Dynamisk prioritering mulig ved at flytte tråde mellem køerne<br />
Lottery-scheduling<br />
Scheduleren trækker lod<br />
Prioritering opnås ved at uddele <strong>for</strong>skelligt antal lodsedler til <strong>for</strong>skellige<br />
tråde<br />
Tråde kan handle med lodsedlerne<br />
Mulighed <strong>for</strong> fair <strong>for</strong>deling af ressourcer mellem brugere<br />
Dynamisk prioritering<br />
Alle tråde tildeles et “quantum” i <strong>for</strong>hold til deres statiske prioritet<br />
Kørende tråde bruger af deres quantum<br />
Tråd med mest tilbage på “kontoen” vælges<br />
Når alle tråde i reay-tilstanden har brugt deres quantum gentages<br />
algoritmen<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 17 / 19
Køer i styresystemet<br />
Running<br />
Terminated<br />
Resumed<br />
Started<br />
Ready to run<br />
Timeslice<br />
expired<br />
Operation<br />
complete<br />
Blocking operation<br />
Blocked<br />
Mange køer at holde styr på<br />
Ready-køen indeholder tråde der er klar til at blive kørt. Afhængig af<br />
scheduleringsprincip kan der være flere ready-køer<br />
Blokerede tråde ligger i en anden kø (typisk en kø per event type da<br />
lineær søgning i en lang kø er <strong>for</strong> langsom)<br />
Eksempel: sema<strong>for</strong>er har en kø af tråde der blokerer (venter) på<br />
sema<strong>for</strong>en<br />
Timer-kø: kan bruges til at schedulere en tråd til et specifikt<br />
tidspunkt; implementeres som difference-list.<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 18 / 19
Opsummering<br />
Processer <strong>og</strong> tråde: tilstandmodel, oprettelse <strong>og</strong> nedlæggelse,<br />
implementering<br />
Processer <strong>og</strong> tråde i Linux<br />
Scheduling-politikker<br />
PSS’2011 (Forelæsning 10) <strong>Styresystemkernen</strong> APR 2011 19 / 19