14.11.2014 Views

Principper for Samtidighed og Styresystemer - Styresystemkernen

Principper for Samtidighed og Styresystemer - Styresystemkernen

Principper for Samtidighed og Styresystemer - Styresystemkernen

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!