Real-time Operativsystem c Ketil Danielsen November 8, 2002 Oversikt hvilke behov har vi (kap. 1-2) hvordan organiseres arbeidet (kap. 3) CPU scheduling (kap. 6) Minnescheduling (kap. 10) Scheduling av I/O (kap. 12) Disk scheduling (kap. 13) Scheduling i nett (kap. 14) CPU scheduling i Windows 2000 (kap. 23) Organisering brukerprogram spesifiseres arbeid som skal gjøres. arbeidet utføres av maskinvaren (CPU, minne, disk, andre enheter) operativsystemet (kernel) bestemmer hvilke program som til enhver tid skal betjenes av maskinvaren Maskinvarebehov noe arbeid utføres av CPU (prosessor), prosessen kan ikke behandle programmet uten at programmets sider ligger i RAM (hurtigminnet) resten utføres av egne prosessorer i ytre enheter: disk, bus, kamera, skjerm, sensorer, tastatur, mikrofon, høyttaler 1
Beskyttelse programmets egne instruksjoner skjer i user mode trap: programmet ber kernel om arbeid mot maskinvare systemkall: det arbeid som kernel skal gjøre kernel utfører instruksjonene i systemkallet i protected mode Real-Time brukerprogram som trenger arbeid utført innen et visst tidsrom (fra, til) Robot for billakkering Scheduling sensor: leser armens tilstandsvariabel kontroller: setter armens kontrollvariabel eks. systemkall: Flytt-Arm (posisjon, fra, til) må ferdigstilles ldots før samlebandet driver bil og arm sammen i et krasj ressurser (CPU, disk, minne,...) deles av flere prosesser (oppgaver) som enten er prosess har en periode: P i (raten blir 1/P i ) og varighet: C i. periodisk prosess har fast periode, fast varighet (aperiodiske ikke) scheduling er utvalg av neste prosess Preemption scheduling både når en er ferdig (avgang), og når en ankommer og vil kjøre kan bety at en som er i gang må vike To filosofier Garantere at konflikter IKKE inntreffer ( hard realtime ) Forsøke å hindre konflikter ( soft realtime ) 2
Soft real-time sett i gang det som kommer, men juster hvis nødvendig jfr. deadlock avoidance, tilstander som var safe og unsafe begrens tilgangen av arbeid hvis nødvendig (d.v.s. graden av multiprogrammering, antallet oppgaver en har i gang) FIFO scheduling velger den som har ventet lengst den utvalgte kjører hele sin burstlengde gir uforutsigbar (kan bli lenge) venting Vranglås vranglås er mulig hvis vi tillater preemption den som viker holder på noe som den utvalgte trenger :-( løses med en midlertidig reaktivering av den/de som holder på ressursen kjedet reaktivering hvis den som HOLDER er flere ledd tilbake i vikeprosessen Shortest-Job First Scheduling, SJF velger den med kortest burstlengde vanskelig å forutsi burstlengde, men kan estimeres optimal (gir lavest gj.sn. ventetid) men gir uforutsigbar ventetid med preemption: Shortest-Remaining Job First (SRJF) Round-Robin Scheduling den utvalgte får kjøre et kvantum q (timeslice) når en er ferdig velges den som har ventet lengst samme som FIFO når q samme som Prosessordeling når q 0; hver prosess får 1/n av ressursen lav q god for interaktivitet høy q god for de med høye burstlengder 3
Priority Scheduling hver prosess har en prioritet lar den med høyest prioritet slippe til neste gang velger FIFO blant de med lik prioritet priority inversion: Vranglås (som beskrevet tidligere) priority-inheritance: En kjedet oppløsning av vranglås der en som HOLDER midlertidig låner prioritetsnivået til UTVALGT Utsultelse en prosess kan risikere å aldri bli utvalgt mulig i FIFO (hvis burstlengden er ubegrenset), SJF/SJRF og Priority, ikke i Round-Robin kan unngås ved aldring periodisk økning av prioritet for de som venter, evt. redusering av prioritet for de som faktisk slipper til Synkronisering kerneldata er delt mellom kernel og alle prosesser endel kernel vil ikke tillate preemption av systemkall systemkall har uforutsigbar varighet, uheldig for real-time et systemkall kan ha preemption points på trygge sted, der delte data ikke aksesseres andre kernel kan være preemptibel, noe som krever synkronisert tilgang (semaforer e.l.) Soft Real-Time En kan ikke garantere timing, men kan gjøre mye godt algoritmisk, samt overdimensjonere ressursene slik at konflikter ikke oppstår (ala Deadlock Prevention). Har en manglende ressurser kan istedet underveis foreta reservering per henvendelse (ala Deadlock Avoidance) 4
Reservering hvert systemkall skal gjennom admission control svar herfra blir ja eller nei program som får nei må revurdere henvendelsen eller gi opp ytelsesmessig fordel om en har en reservasjon oppsatt for lengre tid av gangen (f.eks. hele brukerens arbeidstid) Schedulability Hver oppgave er (C i, P i ) og vil i snitt bruker C i /P i av ressursen. For å først vite om oppgavesettet faktisk kan løses: u = m i=1 C i P i 1 der m er antall oppgaver (prosesser). En kan kalle u for ressursens utnyttelse, utilization. Til salen: Har vi schedulability? prosess periode burstlengde i P i C i A 30 ms 10 ms B 40 ms 15 ms C 50 ms 5 ms ja, har vi det? u = 10 30 + 15 40 + 5 50 =.808 Rate-Monotonic Scheduling (RMS) Preemptiv prioritets-scheduling der hver prosess gis prioritet lik 1/P i. periodiske aldri overstiger C i prosesser er uavhengige aperiodiske ikke har tidsfrister preempt/rescheduling tar ingen tid :-) 5
RMS virker garantert hvis u = m i=1 C i P i m(2 1/m 1) m m(2 1/m 1) 3.780 5.743 10.718 20.705 Til sal: Hvordan forholder u seg i eksemplet? ja, hvordan? u =.808 >.780 Vi har flaks hvis vi unngår konflikter (feiler på tidsfrister). Earliest Deadline First (EDF krever ikke periodisitet eller fast varighet sorterer etter tidsfrist preempt (som RMS) Kriterier reservering prioritering, preemption kan utføre RMS og EDF for alle ressurser; disk, CPU, minne, nett, I/O, etc. Virtuelt Minne prosess/tråd kan kjøres hvis dens pages ligger i minnet demand paging: henter ved behov (venting) pure demand paging: henter kun det som trengs pre-fetching: henter mer enn nødvendig page-replacement: dytte ut hvis fullt page locking: låste pages blir ikke dyttet ut (f.eks. kernelpages) 6
Page Replacement I/O Disk FCFS, FIFO: Den som ankom først Optimal: Den som vil bli sist etterspurt Least Recently Used, LRU: Den som har stått ikke-etterspurt lengst virtuelt minne er (som boken sier) the anti-thesis of real-time computing... ingen garantier kernel køer henvendelser ut til enhetene, kan reorganisere etter behov kan holde tilbake til fordel for realtime, f.eks. i køer mot forskjellige enheter, der noen har real-time scheduling mens andre ikke har varighet: diskarmens bevegelsestid EDF/RMS kan vurdere ankomsttid og varighet real-time data bør legges uavbrutt, hvilket minimerer armbevegelsen men øker ekstern fragmentering FCFS, FIFO (kan gi lang venting); SCAN heisalgoritme ingen garanti Shortest-Seek-Time First (ala SJF for CPU), kan gi utsultelse, men litt bedre for real-time Nettverk datalinklag: tilgang til lokalnett nettlag: ruting mellom lokalnett transportlag: kobling mellom prosessene Lokalnett CSMA/CD: Lytt, send hvis ledig ingen garanti for ventetid Token Passing: Vent på token ingen garanti for når token kommer Reservasjon: Garanti for minimum kapasitet (tidsdelt, frekvensdelt) som i telefonsystemet (ikke GPRS) OK for realtime EDF/RMS: Meldingers lengde og ankomsttid 7
Nettverkslag trenger ende-til-ende reservasjon for real-time Internettet er autonomt oppbygd, ingen kan bestemme hva andre skal tilby av reservasjon i dag nesten umulig å få ende-til-ende reservasjon telefonsystemet: ende-til-ende reservasjon Transportlag TCP sender tapte meldinger om igjen gir ingen tidsgaranti hvis en har nettreservasjon vil en ikke tape meldinger sålenge en ikke overgår minimum kapasitet TCP vil regulere senderaten etter kapasitet, men er ikke bygd for realtime Internettet er IKKE for real-time, telefonsystemet er! Derfor går videokonferanser via ISDN Faktiske schedulere Disse bruker prioriteter for schedulere og sier i sitt brosjyremateriell at de støtter real-time computing JVM: Javatråd viker preemptibelt Solaris 2 Windows NT/2000 I praksis vil real-time her kreve kraftig overdimensjonering for å bedre (men ikke garantere) timing. Windows 2000 (W2K) jobb prosess tråd fiber kernel foretar scheduling av tråd 1:1 mapping mellom brukertråd og kerneltråd bruker prioriteter og kvantum 8
Frigivelse scheduler kjøres skjer hvis aktiv tråd blokkerer (venter på hendelse; frigivelse av lås, semafor, I/O ferdig) signaliserer et objekt dette kan bety at en høyere prioritert tråd bør få kjøre har brukt sitt q (hver tråd har sitt eget kvantum q) scheduler kjøres også ved eksterne hendelser I/O er ferdig en tidsavgrenset venting (soving) er over Prioritering 32 prioritetsnivåer (0-15 for variabel og 16-31 for real-time) Microsoft sier real-time, men dette er soft real-time! scheduler velger alltid den med høyest CP Prioritetsreduksjon en tråd har en base og en current prioritet (BP og CP) de med BP mellom 0 og 15 kan ha CP variert mellom BP og 15 reduksjon kvantum er ferdig: CP=min(BP,CP-1) Prioritetsøkning CP=max(CP+boost, 15) for de som venter: I/O mot disk ferdig: boost=1 I/O mot seriell-linje (f.eks. modem) ferdig: boost=2 frigitt semafor/lås: boost=2 I/O mot tastatur/mus ferdig: boost=6 I/O mot lydkort ferdig: boost=8... gir bedre interaktivitet, CP reduseres gradvis for hvert kvantum 9
Vranglås i W2K priority inversion i W2K eks.: Tre tråder med BP=4, 8 og 12 den med BP=12 låser annen ressurs X (f.eks. semafor) den med BP=8 blir valgt (BP er blokkert) den med BP=4 vil aldri kunne få tilgang til X sålenge andre prosesser med 4<BP<12 kjører... vranglås hack en prosess boostes (CP=15) i to kvantum hvis den har ventet lenge fungerer fordi lang ventetid er symptom på at vranglås har inntruffet andre typer vranglås blir stort sett ignorert (strutsealgoritmen) Kvantemanipulasjon W2K Professional (der brukerne sitter) har q = 20 ms, hvilket er godt for interaktivitet W2K Server/Data Center (servere, databaser) har q = 120 ms når et vindu blir aktivt (for den bruker som sitter bak maskinen) får tråden en kortvarig boost av q, nok en gang for interaktivitetens skyld 10