OPERÁCIÓS RENDSZEREK. A mai program. Fogalmak. Ütemezés és a Context Switch



Hasonló dokumentumok
A mai program OPERÁCIÓS RENDSZEREK. A probléma. Fogalmak. Mit várunk el? Tágítjuk a problémát: ütemezési szintek

Operációs rendszerek II. Folyamatok ütemezése

Ütemezés (Scheduling),

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Ütemezés (Scheduling),

Windows ütemezési példa

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

Operációs rendszerek. Folyamatok kezelése a UNIX-ban

Tartalom. Operációs rendszerek Bevezetés CPU ütemezés. Középtávú ütemezés. Hosszútávú ütemezés

(kernel3d vizualizáció: kernel245_graph.mpg)

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna

Feladatok (task) kezelése multiprogramozott operációs rendszerekben

Operációs rendszerek MINB240

OPERÁCIÓS RENDSZEREK 1. PROCESSZKEZELÉS

Matematikai és Informatikai Intézet. 4. Folyamatok

Operációs Rendszerek II.

Operációs rendszerek MINB240

Előadás_#03. Előadás_03-1 -

Operációs rendszerek. 3. előadás Ütemezés

Operációs rendszerek. Folyamatok ütemezése

Operációs rendszerek előadás Multiprogramozott operációs rendszerek

OPERÁCIÓS RENDSZEREK. A mai program. Hiba és eseménykezelés. Alapfogalmak. Eseménykezelés, szignálozás

2. Folyamatok. Operációs rendszerek. Folyamatok. Bevezetés Folyamatkezelés multiprogramozott rendszerekben. Folyamatok modellezése

OPERÁCIÓS RENDSZEREK. A mai program. A CPU által végrehajtott instrukciófolyam. A folyamat kontextus, processz menedzsment, processz állapotok

Operációs rendszerek

Dr. Schuster György október 3.

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Operációs Rendszerek II.

Feladatok (task) kezelése multiprogramozott operációs rendszerekben

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Dr. Illés Zoltán

Operációs rendszerek Folyamatok 1.1

Operációs rendszerek. Az NT folyamatok kezelése

Operációs rendszerek II. jegyzet

Operációs rendszerek MINB240

Operációs rendszerek. Bemutatkozás

Az operációs rendszer szerkezete, szolgáltatásai

Operációs rendszerek. 1. Bevezetö. Operációs rendszer: nincs jó definíció

OPERÁCIÓS RENDSZEREK. Célkitűzések, tárgyfelépítés. Módszerek. OS fogalom, struktúrák. 2005/2006. tanév II. félév Dr. Vadász Dénes

Balogh Ádám Lőrentey Károly

Nem biztos, hogy mindenhol helytáll, helyenként hiányos, de az eddigi kérdések össze vannak gyűjtve őszi félév első zhval bezárólag.

Párhuzamosság a modern operációs rendszerekben

Architektúra, megszakítási rendszerek

Léteznek nagyon jó integrált szoftver termékek a feladatra. Ezek többnyire drágák, és az üzemeltetésük sem túl egyszerű.

Informatikai rendszerek alapjai (Informatika I.)

Informatikai Rendszerek Intézete Gábor Dénes Foiskola. Operációs rendszerek oldal LINUX

Előadás_#02. Előadás_02-1 -

Virtualizációs Technológiák Bevezetés Kovács Ákos Forrás, BME-VIK Virtualizációs technológiák

UNIX ütemezése. Operációs rendszerek MINB240 UNIX, Windows NT ütemezése Holtpontkezelés. Algoritmus követelményei. UNIX ütemezés jellemzése

Folyamatok. 6. előadás

Elosztott rendszerek

Bevezetés a számítástechnikába

Az interrupt Benesóczky Zoltán 2004

Operációs rendszerek III.

Operációs rendszerek

Dr. Illés Zoltán

OPERÁCIÓS RENDSZEREK I. BEVEZETÉS Koczka Ferenc -

Operációs rendszerek

Operációs rendszerek 1. kidolgozott tételsor Verzió: 1.0 (Build: )

Operációs rendszerek MINB240 UNIX, Windows NT ütemezése Holtpontkezelés. UNIX ütemezése. Algoritmus követelményei. 4.

Operációs rendszerek feladatai

Bevezetés az informatikába

Utolsó módosítás:

12. Másodlagos tár szerkezet

