Presentation laddar. Vänta.

Presentation laddar. Vänta.

IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer

Liknande presentationer


En presentation över ämnet: "IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer"— Presentationens avskrift:

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

2 IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200
6 apr -17 IS1200 Datorteknik 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.)

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

4 Realtidskärna Viktiga begrepp (en del)
Kursboken kap 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)

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

6 Å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)

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

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

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

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

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

12 Ready Queue Current Thread and PCB:s
Idle TCB0 Process Control Block sp sp running_thread sp TCB4 Process Control Block sp sp 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)

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

14 oslab_thread_info_array idle and 5 threads
upptagen ? Idle-thread sp First created thread sp Second created thread ... oslab_currently_running_thread sp sp sp 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)

15 Realtidskärna Viktiga begrepp (igen)
Time-Slice # 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)

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

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

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

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

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

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

22 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 r push r2 push r1 push r29 # ea .endm 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)

23 Nios-II: Macro för att poppa register på stacken
.macro TCBUNSAVE #r29, r1-r23, r26, r28 pop r29 # ea pop r1 pop r 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)

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

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

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

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

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

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

30 Samverkande processer
Användning av semaforer vid Synkronisering Ömsesidig uteslutning 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)

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

32 Semafor korgbollsanalogi
6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

67 ”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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

92 Med time-slice 10 millisekunder Hur många instruktioner?
Antag 1 GHz processor Antag 1 instruktion per CPU-cykel instruktioner per sekund instruktioner per millisekund instruktioner per time slice 6 April 2017 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)

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

94 oslab_thread_info_array idle and 5 threads
upptagen Idle Idle-thread sp First created thread sp Second created thread ... oslab_currently_running_thread sp sp sp 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)

95 oslab_thread_info_array create next thread #6
Idle Idle-thread sp sp sp sp sp sp 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)

96 oslab_thread_info_array exit thread, #2 and #5
Idle Idle-thread sp sp sp sp 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)

97 oslab_thread_info_array create next thread #7
Idle Idle-thread sp sp sp sp sp 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)

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

99 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


Ladda ner ppt "IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer"

Liknande presentationer


Google-annonser