Fö 7 TSEA81. Scheduling

Relevanta dokument
Fö 7+8 TSEA81. Scheduling + Real-time Linux. wait. } else { sem->wait_list, WAIT_LIST_SIZE, pid); // semaphore waiting list

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

Fö 5+6 TSEA81. Reflektion av Lab 2. clock.c (module) Real-time kernel + Real-time OS

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Fö 2 TSEA81 Datorteknik och realtidssystem

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

Tentamen. Datorteknik och realtidssystem

Tentamen. Datorteknik och realtidssystem

Tentamen. Datorteknik och realtidssystem

Realtidssystem. - Schemaläggning - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 6

Realtidssystem. - Schemaläggning - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 6

Aktivitetsschemaläggning för flerkärninga processorer

syftar till att förbättra prestanda. Den kan avse något eller flera av följande mått.

Realtidsprogrammering Ordinarie tentamen

Exam Concurrent and Real-Time Programming

Tentamen i Realtidsprogrammering för Au3, D3, E3

Omtentamen i Realtidsprogrammering för Au3, D3, E3

Realtidssystem HT03. Vad är realtidssystem? Inbyggda system. Att programmera, Tasks (Uppgifter) Realtidssystem kräver analys

Tentamen EDA698 Realtidssystem (Helsingborg)

Realtidssystem. - Semaforer, trådsynkronisering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

Realtidssystem. - Semaforer, trådsynkronisering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 2

Schemaläggning Unix. Minneshantering etc. Linux. Schemaläggning av trådar (kernel threads) Detaljer. Operativsystem - Lektion 7

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

Realtidssystem Z EDA300 Tentamen 15/ , kl i V-huset

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Tråd C (ms) T (ms) A 4 16 B 3 10 C 4 25 D 2 12

Realtidsstöd i Minix. En laborationrapport. Oktober 2012

Tentamen omfattar 40 poäng fördelade på 7 uppgifter. 20 poäng krävs för betyget 3, 30 poäng för betyget 4 och 36 poäng för betyget 5.

Multimedia. Multimedia. Datakompression. Annorlunda krav. Inte bara text eller nerladdning av filer. Video, ljud med tidskrav.

Tentamen Lösningar EDA698 Realtidssystem

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör.

Concurrency Saker händer samtidigt. Process En instans av ett program

Lösningar till tentamen i EIT070 Datorteknik

Fö 4 TSEA81. Monitors and Message passing

Datorteknik ERIK LARSSON

Dagens OS. Unix, Linux och Windows. Unix. Unix. En översikt av dagens OS Titt på hur de gör. Många varianter Mycket gemensamt. En del som skiljer

Operativsystem ID1200/06 Tentamen :00-18:00

Tentamen. Datorteknik och realtidssystem

Synkronisering - Semaforen. Om att vänta men inte i onödan

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

Realtidssystem. - Dödläge - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 5

Fö 4 TSEA81. Monitors and Message passing. Condition variables - händelsevariabler

Några gamla tentamensuppgifter: Processer. 3. Antag givet ett system i vilket rent CPU-bundna processer med följande egenskaper exekveras.

Operativsystem - Processkedulering

Realtidssystem, device drivers. Föreläsning 10

Mekanismer. (implementation)

Schemaläggningsmetodik för multi-core inom Windows 7 OS Vad är scheduling och hur schemalägger Windows OS sina processer?

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

Realtidssystem. - Monitorer, synkroniserade metoder - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

Kompletterande kompendium till kursen Realtidsprogrammering

Datorarkitekturer med operativsystem ERIK LARSSON

Spekulativ exekvering i CPU pipelining

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Fö 8 TSEA81. Real-time Linux

Tentamen i Realtidsprogrammering

TENTAMEN I REALTIDSPROCESSER OCH REGLERING TTIT62

Vad är viktigast? Sammanfattning. Processer och trådar. Processer och trådar. Flerprocessorsystem. Schemaläggning. Interprocesskommunikation.

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Realtidssystem. - Introduktion, jämlöpande exekvering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 1

Tentamen Datastrukturer (DAT036)

Realtidsprogrammering

Fö 7: Operativsystem. Vad är ett operativsystem? Målsättning med operativsystem. Styr operativsystemet datorn?

Olika OS. Unix, Linux och Windows. Unix. Unix. En översikt av ett par OS. Titt på hur de gör. Många varianter. Mycket gemensamt. En del som skiljer

Synkronisering. Ordning och reda