OPERÁCIÓS RENDSZEREK. Célkitűzések, tárgyfelépítés. Módszerek. OS fogalom, struktúrák. 2006/2007. tanév II. félév Dr. Vadász Dénes

Programok, statikus linkelés

Operációs rendszerek. Az NT memóriakezelése

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

Operációs rendszerek. A Windows NT

Számítógépes alapismeretek

Operációsrendszerek. 2. elıadás. Standard ismeretek II.

Nyíregyházi Egyetem Matematika és Informatika Intézete. Input/Output

Az előadás magáncélra szabadon felhasználható. Köz- és felsőoktatásban felhasználható, csak előtte kérlek írj egy t nekem.

PWM elve, mikroszervó motor vezérlése MiniRISC processzoron

Operandus típusok Bevezetés: Az utasítás-feldolgozás menete

Konkurens TCP Szerver

9. Virtuális memória kezelés

Operációs rendszerek Memóriakezelés 1.1

Bevezetés az informatikába

Operációs Rendszerek II. 4. előadás

Operációs rendszerek. 4. gyakorlat: Szignálok küldése, kezelése

es tanév őszi félév Tantárgyi követelményrendszer és programleírás

Operációs rendszerek. nem hivatalos jegyzet

Operációs rendszerek

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Miskolci Egyetem Általános Informatikai Tanszék

A tesztelés feladata. Verifikáció

Az informatika alapjai. 10. elıadás. Operációs rendszer

Operációs rendszerek

Programozás alapjai II. (7. ea) C++

Operációs rendszerek

Informatika szigorlat 21-es tétel: Operációs rendszerek. Operációs rendszerek feladatai

I. C8051Fxxx mikrovezérlők hardverfelépítése, működése. II. C8051Fxxx mikrovezérlők programozása. III. Digitális perifériák

Utolsó módosítás:

Operációs rendszerek. UNIX fájlrendszer

Konkurencia és energiakezelés integrálása eszközmeghajtókba. Vezeték nélküli szenzorhálózatok

Digitális rendszerek. Utasításarchitektúra szintje

Számítógép-rendszerek fontos jellemzői (Hardver és Szoftver):

Átírás:

OPERÁCIÓS RENDSZEREK Ütemezés és a Context Switch A mai program A CPU ütemezéshez fogalmak, alapok, stratégiák Időkiosztási algoritmusok VAX/VMS, NT, Unix időkiosztás A Context Switch implementáció Ütemezés, Vadász, 2008. Ea6 2 Fogalmak Erőforrásokat Hozzárendelünk processzekhez (allokáció); A használatukat időben beosztjuk (időkiosztás, scheduling); Kapcsoljuk azokat a kiosztott időpillanatban (dipatching és switch). Most a processzor üzemezésről lesz szó (Az egyéb erőforrás ütemezés kérdéskör a kölcsönös kizárás probléma kezelésénél előjön majd ) A CPU meglehetősen fontos (és jellegzetes) erőforrás. Érdemes ütemezését külön tárgyalni. Ütemezés, Vadász, 2008. Ea6 3 1

A probléma Több processz van, mint processzor A processzek osztozzanak egy CPU idején. (Tegyük fel: minden processzhez rendeltek (ez az allokáció) egy CPU-t.) Emlékezz a processz állapotokra: ha letelt az időszelete a futó processznek, Vagy ha maga blokkolt állapotba megy (ezzel lemond a CPU-ról), akkor a futásra kész processzekből válasszunk ki egyet (ez a scheduling), és kapcsoljuk neki a CPU-t (ez a dispathing és a Context Switch második fele). Ütemezés, Vadász, 2008. Ea6 4 Tágítjuk a problémát: ütemezési szintek Long-term-scheduling (hosszútávú) JOB ütemezés: JOB/taszk pool-ból melyiket válasszuk ki futásra. A multiprogramozási szintet befolyásolja. Medium-term-scheduling (középtávú) suspended (futásra nem kész, partially executed, outswapped) processzek közül melyeket helyezzük futásra késszé (memória igény is érdekes) Short-term-scheduling (rövidtávú) futásra kész processzek közül melyik kapja a CPU-t. A továbbiakban ezzel foglalkozunk. (Ezzel ismét szűkítünk.) Ütemezés, Vadász, 2008. Ea6 5 Mit várunk el? Pártatlanság: minden processz (taszk) korrekt módon, de nem feltétlenül egyenrangúan kapja meg a processzort Hatékonyság: a CPU lehetőleg legnagyobb százalékban legyen kihasználva Válaszidő (interaktív felhasználóknak): elfogadható legyen Fordulási idő (kötegelt munkák): elfogadható legyen Teljesítmény: időegységre eső JOB, taszk, processz feldolgozás (más, mint a CPU kihasználás!) jó legyen Látható ellentmondások! Ütemezés, Vadász, 2008. Ea6 6 2

