Presentation laddar. Vänta.

Presentation laddar. Vänta.

23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)1 IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till.

Liknande presentationer


En presentation över ämnet: "23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)1 IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till."— Presentationens avskrift:

1 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)1 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.

2 23 August 2014 IS1200 Datorteknik vt2009 föreläsning 6, (E och I m.fl.)2 F1F2F3F5F7F8F9F10Ö2Ö1Ö3LAB-1Hemlab-1Ö4Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling IS1200 Datorteknik Våren 2009 Period 3 F6Ö5Ö6LAB-2 Våren 2009 Period 4 F4

3 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)3 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling (förberedelse till hemlab 3)

4 23 August 2014 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

5 23 August 2014 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 time-slice time-out context switches...

6 23 August 2014 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

7 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)7 Sid 7 utgår

8 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)8 Program-Kod för context switch 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

9 23 August 2014 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

10 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)10 Nios-II Process Control Block - PCB Thread Control Block - TCB r1—r23 r26 (gp) r28 (fp) sp r31 #returadress r29 (ea) 27 register 108 bytes

11 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)11 Nios-II Process Control Block - PCB Thread Control Block - TCB r1—r23 r26 (gp) r28 (fp) sp r31 #returadress r29 (ea) programkod ret ”Object”: inparam r4

12 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)12 Ready Queue Current Thread and PCB:s TCB2 Process Control Block TCB4 Process Control Block TCB5 Process Control Block TCB0 Process Control Block Ready Queue innehåller (stack-) pekare till PCB:er sp1 1 Idle 0 sp2 2 sp3 3 sp4 4 sp5 5 running_thread TCB1 Process Control Block

13 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)13 oslab_thread_info_array before idle runs oslab_thread_info_array[0] 0 ledig upptagen oslab_currently_running_thread oslab_current_thread_count = 1 oslab_next_available_thread_id = 1 MAX_THREADS = 17 oslab_thread_info_array[16] Idle-thread

14 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)14 oslab_thread_info_array idle and 5 threads sp1 1 ? sp2 2 sp3 3 sp4 4 sp5 5 ledig upptagen First created thread Second created thread... oslab_currently_running_thread oslab_current_thread_count = 6 oslab_next_available_thread_id = 6 MAX_THREADS = 17 oslab_thread_info_array[16] Idle-thread

15 23 August 2014 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!) )

16 23 August 2014 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 time-slice time-out exit time-out Round Robin Tråd 2 borta ur RQ !

17 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)17 OS Tråd 1 Tråd 2 Tråd 3 Tråd 4 time-slice time-out Round Robin CPU-scheduling Create (System Call) create Tråd 4 tillkom i RQ ! time-out

18 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)18 OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out Sound Robin CPU-scheduling Yield (System Call) yield < time-slice Tråd 2 vilar i RQ !

19 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)19 Program-Kod för context switch (repris) contextswitch: 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

20 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)20 Kod för context switch mer liknande lab-PM contextswitch: 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

21 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)21 Nios-II (repris) Process Control Block - PCB Thread Control Block - TCB r1—r23 r26 (gp) r28 (fp) sp r31 #returadress r29 (ea)

22 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)22 Nios-II: Macro för att pusha register på stacken.macroTCBSAVE#r29, r1-r23, r26, r28, r31 pushr31# returadress pushr28# fp pushr26# gp pushr23... pushr2 pushr1 pushr29# ea.endm

23 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)23 Nios-II: Macro för att poppa register på stacken.macroTCBUNSAVE#r29, r1-r23, r26, r28 popr29# ea popr1 popr2... popr23 popr26# gp popr28# fp popr31# returadress.endm

24 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)24 Nios-II: Macro för att lagra register till stacken.macroTCBSAVE # r1-r23, r26, r28 subisp, sp, 27*4# 27 platser stwea, 4*0(sp)# r29 = ea stwr1, 4*1(sp) stwr2, 4*2(sp)... stw r23, 4*23(sp) stwr26, 4*24 (sp)# r24 = gp stwr28, 4*25 (sp)# r26 = fp stwr31, 4*26 (sp)# r31 = ra.endm