Översikt. Datorarkitekturer med operativsystem. Inledning. Inledning

Tentamen i TDIU16 Process- och operativsystemprogrammering

Tentamen Datastrukturer (DAT036)

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Operativsystem - Processkommunikation

Pipelining i Intel Pentium II

Datorteknik ERIK LARSSON

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

LULEÅ TEKNISKA UNIVERSITET

Hantering av hazards i pipelines

Tentamen i Realtidsprogrammering

Summering av fält 1.1. Synkronisering - Semaforen. Summering av fält 1.3. Summering av fält 1.2. Summering av fält 2.3 (INTE GK)

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Installation av atmel Studio på mac / linux

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

Design av inbyggda system

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

Design av inbyggda system. Innehåll. Hårdvarunära design. Hårdvarunära design. Hårdvarunära design. Hårdvarunära design TDD

Design av inbyggda system

(Lösningsförslag finns sist i denna fil.)

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Del A (obligatorisk för alla)

Datorkonstruktion. Datorkonstruktion 2018, 8hp

Realtidssystem. - Introduktion, jämlöpande exekvering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 1

TDDIU81. Processer och trådar. Andreas Dahlberg, Jonathan Doherty, Tony Magnusson, Patrik Ottosson, Rasmus Siljedahl

Design av inbyggda system

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put)

Tentamen EDAF30 Programmering i C++

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tommy Färnqvist, IDA, Linköpings universitet

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Transkript:

Fö 7 TSEA81 Scheduling

Reflektion Lab 3 Operation Linux Simple OS * wait pthread_mutex_lock si_sem_wait * signal pthread_mutex_unlock si_sem_signal * await pthread_cond_wait si_ev_await * cause pthread_cond_broadcast si_ev_cause