Technikai alapok Óraeszköz periodikusan megszakításokat generál Az időt szeletekre (time slice, quantum) bonthatjuk A CPU felhasználás idejét, a processzek életidejét stb. számon tarthatjuk Bizonyos időnként az állapotokat kiértékelhetjük, és CPU kapcsolást valósíthatunk meg Ütemezés, Vadász, 2008. Ea6 7 Az óraeszköz A programozható óra 3 komponensből áll: oszcillátor kristály: nagy pontossággal periodikusan jeleket generál (tipikusan 5-100MHz). Számláló (counter): ami dekrementálja az értékét minden a kristály által generált jelre. Mikor a számláló eléri a 0 értéket, IT generálódik. Tartó regiszter (holding register): az óra indulásakor (oneshot mode) vagy a counter 0-vá válásakor (square-wavemode) tartalma betöltődik a számlálóba, ezzel szabályozhatjuk, milyen gyakran keletkezzen IT (clock tick rate). Pl. egy 1MHz-es kristály (1μs-ként ad jelet), 16 bites regiszterekkel programozható 1μs-től 65535 μs-ig tartó óra ütés (clock-tick) tartományba. Ütemezés, Vadász, 2008. Ea6 8 Az óraeszköz IT kezelőjének feladatai A napi idő karbantartása, a futó processz által felhasznált CPU idő számolására, a processz időkvantuma lejártának megállapítására, ütemező meghívására, alarm szignál generálására (amikorra azt egy processz igényelte), "watchdog timer"-t biztosíthat (pl. floppy kezelésnél: felpörgetés, lehet I/O; ugyanekkor indul a wd-timer, ami leállítja a pörgetést, ha nem jön újabb i/o kérés) Segíti a profiling-ot, monitoring-ot, statisztikáz. Ütemezés, Vadász, 2008. Ea6 9 3

Napi idő karbantartás Egy számláló (64 bites) a napi időt (time-of-day) nyilvántartja óra-ütésekben (clock-tick), vagy 2 számláló: sec-ben + "ütésszám a kurrens sec-ben" (32 bit a sec-nak, 16 bit tickeknek) egy fix időhöz képest (Unix: 1970. jan 1. 12:00-tól) a bootolási időtől (32 bit a tick-számlálónak, 32 bit a secben mért betöltési időnek). A rendszergazda által adott dátum-idő átszámítódik clocktick-ekbe, és beíródik a számlálóba. Az óra kezelő (clock driver, clock IT handler) ütésenként növeli ezt a számlálót (számlálókat) Ütemezés, Vadász, 2008. Ea6 10 CPU idő nyilvántartás A processzhez tartozó számláló ütésenként inkrementálódik, ha a processz futó állapotú. Megoldható, hogy külön számláljuk a felhasználói módú és a kernel módú CPU használatot (persze, kis hibák itt lehetnek). Az idő-szelet nyilvántartása A quantum, time-slice nyilvántartáshoz a context switch esetén egy számlálót (akár processzenkénti számlálót) feltöltünk óra-ütésekben mért időszelet értékkel, majd ezt ütésenként dekrementáljuk. A számláló 0-vá válása jelzi a quantum lejártát Ütemezés, Vadász, 2008. Ea6 11 Időzítő (alarm, watchdog-timer) Idők lejártát ütésekben (tickek-ben) adott számlálók 0- vá válása jelezheti. Számlálók (órák) időben rendezett láncolt listáját tartjuk fel, a számlálókban a következő szignál ideje (tick-ben). A lista elején lévő számlálót dekrementáljuk. Pl. Kurrens idő: 4200, S1:4203, S2:4207, S3:4213 Kurrens idő 4200 Következő szignál 3 Clock header 3 S1 4 S2 6 S3 Ütemezés, Vadász, 2008. Ea6 12 4

