operÁciÓs rendszerek

47
OPERÁCIÓS RENDSZEREK Ütemezés és a Context Switch

Upload: ovid

Post on 12-Jan-2016

27 views

Category:

Documents


0 download

DESCRIPTION

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ó. Fogalmak. Erőforrásokat Hozzárendelünk processzekhez (allokáció); - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: OPERÁCIÓS RENDSZEREK

OPERÁCIÓS RENDSZEREK

Ütemezés és a Context Switch

Page 2: OPERÁCIÓS RENDSZEREK

Vadász 2

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ó

Page 3: OPERÁCIÓS RENDSZEREK

Vadász 3

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.

Page 4: OPERÁCIÓS RENDSZEREK

Vadász 4

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).

Page 5: OPERÁCIÓS RENDSZEREK

Vadász 5

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.)

Page 6: OPERÁCIÓS RENDSZEREK

Vadász 6

Látható ellentmondások!

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

Page 7: OPERÁCIÓS RENDSZEREK

Vadász 7

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

Page 8: OPERÁCIÓS RENDSZEREK

Vadász 8

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 (one-shot mode) vagy a counter 0-vá válásakor (square-wave-mode) 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 (1s-ként ad jelet), 16 bites regiszterekkel programozható 1s-től 65535 s-ig tartó óra ütés (clock-tick) tartományba.

Page 9: OPERÁCIÓS RENDSZEREK

Vadász 9

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.

Page 10: OPERÁCIÓS RENDSZEREK

Vadász 10

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 sec-ben mért betöltési időnek).

– A rendszergazda által adott dátum-idő átszámítódik clock-tick-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)

Page 11: OPERÁCIÓS RENDSZEREK

Vadász 11

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

Page 12: OPERÁCIÓS RENDSZEREK

Vadász 12

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

Clock header 3|S1 4|S2 6|S3

4200

Kurrens idő Következő szignál

3

Page 13: OPERÁCIÓS RENDSZEREK

Vadász 13

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

Page 14: OPERÁCIÓS RENDSZEREK

Vadász 14

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

Page 15: OPERÁCIÓS RENDSZEREK

Vadász 15

Ütemezési döntési helyzetek1 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.

blocked

running

ready(3)

signal/assign

(1) sleep/wait/request (2)

preempt

schedule/run

waiting

(4) exit

Page 16: OPERÁCIÓS RENDSZEREK

Vadász 16

Ütemezési döntési helyzetek1 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.

Page 17: OPERÁCIÓS RENDSZEREK

Vadász 17

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” …

Page 18: OPERÁCIÓS RENDSZEREK

Vadász 18

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ő.

Page 19: OPERÁCIÓS RENDSZEREK

Vadász 19

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).

Page 20: OPERÁCIÓS RENDSZEREK

Vadász 20

Melyik ütemezési prioritása legyen magasabb?

Fut

ReadyBlokkolt

Fut

ReadyBlokkolt

Egy processz állapotátmenetei I/O lázas időszakában

Egy processz állapotátmenetei CPU lázas időszakában

Page 21: OPERÁCIÓS RENDSZEREK

Vadász 21

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 Medium-term ü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)

Page 22: OPERÁCIÓS RENDSZEREK

Vadász 22

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)

Page 23: OPERÁCIÓS RENDSZEREK

Vadász 23

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.

Page 24: OPERÁCIÓS RENDSZEREK

Vadász 24

“Aging “ algoritmus0, 1, 2, ...,i,.. CPU lázas szakaszok ismétlődnek (nem egyforma

időt igényelve). Becsülhetjük a következő idejét (Ti : tényleges, mért; Bi : becsült):

Bi+1 = a * Ti + (1 - a) * Bi ; ahol 0 <= a <= 1.

Legyen a = 1/2, ekkor (a: súlyozó faktor)

Bi+1 = (Ti + Bi ) / 2

i i +1 i + 2 i + 3 i + 4 i + 5

Ti 6 4 6 4 13 13

Bi 10 8 6 6 5 9 11

Page 25: OPERÁCIÓS RENDSZEREK

Vadász 25

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.

Page 26: OPERÁCIÓS RENDSZEREK

Vadász 26

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.

Page 27: OPERÁCIÓS RENDSZEREK

Vadász 27

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.

Page 28: OPERÁCIÓS RENDSZEREK

Vadász 28

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.

Page 29: OPERÁCIÓS RENDSZEREK

Vadász 29

Unix időkiosztás

Nem megszakítható

Swapper

Diszk I/O várakozás

Várakozás bufferre

Várakozás i-bögre

Megszakítható

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

Küszöb prioritás

User mód prioritás-

tartomány

Kernel mód prioritás-

tartomány

n

0

Page 30: OPERÁCIÓS RENDSZEREK

Vadász 30

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).

Page 31: OPERÁCIÓS RENDSZEREK

Vadász 31

A Unix időkiosztása2

• 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.

Page 32: OPERÁCIÓS RENDSZEREK

Vadász 32

Egy példaEgy 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.

Quantum

A processz B processz C processz

p_uspri p_cpu p_uspri p_cpu p_uspri p_cpu

1 60 0 60 0 63 7

1

2

...

60 7

2 75 30 60 0 61 3

1

....

30 60 3

3 67 15 75 30 60 1

2

...

15 30 61

4 63 7 67 15 75 30

67 15 30

5 76 33 63 7 67 15

8

...

Page 33: OPERÁCIÓS RENDSZEREK

Vadász 33

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!

Page 34: OPERÁCIÓS RENDSZEREK

Vadász 34

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.

Page 35: OPERÁCIÓS RENDSZEREK

Vadász 35

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

Page 36: OPERÁCIÓS RENDSZEREK

Vadász 36

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.

Page 37: OPERÁCIÓS RENDSZEREK

Vadász 37

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!

Page 38: OPERÁCIÓS RENDSZEREK

Vadász 38

Unix processz kontextus komponensek

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 Felhasználói szint

Keret az 1. rétegnek

Keret a 2. rétegnek

Keret a 3. rétegnek

A kontextus statikus része A kontextus dinamikus

(volatile)része

Page 39: OPERÁCIÓS RENDSZEREK

Vadász 39

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.

Page 40: OPERÁCIÓS RENDSZEREK

Vadász 40

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.

Page 41: OPERÁCIÓS RENDSZEREK

Vadász 41

Pszeudókódok1

int save_context() {R0 0;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). */

Page 42: OPERÁCIÓS RENDSZEREK

Vadász 42

Pszeudókódok2

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!

*/

Page 43: OPERÁCIÓS RENDSZEREK

Vadász 43

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 if-nek először nem-nulla értéket ad (és belefut a schedulingba), másodszor 0-val visszatérve kikerüli azt.

*/

Page 44: OPERÁCIÓS RENDSZEREK

Vadász 44

A vezérlés menete … Dönt;

if(save_context( )) {

npid = Ütemez;

Resume_context(npid);

}

2nd;

AIT

B

D

S

Ü

R

IRET

2nd

Page 45: OPERÁCIÓS RENDSZEREK

Vadász 45

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*/}

Page 46: OPERÁCIÓS RENDSZEREK

Vadász 46

Ö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

Page 47: OPERÁCIÓS RENDSZEREK

OPERÁCIÓS RENDSZEREK

Ütemezés és a Context Switch

Vége