Presentation laddar. Vänta.

Presentation laddar. Vänta.

4 June 2015 2G1518, Föreläsning 9, vt07 (IT/ME/2IT)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version.

Liknande presentationer


En presentation över ämnet: "4 June 2015 2G1518, Föreläsning 9, vt07 (IT/ME/2IT)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version."— Presentationens avskrift:

1 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version vt07 för IT/ME och 2IT

2 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)2 F1F2F3F4F5F6F7F8F9F10Ö2Ö1Ö3Ö4Ö5LAB-1LAB-2Hemlab-1Ö6Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik

3 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)3 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling (förberedelse till hemlab 3)

4 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)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 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)5 CPU-scheduling Round Robin OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out time-ut time-out context switches...

6 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)6 Åtgärder vid Context Switch  Save PCB: Spara undan viktig information, dvs allt som behövs för att kunna fortsätta exekvering vid senare tidpunkt. (PCB – Process 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 PCB: Kopiera in dess PCB till processorn  Return: Starta/fortsätt exekvering av den nyhämtade processen/tråden

7 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)7 Program-Kod för context switch Hit kommer man vid interrupt från Timern # Denna kod exekveras med PIE=0, avbrott avstängda timerint: subiR29, r29, 4# justera återhoppsadress / ea pushr29# skydda returadress/ea på stacken …# kvittera timern med mera ”cmpcond r24, ri, rj”# har det gått en time-slice bner24, r0,contextswitch# så gör contextswitch # annars... cswret:popr29# återställ returadress/ea eret# tillbaks till samma tråd/process

8 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)8 Program-Kod för context switch (forts.) contextswitch: pushr31# skydda returadress i r31/ra call PCBSAVE# spara PCB 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 call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31/ra... cswret:popr29# återställ returadress/ea eret# tillbaks till utvald tråd/process

9 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)9 Nios-II Process Control Block - PCB Thread Control Block - TCB r1—r26 r28, r30 ctrl2 # bstatus sp r29 #returadress r31 #returadress ctrl3 # ienable ctrl1 # estatus

10 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)10 Realtidskärna Viktiga begrepp (igen)  Time-Slice# millisekunder  PCB 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  PCB 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!) )

11 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)11 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 !

12 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)12 OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out Round Robin CPU-scheduling Create (System Call) create Tråd 2 tillkom i RQ !

13 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)13 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 !

14 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)14 Ready Queue Current Thread and PCB:s PCB2 Process Control Block PCB4 Process Control Block PCB6 Process Control Block PCB1 Process Control Block Ready Queue Ready Queue innehåller (stack-) pekare till PCB:er Current Thread (5)

15 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)15 Ready Queue PCB Save PCB2 Process Control Block PCB4 Process Control Block PCB1 Process Control Block Ready Queue Current Thread (5) sp PCB5 Process Control Block PCB6 Process Control Block

16 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)16 Ready Queue RQ Put PCB2 Process Control Block PCB4 Process Control Block PCB1 Process Control Block Ready Queue Current Thread (5) PCB5 Process Control Block PCB6 Process Control Block

17 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)17 Ready Queue Select new Process/Thread PCB2 Process Control Block PCB4 Process Control Block PCB1 Process Control Block Ready Queue PCB5 Process Control Block PCB6 Process Control Block Current Thread (2)

18 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)18 Ready Queue RQ Get PCB2 Process Control Block PCB4 Process Control Block PCB6 Process Control Block PCB1 Process Control Block Ready Queue PCB5 Process Control Block Current Thread (2) sp

19 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)19 Ready Queue, Data Structure Circular Buffer, FIFO wraddr: rdaddr: rqend: queue: ledig upptagen Utanför queue

20 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)20 Ready Queue, Data Structure.equMAX_THREADS, 16.data.align2# 2 2 wraddr:.wordqueue# *skrivadress rdaddr:.wordqueue# *läsadress queue:.fillMAX_THREADS, 4, 0 rqend:.word# slutmärke

21 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)21 Ready Queue, Data Structure Circular Buffer, FIFO wraddr: rdaddr: rqend: queue: ledig upptagen Utanför queue

22 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)22 Nios-II: Subrutinen rqinit rqinit:moviar8, queue moviar9, wraddr moviar10, rdaddr str8, 0(r9) str8, 0(r10) ret

23 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)23 Nios-II: Subrutinen RQPUT RQPUT:moviar8, wraddr ldwr9, 0(r8) stwr4, 0(r9)# skriv från r4 addir9, r9, 4# öka wraddr moviar10, rqend bner9, r10, putend moviar9, queue putend:stwr9, 0(r8) ret #OBS ingen kontroll om kön är full

24 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)24 Nios-II: Subrutinen RQGET RQGET:moviar8, rdaddr ldwr9, 0(r8) ldwr2, 0(r9)# skriv från r4 addir9, r9, 4# öka wraddr moviar10, rqend bner9, r10, getend moviar9, queue getend:stwr9, 0(r8) ret #OBS ingen kontroll om kön är tom