Vissza az ütemezéshez: technikai alapok Óraeszköz periodikusan megszakításokat generál Az időt szeletekre (time slice, quantum) bonthatjuk A CPU felhasználás idejét, a processzek életidejét stb. számon tarthatjuk Bizonyos időnként az állapotokat kiértékelhetjük, és CPU kapcsolást valósíthatunk meg Ütemezés, Vadász, 2008. Ea6 13 Döntési stratégiák Nem beavatkozó (non-preemptive) run-to-completion jellegű együttműködő (kooperative) Szelektív beavatkozó Beavatkozó (preemptive): akkor is elveszik a CPU-t egy processztől, ha az nem akar lemondani róla Ütemezés, Vadász, 2008. Ea6 14 Ütemezési döntési helyzetek 1 Egy processz wait állapotátmenete. 2 Egy processz preemption állapotátmenete (pl. megszakítás bekövetkezése miatt). 3 Egy processz signal állapotátmenete. 4 Egy processz terminálódása. (4) exit running (1) sleep/wait/request (2) preempt schedule/run blocked (3) signal/assign ready waiting Ütemezés, Vadász, 2008. Ea6 15 5

Ütemezési döntési helyzetek 1 Egy processz wait állapotátmenete. 2 Egy processz preemption állapotátmenete (pl. megszakítás bekövetkezése miatt). 3 Egy processz signal állapotátmenete. 4 Egy processz terminálódása. A processz szempontjából az 1. és 4. helyzet nem döntési helyzet. Az viszont a 2. és a 3. számú. Ha ütemezési döntések csak az 1., 4. helyzetekben lehetségesek: nem beavatkozó az ütemezés. Ütemezés, Vadász, 2008. Ea6 16 A leegyszerűsített forgatókönyv A futó processz ideje lejárt (egy logikai óra, számláló lejárt, ütésére egy IT kezelő működésbe lép), vagy a futó processz blokkolt állapotba menne; A kezelő (a sheduler) kiértékel, és kiválasztja a futásra kész processzekből a nyertest (ez egy prioritás számítás, optimum számítás); Majd megtörténik a kapcsolás Ütemezés, Vadász, 2008. Ea6 17 Mi befolyásolhatja a kiválasztást? Prioritás = fontosság. Mi befolyásolhatja? A processzek memóriaigénye A processzek érkezési ideje vagy érkezési sorrendje Az eddigi CPU felhasználási idő * Vö.: CPU lázas processzek szemben I/O lázas processzek A várható CPU felhasználási idő * Vö.: Számolásigényes processzek szemben I/O igényes processzek. Vajon lehet-e időt becsülni? A processz időszerűsége ** Vö.: interaktív processzek szemben kötegelt munkák, CPU lázas szakaszok szemben az I/O lázas szakaszok. Rendszer terhelés befolyása. Valós idejű processzek problémája kezelendő. Ütemezés, Vadász, 2008. Ea6 18 6

Egy kis fogalom magyarázat A processz életében lehetnek CPU lázas időszakaszok (CPU burst) I/O lázas időszakaszok (I/O burst) Vannak Számolásigényes (CPU bound) processzek (hosszú CPU lázas szakaszokkal); I/O igényes (I/O bound) processzek (rövid CPU lázas szakaszok, sok I/O lázas szakasz). Ütemezés, Vadász, 2008. Ea6 19 Melyik ütemezési prioritása legyen magasabb? Egy processz állapotátmenetei CPU lázas időszakában Egy processz állapotátmenetei I/O lázas időszakában Fut Fut Blokkolt Ready Blokkolt Ready Ütemezés, Vadász, 2008. Ea6 20 Az ütemezési algoritmusok Mi (milyen) a prioritásfüggvény? Az igény-bejelentési sorrend (First Come, First Served) (Long- és Medium-term ütemezéshez) A legkisebb igény (Shortest Job First) (Long- és Mediumterm ütemezéshez) Valamilyen ígéret (ígéret-vezérelt időkiosztás) (Policy Driven Scheduling) Körkörös sorrend (Round-Robin Scheduling) Több összetevőtől függő (Többszintes prioritás-sorokon alapuló visszacsatolásos) (Multilevel Feedback Queue Scheduling) Ütemezés, Vadász, 2008. Ea6 21 7