25 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)25 Nios-II: Macro för att ladda register från stacken.macroTCBUNSAVE #r1-r23, r26, r28 ldwr1, 4*1(sp) ldwr2, 4*2(sp)... ldw r23, 4*23(sp) ldwr26, 4*24(sp) ldwr28, 4*25(sp) ldwr31, 4*26(sp) ldwea, 4*0(sp)# r29 = ea addisp, sp, 27*4# 27 platser.endm

26 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)26 Exceptions in Nios-II Suggested software structure trap 0x800020:”jmp ExcHand” Int ?Trap ? ExcHand: ElseHand Yes No NoInt: IRQ00IRQ10 IRQ31 error IntHand: No irq00Hand Yes irq10Hand Yes irq31Hand Yes subi r29, r29, 4 eret No trap0 trap1 trapn error TrapHand: No trap0Hand Yes trap1Hand Yes trapnHand Yes eret No instr int No

27 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)27 Exceptions in Nios-II Suggested software structure trap 0x800020:”jmp ExcHand” Int ?Trap ? ExcHand: ElseHand Yes No NoInt: IRQ10 error IntHand: Yes subi r29, r29, 4 TrapHand: instr int No TimerIntHand: Context Switch 100? Yes eret No

28 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)28 PAUS-RUTA  Snart kommer nästa portion

29 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)29 2G1518 Datorteknik Föreläsning 9 2. Semaforer (förberedelse till hemlab 3)

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

31 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)31 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

32 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)32 Semafor korgbollsanalogi KORG BOLL

33 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)33 Semafor korgbollsanalogi KORG BOLL SIGNAL är ungefär: Lägg en till boll i korgen (och fortsätt sedan…)

34 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)34 Semafor korgbollsanalogi KORG BOLL 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 …)

35 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)35 Dijkstra  Signal - Verhogen; V(sem)  Wait - Proberen; P(sem)

36 23 August 2014 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)

37 23 August 2014 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: … T1: T2:

38 23 August 2014 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: … T1: T2:

39 23 August 2014 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: … T1: T2:

40 23 August 2014 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: … T1: T2:

41 23 August 2014 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: … T1: T2:

42 23 August 2014 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: … T1: T2:

43 23 August 2014 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: … T1: T2:

44 23 August 2014 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: … T1: T2:

45 23 August 2014 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: … T1: T2:

46 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)46 Ömsesidig uteslutning: P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 och P2 får inte exekveras ”samtidigt”

47 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)47 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

48 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)48 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

49 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)49 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

50 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)50 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

51 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)51 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

52 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)52 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

53 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)53 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

54 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)54 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

55 23 August 2014 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 T1: T2:

56 23 August 2014 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

57 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)57 Producer init:tal := start ploop:räkna ut nästa primtal, tal anropa PUT-FIFO (tal) br ploop

58 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)58 Producer ”NiosII-kod” / makron prod:moviar4, start ploop:callNextPrime# subrutin PUTFIFO# macro # yield()??? brploop

59 23 August 2014 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 ? }

60 23 August 2014 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) brcloop

61 23 August 2014 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 ? }

62 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)62 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 !

63 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)63 FIFO Queue, Data Structure (jfr med RQ!) wraddr: rdaddr: FifoEnd: Fifo: ledig upptagen

64 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)64 FIFO Queue, Data Structure #defineFifo_Size16 intFifo[Fifo_Size] ; intwraddr = 0 ; intrdaddr = 0 ;

65 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)65 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;

66 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)66 anrop … wait … wait … wrfifo … signal … signal … retur PUT-FIFO nrempty wrmut nrfull

67 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)67 ”Nios-kod” för PUTFIFO (bara en massa macron) PUTFIFO:WAITnrempty WAITwrmut callwrfifo SIGNALwrmut SIGNALnrfull RETURN

68 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)68 Nios-II-kod Macro för System Call.macroSysCallindex moviar4, \index trap.endm

69 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)69 Nios-II-kod Macro för Signal och Wait.macroSIGNALsem moviar5, \sem SysCall6# trap med 6 i r4.endm.macroWAITsem moviar5, \sem SysCall7# trap med 7 i r4.endm

70 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)70 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 !

71 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)71 GET-FIFO nrempty rdmut nrfull retur … signal … signal … rdfifo … wait … wait … anrop