25 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)25 Program-Kod för context switch (repris) contextswitch: pushr31# skydda returadress i r31/ra call PCBSAVE# spara PCB 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 call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31/ra... cswret:popr29# återställ returadress/ea eret# tillbaks till utvald tråd/process(

26 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)26 Kod för context switch mer liknande boken sid 201 contextswitch: pushr31# skydda returadress i r31 call PCBSAVE# spara PCB på lokal stack move r4, sp# kopiera sp till r4 call ITS_scheduler# RQPUT och RQGET i C-kod move sp, r2# kopiera r2 till sp call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31 cswret:popr29# återställ returadress/ea eret# tillbaks till utvald tråd/process

27 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)27 Nios-II (repris) Process Control Block - PCB Thread Control Block - TCB r1—r26 r28, r30 ctrl2 # bstatus sp r29 #returadress r31 #returadress ctrl3 # ienable ctrl1 # estatus

28 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)28 Nios-subrutin spara PCB å stacken PCBSAVE: PUSHALL# alla utom r0, r27, r29 och r31 PUSHCTL 3# pusha ienable PUSHCTL 2# pusha bstatus PUSHCTL 1# pusha estatus ret# jmp r31 PCBUNSAVE: POPCTL 1# poppa estatus POPCTL 2# poppa bstatus POPCTL 3# poppa ienable POPALL# alla utom r0, r27, r29 och r31 ret# jmp r31

29 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)29 Nios-II: Macro för controlreg   stacken # att ändra innehåll i r24/et är OK.macroPUSHCTLnum rdctlr24, ctl\num pushr24.endm # att ändra innehåll i r24/et är OK.macroPOPCTLnum popr24 wrctlr24, ctl\num.endm

30 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)30 Nios-II: Macro för att pusha register på stacken.macroPUSHALL #except r0, r27, r29, r31 pushr1 pushr2... pushr25 pushr26 pushr28 pushr30.endm

31 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)31 Nios-II: Macro för att poppa register på stacken.macroPOPALL #except r0, r27, r29, r31 popr30 popr28 popr26 popr25... popr2 popr1.endm

32 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)32 Nios-II: Macro för att lagra register till stacken.macroSTWALL #except r0, r27, r29, r31 subisp, sp, 32*4# 32 platser stwr1, 4*1(sp) stwr2, 4*2(sp)... stw r25, 4*25(sp) stwr26, 4*26(sp) stwr28, 4*28(sp) stwr30, 4*30(sp).endm

33 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)33 Nios-II: Macro för att ladda register från stacken.macroLDWALL #except r0, r27, r29, r31 ldwr1, 4*1(sp) ldwr2, 4*2(sp)... ldw r25, 4*25(sp) ldwr26, 4*26(sp) ldwr28, 4*28(sp) ldwr30, 4*30(sp) addisp, sp, 32*4# 32 platser.endm

34 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)34 Nios-II, Statusregister 0 och 1 status och estatus U PIE PIE = Processor Interrupt Enable (1=enable, 0=disable) U = User Mode (1=User Mode, 0=Supervisor Mode EU EPIE EPIE = Processor Interrupt Enable (1=enable, 0=disable) EU = User Mode (1=User Mode, 0=Supervisor Mode ctl0 - status ctl1 - estatus

35 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)35 Nios-II Statusregister 3 ienable, ctl3  För var och en av de 32 IRQ-signalerna finns en maskbit vars  värde 0 förbjuder avbrott (disable)  värde 1 tillåter avbrott (enable)

36 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)36 PAUS-RUTA  Snart kommer nästa portion

37 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)37 2G1518 Datorteknik Föreläsning 9 2. Semaforer (förberedelse till hemlab 3)

38 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)38 Samverkande processer Användning av semaforer vid  Synkronisering  Ömsesidig uteslutning

39 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)39 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

40 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)40 Semafor korgbollsanalogi KORG BOLL

41 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)41 Semafor korgbollsanalogi KORG BOLL SIGNAL är ungefär: Lägg en till boll i korgen (och fortsätt sedan…)

42 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)42 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 …)

43 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)43 Dijkstra  Signal - Verhogen; V(sem)  Wait - Proberen; P(sem)

44 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)44 Samverkan mellan processer med hjälp av semaforer  Synkronisering  Ömsesidig uteslutning (Mutual Exclusion)  Rendez Vous (dubbel synkronisering)

45 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)45 Synkronisering: P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

46 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)46 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

47 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)47 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

48 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)48 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

49 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)49 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

50 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)50 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

51 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)51 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

52 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)52 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

53 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)53 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

54 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)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 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)55 Ö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”

56 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)56 Ö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”

57 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)57 Ö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”