First Come, First Served A processzek készletében (Process Pool) lévő processzek a beérkezési sorrendjük szerint kapnak CPU-t. Egyszerű a megvalósítás. Kialakulhat a convoy effect : korábban érkezett CPU lázas szakaszú processz lefogja a CPU-t. (Országúton lassú jármű mögött sorban a gyorsabbak) Ütemezés, Vadász, 2008. Ea6 22 Shortest Job First Régi, egyszerű. A nyomtató kiszolgálási sorokból ütemezésre még ma is használják. Az átlagos fordulási idő a legkisebb. CPU ütemezéshez: hogyan lehetne megmondani előre a várható időigényt? Idősorozatokkal jellemezhető munkákhoz az aging (öregedés) algoritmus. Ütemezés, Vadász, 2008. Ea6 23 Aging algoritmus 0, 1, 2,...,i,.. CPU lázas szakaszok ismétlődnek (nem egyforma időt igényelve). Becsülhetjük a következő idejét (T i : tényleges, mért; B i : becsült): B i+1 = a * T i + (1 - a) * B i ; ahol 0 <= a <= 1. Legyen a = 1/2, ekkor (a: súlyozó faktor) B i+1 = (T i + B i ) / 2 i i +1 i + 2 i + 3 i + 4 i + 5 T i 6 4 6 4 13 13 B i 10 8 6 6 5 9 11 Ütemezés, Vadász, 2008. Ea6 24 8

Policy Driven Scheduling Reális ígéret: n számú processz esetén 1/n-ed részét kapja egy processz a CPU-nak. Mérni kell az élet-idő-t (a rendszerben eddig eltöltött idejét), és cpu-idő-t (eddig felhasznált CPU időt), számítandó a jogosultsági-idő = élet-idő / n; prioritás = jogosultsági-idő / cpu-idő. Más ígéretek is lehetnek Az ígéret-vezérelt időkiosztás speciális esete a valós idejű (Real Time) időkiosztás. Ütemezés, Vadász, 2008. Ea6 25 Round Robin Egyszerű, elég régi algoritmus. Időszeleteket (quantum) rendelünk a processzekhez. A kész állapotú processzek egy soron nyilvántartottak. Egy processz futhat, amíg a időszelete tart (ha blokkolódik, akkor addig sem fut). Lejárt szeletű (preempted) processz a sor végére kerül. A sor elején álló kapja a CPU-t. A listán a processzek körben járnak. Ütemezés, Vadász, 2008. Ea6 26 Multilevel Feedback Queue Scheduling Több ready sor van, a különböző prioritási szintekhez Elvileg lehet minden sorhoz más-más scheduling/prioritás algoritmus Pl. interaktív processzekhez preemptív FCFS, vagy MLFQ Batch processzekhez SJF Valós idejű (Real Time) processzekhez fix prioritás Minden sorhoz rendelhetünk időszeletet Kell egy módszer: mikor, mennyivel csökkentsük a prioritást Kell egy módszer (algoritmus), mikor mennyivel növeljük a prioritást (visszacsatolás) Preempted/blocked/signaled processz a neki megfelelő sor végére kerüljön Kell egy módszer, melyik sorról "kapcsoljunk" Pl. a legegyszerűbb: a legmagasabb sorról az elsőt. Ütemezés, Vadász, 2008. Ea6 27 9

VAX VMS scheduling Multilevel feedback jellegű, alkalmas real time-ra is. 32 prioritási szint. Nagyobb szám: nagyobb prioritás. 16-32: a valós idejű processzek számára. Nem dinamikus! 0-15: reguláris processzeknek, dinamikusan számítódik. A processz bázis-prioritása: minimális prioritása. Rendszerhívásokhoz rögzített prioritás növekmény. Mikor a processz futásra késszé válik, a növekmény hozzáadódik a bázis-prioritáshoz, és a megfelelő sorra kerül processz. Scheduled processz prioritása egy szinttel csökken (határ a bázis-prioritás). Ha elveszik tőle a CPU-t, erre az új sorra kerül. Sokáig várakozókat eggyel följebb emelik (no starvation). A scheduler a legmagasabb prioritás sor elejéről választ. Ütemezés, Vadász, 2008. Ea6 28 0 Kernel mód prioritástartomány Küszöb prioritás User mód prioritástartomány n Unix időkiosztás Nem megszakítható Megszakítható Swapper Diszk I/O várakozás Várakozás bufferre Várakozás i-bögre Karakter I várakozás Karakter O várakozás Gyermek exitre várakozás U k szint U k +1 szint U k + 2 szint U k + 3 szint U k + 4 szint... U n szint Ütemezés, Vadász, 2008. Ea6 29 A Unix időkiosztása A processzeknek user-mode vagy kernel-mode prioritásértéke lehet. Az előző dinamikus, ezek lehetnek preempted processzek. Utóbbi fix érték. Ezekre nincs preempció. Küszöb prioritás szint elválaszt. A user-mode prioritások (p_usrpri) dinamikusan igazítódnak. A p_cpu mező a futó processznél a CPU használattal arányosan nő. A p_cpu mezőt quantumonkként öregbítik (aging): p_cpu = p_cpu / const1; (rendszerint const1 = 2). Ütemezés, Vadász, 2008. Ea6 30 10