72 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)72 Nios-kod för GETFIFO (bara en massa macron) GETFIFO:WAITnrfull WAITrdmut callrdfifo SIGNALrdmut SIGNALnrempty RETURN

73 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)73 CPU-scheduling OS Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 time-slice

74 23 August 2014 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 ?)

75 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)75 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 ...

76 23 August 2014 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:ldwr24, 0(r5)# hämta värde addir24, r24, 1# lägg till en boll stwr24, 0(r5)# skriv värde #EI# NEJ ! eret# medför även EI

77 23 August 2014 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() ; }

78 23 August 2014 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: ldwr24, 0(r5)# läs nytt semaforvärde bgtr24, r0, ball# hopp om minst en boll noball:PUSHCTL 1# skydda estatus PUSHr29# skydda ea EI# släpp in TimerInt, OBS OBS ! # YIELD# om så önskas med SysCall 8 DI# hindra TimerInt POPr29# återställ ea POPCTL 1# återställ estatus brtrap7# och leta boll igen ball:subir24, r24, 1# ta en boll stwr24, 0(r5)# semaforvärde skrivs tillbaks eret# medför även EI

79 23 August 2014 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() ; }

80 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)80 Program-Kod för context switch (uppdaterad repris) contextswitch: 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

81 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)81 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 !

82 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)82 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: pushr29 brcontextswitch

83 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)83 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 !

84 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)84 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: brexit

85 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)85 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)

86 23 August 2014 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

87 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)87 OS Idle (gör inte yield) Prod 1 time-slice Round Robin CPU-scheduling Idle-tråd och en Producer Idle tar cirka 50% av tiden Prod 1 får cirka 50% av tiden

88 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)88 OS Idle (Idle gör yield) Prod 1 time-slice Round Robin CPU-scheduling Idle-tråd och en Producer Idle tar cirka 0% av tiden Prod 1 får nästan 100% av tiden

89 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)89 OS Idle (Idle gör yield) Proc 1 Proc 2 Proc 3 time-slice Round Robin CPU-scheduling Idle-tråd och tre Processer Proc 1 får cirka 33% av tiden

90 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)90 OS Idle Proc 1 Proc 2 Proc 3 Proc 4 Proc 5 time-slice Round Robin CPU-scheduling Idle-tråd och fem Processer Proc 1 får cirka 20% av tiden

91 23 August 2014 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 time-slice Robin Hood Idle får cirka 100% av tiden (bränner/slösar)

92 23 August 2014 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

93 23 August 2014 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 %

94 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)94 oslab_thread_info_array idle and 5 threads sp1 1 Idle 0 sp2 2 sp3 3 sp4 4 sp5 5 ledig upptagen First created thread Second created thread... oslab_currently_running_thread oslab_current_thread_count = 6 oslab_next_available_thread_id = 6 MAX_THREADS = 17 oslab_thread_info_array[16] Idle-thread R

95 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)95 oslab_thread_info_array create next thread #6 oslab_thread_info_array[0] sp1 1 Idle 0 sp2 2 sp3 3 sp4 4 sp5 5 oslab_current_thread_count = 7 oslab_next_available_thread_id = 7 oslab_thread_info_array[16] Idle-thread sp6 6

96 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)96 oslab_thread_info_array exit thread, #2 and #5 oslab_thread_info_array[0] sp1 1 Idle 0 sp3 3 sp4 4 sp6 6 oslab_thread_info_array[16] oslab_next_available_thread_id = 7 oslab_current_thread_count = 5 Idle-thread

97 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)97 oslab_thread_info_array create next thread #7 oslab_thread_info_array[0] sp1 1 Idle 0 sp3 3 sp4 4 sp6 6 Idle-thread oslab_thread_info_array[16] sp7 7 oslab_current_thread_count (6) oslab_next_available_thread_id = 8

98 23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)98 OS Idle P1 P2 P3 C1 C2 Round Robin CPU-scheduling Exempelsamling uppgift 9.x time-slice

99 23 August 2014IS1200 Datorteknik hemlab 399 OS Idle Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 time-slice Round Robin Hemlab 3 (OS-labben) yield i Consumer och i wait() Första varvetvarv 3 och senare


Ladda ner ppt "23 August 2014 IS1200 Datorteknik vt09, föreläsning 9, (E och I mfl)1 IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till."

Liknande presentationer


Google-annonser