wait void si_sem_wait(si_semaphore *sem) { int pid; DISABLE_INTERRUPTS; // wait operation on semaphore sem // process id // atomic section begins if (sem->counter > 0) { // check counter sem->counter--; // decrement else { pid = process_get_pid_running(); // get pid of running process ready_list_remove(pid); // remove it from ready list wait_list_insert( // insert it into the sem->wait_list, WAIT_LIST_SIZE, pid); // semaphore waiting list schedule(); // call schedule ENABLE_INTERRUPTS; // atomic section ends

signal void si_sem_signal(si_semaphore *sem) { int pid; DISABLE_INTERRUPTS; // signal operation on semaphore sem // process id // atomic section begins if (!wait_list_is_empty( // check if processes sem->wait_list, WAIT_LIST_SIZE)) // are waiting on semaphore { pid = wait_list_remove_highest_prio( // get pid with sem->wait_list, WAIT_LIST_SIZE); // highest priority ready_list_insert(pid); // make this process ready to run schedule(); // call schedule else { sem->counter++; // increment counter ENABLE_INTERRUPTS; // atomic section ends

await void si_ev_await(si_event *ev) // await operation on ev { int pid; DISABLE_INTERRUPTS; // atomic section begins if (!wait_list_is_empty( // check if processes ev->mutex->wait_list, WAIT_LIST_SIZE)) // are waiting on the mutex { pid = wait_list_remove_highest_prio( // get pid with ev->mutex->wait_list, WAIT_LIST_SIZE); // highest priority ready_list_insert(pid); // make this process ready to run else { ev->mutex->counter++; // increment counter pid = process_get_pid_running(); // get pid of running process ready_list_remove(pid); // remove it from ready list wait_list_insert( // insert it into the ev->wait_list, WAIT_LIST_SIZE, pid); // event waiting list schedule(); // call schedule ENABLE_INTERRUPTS; // atomic section ends

cause void si_ev_cause(si_event *ev) // cause operation on ev { int done; int pid; DISABLE_INTERRUPTS; // atomic section begins done = wait_list_is_empty( // we are done if the ev->wait_list, WAIT_LIST_SIZE); // wait list is empty while (!done) { pid = wait_list_remove_one( // remove one process from the ev->wait_list, WAIT_LIST_SIZE); // list of waiting processes wait_list_insert( // insert it into the ev->mutex->wait_list, WAIT_LIST_SIZE, pid); // mutex waiting list done = wait_list_is_empty( // check if we ev->wait_list, WAIT_LIST_SIZE); // are done ENABLE_INTERRUPTS; // atomic section ends

Scheduling...

Priority based scheduling Prioritetsbaserad schemaläggning * Den process, som är redo, med högst prioritet får köra * Processer med samma prioritet: -Tidskvanta : den som varit körklar längst (Round-Robin scheduling, körklara processer med samma prioritet får dela på CPU-tiden) -Köordning : den som ligger först i ready-listan (FIFO) * Statisk eller dynamisk prioritet Frivillig / non-preemptive (cooperative) Påtvingad / preemptive * Processen avslutar frivilligt * Processbyte kan ske när som helst, dvs, man får vänta på att den blir klar t ex via klockavbrott Priority based preemptive scheduling är vanligt i realtidssystem, just för att få bättre kontroll över när processer ska köras.

Fenomenet kallas prioritetsinversion. Prioritetsinversion och prioritetsärvning * regulator_proc, prio 10 (högst), skriver data till buffert * user_proc, prio 20, interagerar med användaren, använder inte buffert * log_proc, prio 30 (lägst), loggar data från reglersystemet, använder buffert Antag följande scenario: -log_proc har tillgång till buffert och kör -regulator_proc blir körklar, vill skriva i buffert, men får vänta då buffert är reserverad av log_proc -user_proc blir aktiv, och får köra eftersom user_proc har högre prio än log_proc -nu använder inte log_proc buffert, men den är reserverad, så regulator_proc får vänta och user_proc (med lägst prio) är den som kör

Tips: googla på mars pathfinder priority inversion Prioritetsinversion och prioritetsärvning * regulator_proc, prio 10 (högst), skriver data till buffert * user_proc, prio 20, interagerar med användaren, använder inte buffert * log_proc, prio 30 (lägst), loggar data från reglersystemet, använder buffert Lösning: Prioritetsärvning: Höj tillfälligt (under användning av buffert) prio på log_proc till samma prio som regulator_proc, dvs 10. Då kan log_proc köra klart (utan avbrott från user_proc), sedan släppa buffert (samtidigt återta sin prio, dvs 20) varpå regulator_proc kan köra. Därmed slipper regulator_proc vänta onödigt länge.

Time-driven scheduling Schemaläggning sker vid bestämda tidpunkter * Static Cyclic Scheduling (cyclic executive): Processer anropas som funktioner i en viss ordning med ett visst periodiskt tidsintervall, ofta orsakat av ett klockavbrott. Processerna har typiskt olika anropsfrekvenser för att på så sätt fördela körtiden. Vissa kör oftare, andra mer sällan. * Periodiska anrop kräver att processerna kör färdigt inom sitt tidsintervall, eller att arbetet kan delas upp i delar. Alternativt kan man använda ett background/foreground-system, där tidskritiska/periodiska processer styrs via tidsavbrott och övriga processer körs i bakgrunden. * Time-driven scheduling kan göras med ett tidskvanta för var process. När en viss körtid är uppnådd sker ett processbyte.

Periodiska processer * Periodiska processer ska starta med en viss periodicitet * Det finns tidskrav på att processens arbete ska slutföras inom en föreskriven sluttid, en dead-line * Låt e vara tiden det tar att köra do_work() * Låt w vara tiden processen väntar * Låt p = e+w vara periodtiden // princip för periodisk process while (1) { do_work(); // e time units sleep(w); // w time units * Processens CPU-utnyttjande blir e/p * Systemets CPU-utnyttjande blir U e = σ n i=1 (e i / p i ) * Antag två processer: -P1 skall under tidsintervallet [i5, (i+1)5] köra 2 tidsenheter (i är ett heltal >=0) -P2 skall under tidsintervallet [i3, (i+1)3] köra 1 tidsenhet (i är ett heltal >= 0) * Utnyttjandegraden blir U e = 2/5 + 1/3 = 11/15 0.73

Periodiska processer * Antag att prioritetsbaserad påtvingad Schemaläggning används * Antag att P1 har högst prioritet Följande händer: -Båda processerna anses körklara vid tidpunkt 0, och P1 får köra 2 tidsenheter och inleder sedan väntan i 3 tidsenheter -Vid tidpunkt 2 får P2 köra 1 tidsenhet och inleder sedan väntan i 2 tidsenheter -Båda processerna möter/klarar sina dead-lines/tidskrav under första varvet -Båda processerna blir åter körklara vid tidpunkt 5, och P1 (högst prio) får köra -Eftersom P1 under andra varvet är klar först vid tidpunkt 7, så missar P2 sin dead-line vid tidpunkt 6 Mönstret upprepar sig efter 5 tidsenheter och den verkliga utnyttjandegraden blir U e = 3/5 = 0.60 (jfr med förväntad U e =0.73)

Periodiska processer * Antag att prioritetsbaserad påtvingad Schemaläggning används * Antag att P2 har högst prioritet Följande händer: -Båda processerna anses körklara vid tidpunkt 0, och P2 får köra 1 tidsenhet och inleder sedan väntan i 2 tidsenheter -Vid tidpunkt 1 får P1 köra 2 tidsenheter och inleder sedan väntan i 3 tidsenheter -Vid tidpunkt 3 kör P2 1 tidsenhet och väntar 2 tidsenheter -Båda processerna blir åter körklara vid tidpunkt 6, och P2 (högst prio) får köra -P2 klarar sina dead-lines, men P1 gör inte det då den bara får köra under 2 av 6 tidsenheter Mönstret upprepar sig alltså efter 6 tidsenheter och den verkliga utnyttjandegraden blir U e = 4/6 = 0.67 (jfr med förväntad U e =0.73)

Periodiska processer * Systemet klarar inte tidskraven för båda Processerna då väntetiden är konstant, bättre vore att vänta fram till periodtidens slut: -P1 högst prio: U e = 11/15 0.73 -P2 högst prio: U e = 11/15 0.73 // bättre princip för // periodisk process const int TASK_PERIOD=...; t = get_time(); while (1) { do_work(); // e time units t = t + TASK_PERIOD; sleep_until(t); P1 högst prio P2 högst prio

Periodiska processer : EDF EDF Earliest Deadline First: Den körklara process som har kortast tid kvar till nästa sluttid får köra. Den relativa sluttiden definieras som tiden från körklar fram till nästa sluttid. Då de relativa sluttiderna sammanfaller med processernas periodtider och förväntad U e 1 kommer EDF leda till att processerna håller sina sluttider. [Liu och Leyland, 1973] Förutsättning: att påtvingad schemaläggning används. P1: kör 2 tidsenheter i intervallet [i5,(i+1)5] P2: kör 1 tidsenhet i intervallet [i3,(i+1)3]

Periodiska processer : RMS RMS Rate Monotonic Scheduling: Processer får prioritet utefter hur ofta de ska köras. Dvs, kortare periodtid ger högre prioritet. Då RMS och påtvingad schemaläggning används för n processer där de relativa sluttiderna sammanfaller med processernas periodtider och utnyttjandegraden uppfyller U e n 2 1/n 1, så kommer processernas sluttider att hållas. [Liu och Leyland, 1973] T ex: För processerna P1 och P2 med RMS gäller: 2(2 1/2 1) 0.83 P2 har kortast periodtid och om P2 får högst prio uppfylls tidskraven. Då n så n 2 1/n 1 ln2 0.69 Dvs, tumregel: Om CPU-utnyttjandet är mindre än 69% kommer tidskraven att uppfyllas. Förutsättning: processerna får inte vara beroende av varandra, t ex via mutexar som orsakar prioritsinversion.

Periodiska processer Deadlines för processerna är ofta given i krav/specifikation. Hur får man tag i körtiderna? * För simpla mikrokontrollers (AVR el liknande): -Räkna klockcykler i den assemblerade koden, och ta hänsyn till eventuella avbrott * För en mer avancerad processor: -Svårt att mäta/beräkna tiden exakt: Cacheminne och DMA-access påverkar åtkomsttider Pipelining, branch prediction, out-of-order execution påverkar cykeltider Synkronisering av data mellan flera kärnor är svårberäknad Slutsats: Räkna med att få ut ungefärliga tider * Vid mycket hårda realtidskrav, använd FPGA och bygg en speciallösning för uppgiften

Scheduling : Realtidssystem Slutliga tips, vid konstruktion av realtidssystem: * Håll schemaläggningen enkel. Går det att använda statisk schemaläggning utan trådar/processer: Gör det! Använd bara trådar om nödvändigt. * Använd inte onödigt många lås, tillståndsvariabler, semaforer och dylikt. Håller man det enklare blir det lättare att felsöka. * Ha gärna gott om marginal för processorutnyttjande, dvs snåla inte med processorkraften vid val av processor. Det blir förstås dyrare vid stora produktionsserier, men felsökningstid kostar också pengar. * Det kan ofta vara lönsamt att flytta över realtidsfunktionaliteten till en enklare processor (typ AVR) som kör ett enklare realtids-os (om ens det). * Vid mycket hårda realtidskrav, använd ren hårdvara (t ex en FPGA).