A Unix időkiosztása 2 A prioritás kiszámítódik (kisebb érték jelenti a nagyobb prioritást!): p_usrpri=puser+p_cpu/const2 + p_nice/const3; (Rendszerint const2=const3=2;). A PUSER a processz bázis prioritása, külső prioritás. A p_nice a nice() rendszerhívással (felhasználói kontrollt lehetővé tevő) beállított érték. A p_usrpri a küszöb érték alá, egy beállított érték fölé nem mehet. Ütemezés, Vadász, 2008. Ea6 31 Egy példa Quan tum 1 A processz p_uspri p_cpu 60 0 B processz p_uspri p_cpu 60 0 C processz p_uspri p_cpu 63 7 Egy rendszerben a PUSER=60. Ha egy processz megkapja a CPU-t és quantumában végig használja, a p_cpu növekmény legyen 60. Legyen 3 processz (A, B, C), induláskor a C p_cpu-ja 7, a másik kettőé 0. Induláskor a p_uspri C-nél 63, a másik kettőnél 60. Mindhárom processznél a p_nice érték 0 legyen. Követhetjük, hogyan változnak a prioritások, melyik processz kap CPU-t. 2 3 4 5 75 67 63 76 1 2... 60 30 30 15 15 7 67 33 60 75 67 63 0 1... 60 30 30 15 15 7 61 60 75 67 7 3 3 1 2... 61 30 30 15 8... Ütemezés, Vadász, 2008. Ea6 32 BSD 4.3 Scheduling Quantum=0.1 sec; const2=4; const3=2; const1 dinamikusan számítódik: const1=(2*load+1)/(2*load); ahol load a run queue álagos hossza az utóbbi 1 percben Ugyanekkor a p_cpu öregbítés nem quantumonként, hanem 1 sec-enként történik csak! Az 1 sec-nél hosszabb ideig blokkolt processzeknél const1 a blokkolási időtől is függ! Ütemezés, Vadász, 2008. Ea6 33 11

NT Scheduling a fonalakra Van standby állapot is: a legnagyobb prioritású futásra kész. A standby-t ütemezik ki. 32 prioritási szint, 16-31: valósidejű, 0-15: normál, változó (mint a VAX/VMS-nél) Lejárt quantumú fonál prioritás 1-gyel csökken (a bázisig). Kész állapotba jutó fonál prioritása növekszik, a blokkolódása típusától függően A legmagasabb kész sor első fonala standby állapotúra változik. Ha nincs ilyen, az idle fonál lesz standby. Ütemezés, Vadász, 2008. Ea6 34 Linux scheduling A POSIX 1003.4-nek megfelelően több ütemezési osztály van (processzenként beállítható) SCHED_FIFO, SCHED_RR, SCHED_OTHER A schedule( ) függvény hívódik ha processz blokkolt állapotba megy, Minden syscall és "slow" IT után, ha egy flag beállított. A schedule( ) függvény 3 dolgot csinál "szokásos" teendőket (miknek az óra IT kezelőben kellene lenniük, de "hatékonyság" miatt itt vannak) Legmagasabb prioritású processz meghatározása Context Switch Ütemezés, Vadász, 2008. Ea6 35 A CPU allokálás: Context Switch A futó processz hardver kontextusát (dinamikus részét) lementjük valahová, a kiválasztott processz kontextusát felvesszük. Legfontosabb a programszámláló (PC, IP) lementése, felvétele. Lementés történhet wait (blokkolódás) állapot-átmenetnél, vagy preemption állapot-átmenetnél is. A felvétel schedule átmenetet okoz. Ütemezés, Vadász, 2008. Ea6 36 12

