470 likes | 591 Views
Käyttöjärjestelmät. VUOROTTAMINEN YKSI CPU Stallings, Luku 9. Tähän mennessä: Ready-jono, valitse ensimmäinen Aikaviipaletekniikka (round-robin) Prioriteetitkin mainittiin Seuraavaksi: Vuorottamisen tasot CPU:n v uorottamisalgoritmeja. Mihin jäimmekään?. Eräajo
E N D
Käyttöjärjestelmät VUOROTTAMINEN YKSI CPU Stallings, Luku 9 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Tähän mennessä: Ready-jono, valitse ensimmäinen Aikaviipaletekniikka (round-robin) Prioriteetitkin mainittiin Seuraavaksi: Vuorottamisen tasot CPU:n vuorottamisalgoritmeja Mihin jäimmekään? KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Eräajo Ajetaan vaikkapa yöllä Työn koko osataan arvioida esim. ajetaan joka yö, viikottain, kuukausittain Tapahtumaohjattu vuorottaminen OK Interaktiivinen Käyttäjä odottaa vastausta Ei harmainta aavistusta työn kestosta Aikaviipaletekniikka Reaaliaika Aikarajat Ohjelmoijakin miettii suorituskykyä Vuorottamisympäristöt KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Tavoitteita: Laatu • Samanarvoisille prosesseille sama palvelu • Priorisointia saa harrastaa • Turvakontrolli vs. palkanlaskenta • Interaktiiviset vs. eräajojärjestelmät • Vastausaika(response time) • Työ annettu, milloin saadaan vastaus? • Läpimenoaika(turnaround time) • Työtä per aikayksikkö • Ennustettavuus(predictability) • "Ei sen näin pitkään pitäisi kestää" KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Tavoitteita: Suorituskyky • Ota järjestelmästä mahdollisimman paljon irti • pidä CPU ja erityisesti I/O-laitteet puuhimassa • käyttöaste (CPU utilisation) • tärkeää moniajojärjestelmissä • Tehokas ja reilu CPU:n käyttö • läpimenoaste (throughput) • läpimenoaika (turnaround time) • Reaaliaikajärjestelmä pysyy aikataulussa • Deadlinen ylitys voi olla vaarallista • potilas kuolee, lentokone tippuu, ... KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Käyttöjärjestelmät MILLOIN VUOROTETAAN? KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Milloin? • Long-term • Otetaanko uusi prosessi suoritettavaksi? • Mahtuuko muistiin? • Moniajoaste? • Medium-term • Milloin heittovaihdettu prosessi takaisin muistiin? • Vapaata muistia? • Short-term • Mille prosessille annetaan CPU? • I/O • Minkä prosessin I/O-pyyntö palvellaan ensin? KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Milloin? Kuva 9.1 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Milloin? Kuva 9.3 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Long-term Scheduling • Otetaanko uusi työ suoritettavaksi? • milloin työstä tulee prosessi? • saako koneeseen luoda uuden istunnon? • Ratkaisevaa: moniajoaste • paljon prosesseja -> kukin saa harvoin CPU:ta • pyritään takaamaan riittävän tasokas palvelu • sopiva suhde: CPU-sidonnaisuus, I/O-sidonnaisuus • Milloin? • joku prosessi päättynyt • CPU:n käyttöaste pudonnut • Mikä? • First-Come-First-Serviced (FCFS) • Joskus prioriteetteja: esim. työn koko, I/O-sidonnaisuus KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Medium-Term Scheduling • Liittyy heittovaihtoon • sisäänheiton ajoitus • prosessi tilassa Suspend&Ready tai Suspend&Wait • Milloin? • CPU:n käyttöaste laskenut • vapaata muistitilaa runsaasti • Mikä? • koko • ulosheittoaika • prioriteetti KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Short-Term Scheduling • CPU:n vuorottaminen (dispatcher) • yleisterminä vuorottaminen tarkoittaa juuri tätä • Selvästi yleisempi kuin edelliset • Milloin? • Keskeytyksen yhteydessä • Jokainen keskeytys ei aiheuta vuorottamista • Kun prosessin kyky käyttää CPU:ta mennyt • joutui Blocked-tilaan: I/O, synkronointi, poissulkeminen • poikkeustilanne • prosessi käyttänyt oman aikaviipaleensa • suuremman prioriteetin työ valmis etenemään • Mille? KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Käyttöjärjestelmät PRIORITEETTI KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Prioriteetti • Suuremman prioriteetin prosessit ensin • prioriteetti PCB:ssä / TCB:ssä • Kullakin prioriteetilla oma Ready-jono • lisää aina loppuun • Vs. kaikki yhteisessä Ready-jonossa • prioriteetti määrää paikan • lisää prioriteetin mukaiseen paikkaan • Nälkiintymisvaara • vaihteleva prioriteetti • prosessin ikä • suoritushistoria KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Prioriteettijonot Kuva 9.4 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Milloin? • Nonpreemptive • Tapahtumaohjattu vuorottaminen • Prosessi suorituksessa, kunnes se päättyy tai joutuu palvelupyyntönsä vuoksi Blocked-tilaan • Preemptive • Keskeyttävä vuorottaminen • prosessi ei voi nälkiinnyttää muita • Suoritus keskeytetään ja prosessi Ready-tilaan, vaikka voisikin käyttää CPU:ta • aikaviipaletekniikka • suuremman prioriteetin prosessi tuli Ready-jonoon • pre-empt: mennä edelle, ottaa itselleen etuoikeuden nojalla KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Käyttöjärjestelmät CPU:N VUOROTTAMIS- ALGORITMEJA KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Algoritmit • First-Come-First-Served FCFS • Round Robin RR • Virtual Round Robin VRR • Shortest Process Next SPN • Shortest Remaining Time SRT • Highest Response Ratio Next HRRN • Multilevel Feedback • Fair Share Scheduling FSS KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Esimerkkiprosessit Taulukko 9.4 • Service Time = CPU:ssa kulutettu aika • Esimerkeissä ei mietitä I/O:n vaikutusta KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
FCFSKuva 9.5 • Eräajo, tapahtumaohjattu, ei prioriteetteja • Uusi prosessi Ready-jonon hännille • Kun prosessi luopuu CPU:sta, vuorota jonon ensimmäiselle KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
FCFS • Läpimenoaika • riippuu suoritusjärjestyksestä, muiden koosta sekä CPU-sidonnaisuudesta • Pienikin prosessi voi joutua odottamaan • läpimenoajasta valtava osa odotusta • Suosii CPU-sidonnaisia • muille voi tulla pitkä odotusaika • I/O-laitteet ehkä turhaan jouten • I/O kuitenkin pullonkaula • Järkevää ottaa mukaan prioriteetit • koko, I/O-sidonnaisuus KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
RR Kuva 9.5 • Aikaviipaletekniikka (q=1), keskeytyvä • Kukin Ready-prosessi saa vuorollaan aikaviipaleen • Vuorottaminen, kun viipale käytetty tai prosessi joutuu Blocked-tilaan KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
RR Kuva 9.5 • Aikaviipaletekniikka q=4 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
RR • Aikaviipaleen pituus • lyhyt: prosessin vaihto vie CPU-aikaa • pitkä: interaktiivisen työn vastausaika • Suosii hieman CPU-sidonnaisia • I/O-sidonnainen ei ehkä käytä koko viipaletta • I/O-sidonnainen saa suhteessa harvemmin CPU:n • Virtual RR • Ready-jonon apujono (Auxiliary Ready Queue), jonne I/O-odotuksesta • Aja ensin apujonossa olevat prosessit • Viipale vain edellisellä kerralla käyttämättä jäänyt osa, sitten normaaliin Ready-jonoon KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
VRR Kuva 9.7 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
SPN Kuva 9.5 • Tapahtumaohjattu • Vuorota se, joka käyttää lyhimmän ajan CPU:ta kerrallaan • I/O-sidonnaiset ensin KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
SPN • Nälkiintymisvaara • Iso jää aina pienten jalkoihin • Isojen läpimenoaika vaikea ennustaa • Erätyö: käynnistäjä arvioi työn kestoajan • Jos työ laitettiin väärään eräajoluokkaan, KJ saattaa katkaista työn • käynnistettävä uudelleen isompien luokassa • Interaktiivinen: KJ laskee keskimääräistä CPU:n käyttöaikaa • painottaa viimeeksi havaittuja aikoja, ks. kirja s 407 • Sn = T + (1 - )Sn-1 esim = 0.8 • Ei sovellu osituskäyttöympäristöön KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
SRT Kuva 9.5 • Aikaviipaleversio edellisestä (keskeytyvä) • Arvoitava prosessin jäljelläoleva ajantarve • Ei interaktiiviseen ympäristöön KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
HRRN • Minimoi läpimenoaikaa (huomioi historia) • Vuorota se, joka ollut järjestelmässä kauimmin, ts. se, jolla suurin suhdeluku time spent waiting CPU + expected service time ------------------------------------------------------------ expected service time KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
HRRN • Suosii hieman lyhyitä töitä • Ei silti nälkiintymisvaaraa • Dynaaminen prioriteetti • Ready-jonossa odottelu kasvattaa prioriteettia • Jäljelläolevaa aikaa ei voi tietää • Arviot menneisyyden perusteella • Käyttäjän antama arvio työn koosta • Ei sovi interaktiiviseen ympäristöön KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Multilevel Feedback Kuva 9.10 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Feedback • Dynaaminen prioriteetti • ‘Rankaisee’ pitkään pörränneitä prosesseja • Useita Ready-jonoja • RQ0 pura aikaviipaleittain, FCFS, siirrä seuraavaan jonoon • RQ2..RQn-1 pura aikaviipaleittain, FCFS, siirrä srvaan jonoon • RQn pura aikaviipaleittain, RR, pidä samassa jonossa • Prosessi kulkeutuu lopulta RQn-jonoon, josta se aikanaan valmistuu • Nälkiintymisvaara • Vuorottaa alemmassa jonossa olevat aina ensin • Useita variaatioita • esim. alemmissa jonoissa pitempi aikaviipale • palaa blocked-tilasta samaan jonoon KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Feedback Kuva 9.5 • Jonot RQ0, RQ1, RQ2 • Aikaviipale q=1 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Feedback Kuva 9.5 • Jonot RQ0, RQ1, RQ2 • Aikaviipale q=2i ; 1, 2, 4, jne. • Vaikutus, vrt. q=1 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Käyttöjärjestelmät UNIX SVR3 / BSD4.3 VUOROTTAMINEN KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
UNIX: Vuorottaminen • Interaktiivinen ympäristö • Ei varsinaista eräajoa, ei erätyöjonoja • Pyrkii hyvään vastausaikaan • Taustaprosesseilla huono prioriteetti • Aikaviipaleet, Round-Robin • Multilevel feedback • Prioriteeteilla omat Ready-jonot • Tyhjentää suurimman prioriteetin jonon ensin • Dynaaminen prioriteetti -> ei nälkiintymistä KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
UNIX: Ready-jonot Tan01 10.11 KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
UNIX: Prioriteetti • Kiinteä perusprioriteetti sekä nice-arvo • Käyttäjä voi pienentää prioriteettia nice-komennolla • Pitää prioriteetin siististi tietyllä arvoalueella • Laskee uuden prioriteetin sekunnin välein • CPU:n käyttö vaikuttaa uuteen arvoon • Käytti: prioriteetti putoaa • Ei: prioriteetti kasvaa • Suosii I/O-sidonnaisia prosesseja • I/O-laitteiden tehokas työllistäminen KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
UNIX: Prioriteetti • CPU_counter = CPU:n käyttö äskettäin • laskuri PCB:ssä • Älä rankaise liikaa aiemmasta käytöstä • puolita ennen prioriteetin laskentaa CPU_counter = CPU_counter/2 Pri = Base + (CPU_counter/2)+ Nice • Pieni arvo = suuri prioriteetti • Esimerkissä • Base=60, Nice = 0 • Päivitä counter 60 kertaa/sek, • Päivitä prioriteetti sekunnin välein KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
UNIX: Esimerkki Kuva 9.17 [Bach86 8.4] KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Fair-Share Scheduling • Tutki myös, kuka prosessin omistaa • Ettei hulivili voi tukkia järjestelmää… • Käsittele käyttäjän prosesseja / säikeitä ryhmänä • Vuorottelu edelleen prosessi- / säietasolla • Pidettävä myös kirjaa, paljonko ryhmä saanut CPU:n kokonaisajasta (GCPU_counter) • Ryhmällä voi olla paino W, joka määrää, millaisen osuuden se saa koko kakusta • Käytössä joissain UNIX-järjestelmissä KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
FSS: Esimerkki • Prioriteetin määrittäminen CPU_counter = CPU_counter/2 GCPU_counter = GCPU_counter/2 Pri = Base + CPU_counter/2 + GCPU_counter/4*W Esimerkissä • Base = 60 • WA = 0.5 ja WB+C= 0.5 • Päivitä laskurit 60 kertaa sekunnissa • Päivitä prioriteetti sekunnin välein KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen
Kertauskysymyksiä • Milloin vuorotetaan? • Tapahtumaohjattu (non-preemtive) vs. keskeytyvä (pre-emptive) vuorottaminen • Miten FCSF- ja Round-Robin algoritmit eroavat toisistaan? • Millaisiin tilanteisiin ne sopivat? • Mikä FSS algoritmin perusidea? • Mitä hyötyä on käyttää prioriteetteja? • Mitä hyötyä on vaihtelevan prioriteetin käytöstä? KJ-II K2003 / Auvo Häkkinen, CT50A2601 / Heikki Kälviäinen