58 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)58 Ö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”

59 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)59 Ö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”

60 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)60 Ö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”

61 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)61 Ö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”

62 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)62 Ö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”

63 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)63 Rendez Vous T1 och T2 inväntar varandra innan S1 och S2 exekverar … P1: … signal wait S1 … P2: … signal wait S2 T1: T2:

64 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)64 Testprogram (hem-laboration 3)  Producers, p stycken, producerar primtal  Consumers, c stycken, konsumerar primtal  FIFO (buffert) med x platser för primtal

65 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)65 Producer init:tal := start ploop:räkna ut nästa primtal, tal anropa PUT-FIFO (tal) br ploop

66 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)66 Producer ”NiosII-kod” / makron prod:moviar4, start ploop:callNextPrime# subrutin PUTFIFO# macro brploop

67 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)67 Consumer init:vid behov ? cloop:anropa GET-FIFO (tal) konsumera primtalet (skrivut tal) brcloop

68 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)68 Consumer ”Nios-kod” / makron cons:nop cloop:GETFIFO# macro callPrintPrime# subrutin brcloop

69 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)69 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 !

70 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)70 FIFO Queue, Data Structure (jfr med RQ!) wraddr: rdaddr: fifoend: fifo: ledig upptagen

71 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)71 FIFO Queue, Data Structure.equnrfifo, 16.data.align4 wraddr:.wordfifo rdaddr:.wordfifo fifo:.fillnrfifo, 4, 0 fifoend:.word

72 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)72 Nios-II: Subrutinen fifoinit fifoinit:moviar8, fifo moviar9, wraddr moviar10, rdaddr str8, 0(r9) str8, 0(r10) ret

73 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)73 Nios-II: Subrutinen wrfifo wrfifo:moviar8, wraddr ldwr9, 0(r8) stwr4, 0(r9)# skriv från r4 addir9, r9, 4# öka wraddr moviar10, fifoend bner9, r10, wrend moviar9, fifo wrend:stwr9, 0(r8) ret #OBS ingen kontroll om kön är full

74 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)74 Nios-II: Subrutinen rdfifo rdfifo:moviar8, rdaddr ldwr9, 0(r8) ldwr2, 0(r9)# skriv från r4 addir9, r9, 4# öka wraddr moviar10, fifoend bner9, r10, rdend moviar9, fifo rdend:stwr9, 0(r8) ret #OBS ingen kontroll om kön är tom

75 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)75 anrop … wait … wait … wrfifo … signal … signal … retur PUT-FIFO nrempty wrmut nrfull

76 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)76 ”Nios-kod” för PUTFIFO (bara en massa macron) PUTFIFO:WAITnrempty WAITwrmut callwrfifo SIGNALwrmut SIGNALnrfull RETURN

77 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)77 Nios-II-kod Macro för System Call.macroSysCallindex moviar4, \index trap.endm

78 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)78 Nios-II-kod Macro för Wait och Signal.macroSIGNALsem moviar5, \sem SysCall6# trap med 6 i r4.endm.macroWAITsem moviar5, \sem SysCall7# trap med 7 i r4.endm

79 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)79 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 !

80 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)80 GET-FIFO nrempty rdmut nrfull retur … signal … signal … rdfifo … wait … wait … anrop

81 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)81 Nios-kod för GETFIFO (bara en massa macron) GETFIFO:WAITnrfull WAITrdmut callrdfifo SIGNALrdmut SIGNALnrempty RETURN

82 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)82 CPU-scheduling OS Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 time-slice

83 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)83 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 ?)

84 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)84 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 ...

85 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)85 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

86 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)86 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

87 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)87 Program-Kod för context switch (uppdaterad repris) contextswitch: pushr31# skydda returadress i r31/ra call PCBSAVE# spara PCB 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 call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31/ra... cswret:popr29# återställ returadress/ea eret# tillbaks till utvald tråd/process

88 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)88 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 !

89 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)89 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

90 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)90 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 !

91 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)91 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

92 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)92 Hem-laboration 3 ingår i kursen våren 2006  Material ingår i tentamen (se extentor)  Lab-PM finns på hemsidan  Labben körs på MIPS-simulatorn !  Labben ska redovisas muntligt  Ensam eller i grupp om 2 (ev 2 grupper)

93 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)93 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

94 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)94 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

95 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)95 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

96 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)96 OS 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

97 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)97 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

98 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)98 CPU-scheduling endast Idle-tråd OS Idle time-slice Round Robin Idle får cirka 100% av tiden

99 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)99 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

100 4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)100 Windows OS ctrl-alt-del öppnar Windows Task Manager Klicka på Processes och studera längst ner:... System Idle Process SYSTEM många%


Ladda ner ppt "4 June 2015 2G1518, Föreläsning 9, vt07 (IT/ME/2IT)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version."

Liknande presentationer


Google-annonser