Hova mentsük le a dinamikus kontextust? Lehetne a Process Table sorába (PCB-be). Hátrány: nagy lesz a tábla, a lementés/felvétel hardveresen nem támogatott. Veremtárba. Előny: hardveres push/pop is van. Felhasználói szintű verembe? Nem. Közös kernel verembe? Processzenkénti kernel verembe? Egyes CPU-kban többszörös regiszterkészlet! Egyes CPU-knak van védett módú processz kapcsolás gépi instrukciójuk! Ütemezés, Vadász, 2008. Ea6 37 Unix processz kontextus komponensek A kontextus statikus része Felhasználói szintű kontextus Program szöveg Adatok Veremtár Osztott adatok Rendszer szintű kontextus statikus része Process Table bejegyzése U Area Processzenkénti Region Table A kontextus dinamikus (volatile)része Keret a 3. rétegnek Keret a 2. rétegnek Keret az 1. rétegnek Felhasználói szint Ütemezés, Vadász, 2008. Ea6 38 Egy lehetséges mechanizmus Lásd a Unix processz kontextus ábrát (előző dia): keretek a processz kernel veremben a dinamikus kontextus részére. Hány keret kell? Mikor keletkezik új réteg? rendszerhívással (trap) belépünk a kernelbe; megszakítással belépünk a kernelbe; preemption következett be. Megszűnik egy réteg, ha rendszerhívásból visszatérünk user szintre; megszakítás kiszolgálásból vissztérünk; schedule átment következett be. Ütemezés, Vadász, 2008. Ea6 39 13

A kapcsolás lépései Döntés, legyen Context Switch. A save-context() algoritmussal a kurrens processz dinamikus kontextusának lementése; A legjobb processz kiválasztása (scheduling algoritmusok!) A resume-context() algoritmussal a kiválasztott processz kontextusának felvétele. Tételezzük fel: R0 regiszterben van a függvények visszatérési értéke, PC a programszámláló, PSW a státus regiszter. Ezekre van hardveres push/pop. Ütemezés, Vadász, 2008. Ea6 40 int save_context() { R0 0; Pszeudókódok 1 SWIT { HW-PUSH(PC,PSW); PUSH (altalanos regiszterek); /* lementődött a keret, R0=0-val */ R0 (-1); JUMP Return-re; } Return(R0); } /* A HW-PUSH-nál a PC a Return-re mutat. Látjuk majd, két visszatérés van ebből. Először a JUMP Return miatt (R0=-1-gyel), másodszor a PC felvétele miatt (de akkor előtte az R0-t is felveszik, az meg 0 lesz, tehát R0=0-val). */ Ütemezés, Vadász, 2008. Ea6 41 Pszeudókódok 2 int resume_context(pid_t pid) { A pid-del azonosított processz verméről vedd vissza az általanos regisztereket; POP PSW; POP PC; /* ide a vezérlés nem juthat el */ } /* Miért nem jut oda a vezérlés? Mert a visszavett PC a save_context Return-jére mutat! */ Ütemezés, Vadász, 2008. Ea6 42 14

A Context Switch pszeudókódja... if (save_context()){ Ütemezz másik processzt, ennek pid-je = new_pid; resume_context(new_pid); /* ide a vezérlés nem juthat el */ }... /* Innen futhat a visszavett kontextusú processz */ /* Ne feledjük, a save_context-ből két visszatérés is van: az ifnek először nem-nulla értéket ad (és belefut a schedulingba), másodszor 0-val visszatérve kikerüli azt. */ Ütemezés, Vadász, 2008. Ea6 43 A vezérlés menete Dönt; if(save_context( )) { npid = Ütemez; A B Resume_context(npid); IT } 2nd; D S 2nd Ü R IRET Ütemezés, Vadász, 2008. Ea6 44 Volt már ilyen, emlékezzünk... #include <setjmp.h> jmp_buf env; int i = 0; main () { if (setjmp(env)!= 0) { (void) printf("2nd from setjmp: i=%d\n", i); exit(0); } (void) printf("1st from setjmp: i=%d\n", i); i = 1; g(); /*NOTREACHED*/ } g() { longjmp(env, 1); /*NOTREACHED*/ } Ütemezés, Vadász, 2008. Ea6 45 15

Összefoglalás Foglakoztunk az Alapokkal, stratégiákkal Időkiosztási algoritmusokkal VAX/VMS, NT, Unix időkiosztással A Context Switch implementációval Ütemezés, Vadász, 2008. Ea6 46 OPERÁCIÓS RENDSZEREK Ütemezés és a Context Switch Vége 16