IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer 6 apr -17 IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) vt 2009 (period 3-4) för E och I m.fl. 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200 6 apr -17 IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200 Våren 2009 Period 3 F1 F2 Ö1 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling F3 F4 Ö2 Ö3 LAB-1 F5 Ö4 Hemlab-1 F6 Ö5 Ö6 LAB-2 Våren 2009 Period 4 F7 Ö7 LAB-3 F8 Ö8 Hemlab-2 F9 Ö9 Hemlab-3 F10 Ö10 Tentamen 6 April 2017 IS1200 Datorteknik vt2009 föreläsning 6, (E och I m.fl.)
Föreläsning 9 1. CPU-scheduling (förberedelse till hemlab 3) 6 apr -17 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling (förberedelse till hemlab 3) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Realtidskärna Viktiga begrepp (en del) Kursboken kap 5.4 - 5.7 CPU - scheduling Time Slice Timer Interrupt Context Switch (process/thread switch) Process Control Block / Thread Control Block Ready Queue Round Robin 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
CPU-scheduling Round Robin OS Tråd 1 Tråd 2 Tråd 3 context switches time-slice . . . time-out time-out time-out time-out time-out time-out 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Åtgärder vid Context Switch Save TCB: Spara undan viktig information, dvs allt som behövs för att kunna fortsätta exekvering vid senare tidpunkt. (TCB – Thread Control Block) Put in RQ: Placera processen/tråden i Ready-Queue Get from RQ: Välj en ny, viktig, process/tråd ur Ready-Queue Unsave TCB: Kopiera in dess TCB till processorn Return: Starta/fortsätt exekvering av den nyhämtade processen/tråden 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Sid 7 utgår 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Program-Kod för context switch # TCB kan skrivas som ett makro, se nedan TCBSAVE # spara TCB i minnet (på lokal stack) move r4, sp # kopiera sp till r4 call RQPUT # skriv sp i Ready Queue # här görs ”språnget” mellan 2 processer/trådar call RQGET # läs ny sp från Ready Queue move sp, r2 # kopiera r2 till sp TCBUNSAVE # kopiera TCB till processorn . . . cswret: eret # tillbaks till utvald tråd/process 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Program-Kod för context switch (forts.) oslab_time_to_switch: . . . oslab_trap_handler: # TCB kan skrivas som ett makro, se nedan TCBSAVE # spara TCB i minnet (på lokal stack) move r4, sp # kopiera sp till r4 # här görs ”språnget” mellan 2 processer/trådar call oslab_internal_threadswitch move sp, r2 # kopiera r2 till sp TCBUNSAVE # kopiera TCB till processorn cswret: eret # tillbaks till utvald tråd/process 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-II Process Control Block - PCB Thread Control Block - TCB sp r29 (ea) r1—r23 r26 (gp) r28 (fp) 27 register 108 bytes r31 #returadress 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-II Process Control Block - PCB Thread Control Block - TCB programkod ret sp r29 (ea) r1—r23 r26 (gp) r28 (fp) r4 ”Object”: inparam r31 #returadress 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Ready Queue Current Thread and PCB:s Idle 0 TCB0 Process Control Block sp1 1 sp2 2 running_thread sp3 3 TCB4 Process Control Block sp4 4 sp5 5 TCB2 Process Control Block TCB5 Process Control Block TCB1 Process Control Block Ready Queue innehåller (stack-) pekare till PCB:er 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
oslab_thread_info_array before idle runs upptagen oslab_thread_info_array[0] Idle-thread oslab_current_thread_count = 1 oslab_currently_running_thread oslab_next_available_thread_id = 1 MAX_THREADS = 17 oslab_thread_info_array[16] ledig 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
oslab_thread_info_array idle and 5 threads upptagen ? Idle-thread sp1 1 First created thread sp2 2 Second created thread ... oslab_currently_running_thread sp3 3 sp4 4 sp5 5 oslab_current_thread_count = 6 oslab_next_available_thread_id = 6 MAX_THREADS = 17 oslab_thread_info_array[16] ledig 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Realtidskärna Viktiga begrepp (igen) Time-Slice #10-100 millisekunder TCB Save # spara undan Process Control Block RQ Put # pekare till tråd läggs i Ready Queue RQ Get # pekare till tråd tas ur Ready Queue TCB Unsave # återställ Process Control Block Exit # avsluta en tråd CreateThread (Addr, SP, PRIO, ...) # initiera ett Process Control Block Yield # släpp resten av en Time-Slice (Sleep # ”sov en stund” (inte nu!) ) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
CPU-scheduling Exit (System Call) OS Tråd 1 Tråd 2 Tråd 3 Round Robin time-slice exit Tråd 2 borta ur RQ ! time-out time-out time-out time-out 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
CPU-scheduling Create (System Call) OS Tråd 1 Tråd 2 Tråd 3 Tråd 4 Round Robin time-slice create Tråd 4 tillkom i RQ ! time-out time-out time-out time-out time-out time-out 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
CPU-scheduling Yield (System Call) OS Tråd 1 Tråd 2 Tråd 3 Sound Robin time-slice < time-slice yield Tråd 2 vilar i RQ ! time-out time-out time-out time-out time-out 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Program-Kod för context switch (repris) TCBSAVE # spara TCB på lokal stack move r4, sp # kopiera sp till r4 call RQPUT # skriv sp i Ready Queue # här görs ”språnget” mellan 2 processer/trådar call RQGET # läs ny sp från Ready Queue move sp, r2 # kopiera r2 till sp TCBUNSAVE # kopiera TCB till processorn . . . cswret: eret # tillbaks till utvald tråd/process 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Kod för context switch mer liknande lab-PM TCBSAVE # spara TCB på lokal stack move r4, sp # kopiera sp till r4 call oslab_internal_threadswitch # RQPUT och RQGET i C-kod move sp, r2 # kopiera r2 till sp TCBUNSAVE # kopiera TCB till processorn cswret: eret # tillbaks till utvald tråd/process 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Nios-II (repris) Process Control Block - PCB Thread Control Block - TCB sp r29 (ea) r1—r23 r26 (gp) r28 (fp) r31 #returadress 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-II: Macro för att pusha register på stacken .macro TCBSAVE #r29, r1-r23, r26, r28, r31 push r31 # returadress push r28 # fp push r26 # gp push r23 . . . push r2 push r1 push r29 # ea .endm 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-II: Macro för att poppa register på stacken .macro TCBUNSAVE #r29, r1-r23, r26, r28 pop r29 # ea pop r1 pop r2 . . . pop r23 pop r26 # gp pop r28 # fp pop r31 # returadress .endm 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-II: Macro för att lagra register till stacken .macro TCBSAVE # r1-r23, r26, r28 subi sp, sp, 27*4 # 27 platser stw ea, 4*0(sp) # r29 = ea stw r1, 4*1(sp) stw r2, 4*2(sp) . . . stw r23, 4*23(sp) stw r26, 4*24 (sp) # r24 = gp stw r28, 4*25 (sp) # r26 = fp stw r31, 4*26 (sp) # r31 = ra .endm 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-II: Macro för att ladda register från stacken .macro TCBUNSAVE #r1-r23, r26, r28 ldw r1, 4*1(sp) ldw r2, 4*2(sp) . . . ldw r23, 4*23(sp) ldw r26, 4*24(sp) ldw r28, 4*25(sp) ldw r31, 4*26(sp) ldw ea, 4*0(sp) # r29 = ea addi sp, sp, 27*4 # 27 platser .endm 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Exceptions in Nios-II Suggested software structure 6 apr -17 Exceptions in Nios-II Suggested software structure ExcHand: IntHand: Int ? Yes subi r29, r29, 4 No NoInt: trap0 trap1 trapn error TrapHand: No trap0Hand Yes trap1Hand trapnHand eret Yes Trap ? Yes IRQ00 irq00Hand No No Yes ElseHand IRQ10 irq10Hand No IRQ31 Yes irq31Hand No int error eret instr 0x800020:”jmp ExcHand” trap 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Exceptions in Nios-II Suggested software structure 6 apr -17 Exceptions in Nios-II Suggested software structure ExcHand: IntHand: Int ? Yes subi r29, r29, 4 TimerIntHand: No NoInt: Yes Yes Trap ? IRQ10 100? Yes No No No ElseHand error eret Context Switch int instr TrapHand: 0x800020:”jmp ExcHand” trap eret 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) PAUS-RUTA Snart kommer nästa portion 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Föreläsning 9 2. Semaforer (förberedelse till hemlab 3) 6 apr -17 2G1518 Datorteknik Föreläsning 9 2. Semaforer (förberedelse till hemlab 3) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Samverkande processer Användning av semaforer vid Synkronisering Ömsesidig uteslutning 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Semafor, vad är det En heltalsvariabel (0, 1, 2, 3 … -1, -2 ??) (men med) Speciella egenskaper Operationer (atomära - odelbara) signal (sem) ~ öka med 1 wait (sem) ~ minska med 1 om det går (annars ”vänta” tills det går) Binär semafor, kan anta värde 0 eller 1 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Semafor korgbollsanalogi 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Lägg en till boll i korgen Semafor korgbollsanalogi BOLL KORG SIGNAL är ungefär: Lägg en till boll i korgen (och fortsätt sedan…) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Vänta (vid behov) tills det finns minst en boll i korgen Semafor korgbollsanalogi BOLL KORG WAIT är ungefär: Vänta (vid behov) tills det finns minst en boll i korgen Ta en boll ur korgen (och fortsätt sedan …) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Dijkstra Signal - Verhogen; V(sem) Wait - Proberen; P(sem) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Samverkan mellan processer med hjälp av semaforer Synkronisering Ömsesidig uteslutning (Mutual Exclusion) Rendez Vous (dubbel synkronisering) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering: P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning: P1 i T1 kritisk liksom P2 i T2 P1 och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 Och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 P1 Och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 Och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 P1 Och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 Och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 P1 Och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 Och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 P1 Och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 Och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 P1 Och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 Och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 P1 Och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 Och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 P1 Och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
P1 Och P2 får inte exekveras ”samtidigt” Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 P1 Och P2 får inte exekveras ”samtidigt” T1: T2: … wait P1: … signal … wait P2: signal … 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Rendez Vous T1 och T2 inväntar varandra innan S1 och S2 exekverar … P1: … signal wait S1 … P2: … signal wait S2 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Testprogram (hem-laboration 3) Producers, p stycken, producerar primtal Consumers, c stycken, konsumerar primtal FIFO (buffert) med x platser för primtal 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Producer init: tal := start ploop: räkna ut nästa primtal, tal anropa PUT-FIFO (tal) br ploop 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Producer ”NiosII-kod” / makron prod: movia r4, start ploop: call NextPrime # subrutin PUTFIFO # macro # yield() ??? br ploop 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Producer C-kod enligt hemlab 3 Void Producer ( … ) next = ”startvalue from inparam” while (1) { next = NextPrime(next) // function PutFifo(next) // function // yield() // maybe ? } 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Consumer ”NiosII-kod” / makron init: vid behov ? cloop: anropa GET-FIFO (tal) konsumera primtalet (skrivut tal) br cloop 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Consumer C-kod enligt hemlab 3 Void Consumer ( … ) while (1) { next = GetFifo() // function ”consume” (next) // function // yield() // maybe ? } 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) PUT-FIFO Skriv data till FIFO-buffert på ett säkert sätt Det måste finnas minst en ledig plats ”Samtidig” skrivning är kritisk Vad är det som är kritiskt ? Hantering av skrivpekaren wraddr ! 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
FIFO Queue, Data Structure (jfr med RQ!) wraddr: rdaddr: Fifo: ledig upptagen FifoEnd: 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
FIFO Queue, Data Structure #define Fifo_Size 16 int Fifo[Fifo_Size] ; int wraddr = 0 ; int rdaddr = 0 ; 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) C-code: skriv tal till Fifo-buffert C-code: läs till tmp från Fifo-buffert /* skriv tal */ Fifo[wraddr] = tal; wraddr = wraddr + 1; if (wraddr == Fifo_Size) wraddr = 0; /* läs tal till retval */ retval = Fifo[rdaddr] ; rdaddr = rdaddr + 1; if (rdaddr == Fifo_Size) rdaddr = 0; 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) PUT-FIFO wrmut anrop … wait … wait … wrfifo … signal … signal … retur nrempty nrfull 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
”Nios-kod” för PUTFIFO (bara en massa macron) PUTFIFO: WAIT nrempty WAIT wrmut call wrfifo SIGNAL wrmut SIGNAL nrfull RETURN 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-II-kod Macro för System Call .macro SysCall index movia r4, \index trap .endm 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-II-kod Macro för Signal och Wait .macro SIGNAL sem movia r5, \sem SysCall 6 # trap med 6 i r4 .endm .macro WAIT sem movia r5, \sem SysCall 7 # trap med 7 i r4 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) GET-FIFO Läs data från FIFO-buffert på ett säkert sätt Det måste finnas minst en upptagen plats Samtidig läsning är kritisk Vad är det som är kritiskt ? Hantering av rdaddr ! 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) nrempty nrfull retur … signal … signal … rdfifo … wait … wait … anrop rdmut GET-FIFO 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Nios-kod för GETFIFO (bara en massa macron) GETFIFO: WAIT nrfull WAIT rdmut call rdfifo SIGNAL rdmut SIGNAL nrempty RETURN 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) CPU-scheduling time-slice OS Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
En process kan göra yield Lämna bort resten av sin time-slice Speciellt vid wait-operation på semafor Nästa thread bör få en hel time-slice Vid en semafor finns ”väntande threads” En signal kan flytta en thread till RQ Det finns olika varianter vid signal (vilken tråd ska fortsätta efter signal ?) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Några sidor om SIGNAL som System Call med TRAP 6 WAIT som System Call med TRAP 7 YIELD som System Call med TRAP 8 EXIT som System Call med TRAP 9 Nios-II-kod för signal, wait och yield ... 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Signal med Nios-II-kod pekare till semafor i r5 # Om anrop görs med SysCall 6 är PIE redan= 0 # DI # enter critical trap6:ldw r24, 0(r5) # hämta värde addi r24, r24, 1 # lägg till en boll stw r24, 0(r5) # skriv värde # EI # NEJ ! eret # medför även EI 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
function: Signal med C-kod inparameter: pekare till semafor void Signal ( int * sem) { oslab_begin_critical_region() ; *sem = *sem + 1 ; oslab_end_critical_region() ; } 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Wait med Nios-II-kod pekare till semafor i r5 Om anrop görs med TRAP7 är PIE redan =0 trap7: ldw r24, 0(r5) # läs nytt semaforvärde bgt r24, r0, ball # hopp om minst en boll noball: PUSHCTL 1 # skydda estatus PUSH r29 # skydda ea EI # släpp in TimerInt, OBS OBS ! # YIELD # om så önskas med SysCall 8 DI # hindra TimerInt POP r29 # återställ ea POPCTL 1 # återställ estatus br trap7 # och leta boll igen ball: subi r24, r24, 1 # ta en boll stw r24, 0(r5) # semaforvärde skrivs tillbaks eret # medför även EI 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
function: Wait med C-kod inparameter: pekare till semafor void Wait (int * sem) { oslab_begin_critical_region() ; while ( *sem <= 0) { oslab_end_critical_region() ; /* os_lab_yield(); */ oslab_begin_critical_region() ; } *sem = *sem -1 ; oslab_end_critical_region() ; } 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Program-Kod för context switch (uppdaterad repris) TCBSAVE # spara TCB på lokal stack move r4, sp # kopiera sp till r4 call RQPUT # skriv sp i Ready Queue # här görs ”språnget” mellan 2 processer/trådar exit: call RQGET # läs ny sp från Ready Queue move sp, r2 # kopiera r2 till sp TCBUNSAVE # kopiera TCB till processorn . . . cswret: eret # tillbaks till utvald tråd/process 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Yield med Nios-kod YIELD-anrop görs med TRAP 8 TRAP 8 görs med SysCall 8 Vad ska utföras av YIELD ? Samma sak som context switch ! 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Kod för YIELD Hit kommer man efter YIELD-anrop och det ska göras Context Switch (Timern ska justeras till hel time-slice …) trap8: push r29 br contextswitch 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) EXIT med Nios-kod EXIT-anrop görs med TRAP (t.ex TRAP9) TRAP 9 görs med SysCall 9 Vad ska utföras av EXIT ? Tråden ska ej placeras i RQ ! 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Kod för EXIT Hit kommer man efter EXIT-anrop och det ska göras Context Switch (Timern ska justeras till hel time-slice …) trap9: br exit 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl) Hem-laboration 3 Material ingår i tentamen (se extentor) Lab-PM finns på hemsidan Labben körs på NiosII-simulatorn ! Labben ska redovisas muntligt Ensam eller i grupp om 2 (ev 2 grupper) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Hem-laboration 3 CPU-scheduling / semaforer Idle-tråd kan göra Yield Producer skriver primtal till FIFO Consumer läser primtal från FIFO Antal Producers varieras Antal Consumers varieras Antal platser i FIFO varieras Beteende vid WAIT varieras 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
CPU-scheduling Idle-tråd och en Producer OS Idle (gör inte yield) Prod 1 Round Robin time-slice Idle tar cirka 50% av tiden Prod 1 får cirka 50% av tiden 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
CPU-scheduling Idle-tråd och en Producer OS Idle (Idle gör yield) Prod 1 Round Robin time-slice Idle tar cirka 0% av tiden Prod 1 får nästan 100% av tiden 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Proc 1 får cirka 33% av tiden CPU-scheduling Idle-tråd och tre Processer OS Idle (Idle gör yield) Proc 1 Proc 2 Proc 3 Round Robin time-slice Proc 1 får cirka 33% av tiden 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Proc 1 får cirka 20% av tiden CPU-scheduling Idle-tråd och fem Processer OS Idle Proc 1 Proc 2 Proc 3 Proc 4 Proc 5 Round Robin time-slice Proc 1 får cirka 20% av tiden 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
CPU-scheduling endast Idle-tråd som yieldar OS Idle gör yield Robin Hood time-slice Idle får cirka 100% av tiden (bränner/slösar) 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Med time-slice 10 millisekunder Hur många instruktioner? Antag 1 GHz processor Antag 1 instruktion per CPU-cykel 1 000 000 000 instruktioner per sekund 1 000 000 instruktioner per millisekund 10 000 000 instruktioner per time slice 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Windows OS ctrl-alt-del öppnar Windows Task Manager Klicka på Processes och studera längst ner: ... System Idle Process SYSTEM många % 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
oslab_thread_info_array idle and 5 threads upptagen Idle 0 Idle-thread sp1 1 First created thread sp2 2 Second created thread ... oslab_currently_running_thread sp3 3 sp4 4 sp5 5 oslab_current_thread_count = 6 oslab_next_available_thread_id = 6 MAX_THREADS = 17 oslab_thread_info_array[16] ledig 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
oslab_thread_info_array create next thread #6 Idle 0 Idle-thread sp1 1 sp2 2 sp3 3 sp4 4 sp5 5 sp6 6 oslab_current_thread_count = 7 oslab_next_available_thread_id = 7 oslab_thread_info_array[16] 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
oslab_thread_info_array exit thread, #2 and #5 Idle 0 Idle-thread sp1 1 sp3 3 sp4 4 sp6 6 oslab_current_thread_count = 5 oslab_next_available_thread_id = 7 oslab_thread_info_array[16] 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
oslab_thread_info_array create next thread #7 Idle 0 Idle-thread sp1 1 sp3 3 sp4 4 sp6 6 sp7 7 oslab_current_thread_count (6) oslab_next_available_thread_id = 8 oslab_thread_info_array[16] 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
CPU-scheduling Exempelsamling uppgift 9.x OS Idle P1 P2 P3 C1 C2 Round Robin time-slice 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)
Hemlab 3 (OS-labben) yield i Consumer och i wait() Idle Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 Round Robin time-slice Första varvet varv 3 och senare 6 April 2017 IS1200 Datorteknik hemlab 3