Presentation laddar. Vänta.

Presentation laddar. Vänta.

20 June 2015 2G1502, Föreläsning 8 vt2004, för IT1 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling 2. Semaforer (förberedelse till lab 5)

Liknande presentationer


En presentation över ämnet: "20 June 2015 2G1502, Föreläsning 8 vt2004, för IT1 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling 2. Semaforer (förberedelse till lab 5)"— Presentationens avskrift:

1 20 June G1502, Föreläsning 8 vt2004, för IT1 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling 2. Semaforer (förberedelse till lab 5)

2 20 June G1502, Föreläsning 8 vt2004, för IT2 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling (förberedelse till lab 5)

3 20 June G1502, Föreläsning 8 vt2004, för IT3 Realtidskärna Viktiga begrepp (en del) zKursboken kap zCPU - scheduling zTime Slice zTimer Interrupt zContext Switch (process/thread switch) zProcess Control Block / Thread Control Block zReady Queue zRound Robin

4 20 June G1502, Föreläsning 8 vt2004, för IT4 CPU-scheduling Round Robin OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out time-ut time-out context switches...

5 20 June G1502, Föreläsning 8 vt2004, för IT5 Makro-Kod för context switch Hit kommer man efter timerint-exc. om man ska göra Context Switch ( Timern har givits kvittens med mera …) zDenna makro-kod exekveras med IE=0 SAVEPCB;spara PCB på lokal stack move %o0, %sp;kopiera %sp till %o0 PUTRQ;skriv %sp i Ready Queue GETRQ ;läs %sp från Ready Queue move %sp, %o0;kopiera %o0 till %sp UNSAVEPCB ;kopiera PCB till processorn tret%07 ;gör ”returhoppet”

6 20 June G1502, Föreläsning 8 vt2004, för IT6 Nios (nytt) Process Control Block - PCB Thread Control Block - TCB 8 times %gi8 times %oi8 times %Li8 times %ii ctrl1 ;ISTATUS Probably multiples %sp %o7 ;returadress

7 20 June G1502, Föreläsning 8 vt2004, för IT7 Realtidskärna Viktiga begrepp (igen) zTime-Slice; millisekunder zSave PCB;spara undan Process Control Block zPUTRQ;pekare till thread läggs i Ready Queue zGETRQ;pekare till thread tas ur Ready Queue zUnsave PCB;återställ Process Control Block zExit;avsluta en Thread zCreateThread (Addr, SP, PRIO) ;initiera ett Process Control Block zYield;släpp resten av en Time-Slice’ z(Sleep;”sov en stund” (inte nu!) )

8 20 June G1502, Föreläsning 8 vt2004, för IT8 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 !

9 20 June G1502, Föreläsning 8 vt2004, för IT9 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 !

10 20 June G1502, Föreläsning 8 vt2004, för IT10 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 !

11 20 June G1502, Föreläsning 8 vt2004, för IT11 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)

12 20 June G1502, Föreläsning 8 vt2004, för IT12 Ready Queue Put Thread 5 into RQ 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

13 20 June G1502, Föreläsning 8 vt2004, för IT13 Ready Queue Put Thread 5 into RQ 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

14 20 June G1502, Föreläsning 8 vt2004, för IT14 Ready Queue Select Thread 2 in RQ 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)

15 20 June G1502, Föreläsning 8 vt2004, för IT15 Ready Queue Get Thread 2 from RQ 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

16 20 June G1502, Föreläsning 8 vt2004, för IT16 Ready Queue, Data Structure Circular Buffer, FIFO WRADDR: RDADDR: RQEND: QUEUE: ledig upptagen Utanför stacken bara för att kunna initera SP

17 20 June G1502, Föreläsning 8 vt2004, för IT17 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

18 20 June G1502, Föreläsning 8 vt2004, för IT18 Nios: Subrutinen rqinit rqinit:movia%L0, queue movia%L1, wraddr movia%L2, rdaddr st[%L1], %L0 st[%L2], %L0 lret

19 20 June G1502, Föreläsning 8 vt2004, för IT19 Ready Queue Macros Nios-assembler.macroPUTRQ;skriv %o0 till RQ bsrrqput;varning för %o7 nop.endm.macroGETRQ;läs %o0 från RQ bsrrqget;varning för %o7 nop.endm

20 20 June G1502, Föreläsning 8 vt2004, för IT20 Nios: Subrutinen rqput rqput:save%sp, 0 movia%L0, wraddr ld%L1, [%L0] st[%L1], %i0;skriv från %i0 addip%L1, 0x4;öka wraddr movia%L2, rqend cmp%L1, %L2;kolla om rqend ifscc_ne brputend nop movia%L1, queue putend:st[%L0], %L1 ret restore

21 20 June G1502, Föreläsning 8 vt2004, för IT21 Nios: Subrutinen rqget rqget:save%sp, 0 movia%L0, rdaddr;hämta addr ld%L1, [%L0];hämta pekare ld%i0, [%L1];läs till %i0 addip%L1, 0x4;öka rdaddr movia%L3, queue movia%L2, rqend cmp%L1, %L2; ifscc_eq;om ”rdaddr” = rqend mov%L1, %L3;så ”rdaddr”:=queue getend:st[%L0], %L1 ret restore

22 20 June G1502, Föreläsning 8 vt2004, för IT22 Makro-Kod för context switch Hit kommer man efter timerint om man ska göra Context Switch ( Timern har givits kvittens med mera,,,) zDenna makro-kod exekveras med IE=0 … SAVEPCB;spara PCB på lokal stack move %o0, %sp;kopiera sp till %o0 PUTRQ;skriv %sp i Ready Queue GETRQ ;läs %sp från Ready Queue move %sp, %o0;kopiera %o0 till sp UNSAVEPCB ;kopiera PCB till processorn tret%07 ;gör ”returhoppet”

23 20 June G1502, Föreläsning 8 vt2004, för IT23 Kod för context switch mer liknande boken sid 201 zDenna Nios-kod exekveras med IE=0 … mov%sp, %fp;fixa till SP från FP SAVEPCB;spara PCB på lokal stack, Nios-kod mov%o0, %sp;%sp som parameter bsrITS_scheduler;PUTRQ och GETRQ i C-kod mov%sp, %o0 UNSAVEPCB;kopiera PCB till processorn, Nios-kod tret%07;gör ”återstart” av ”ny” tråd

24 20 June G1502, Föreläsning 8 vt2004, för IT24 Register Window Repetition zCWP = Current Window Pointer zSAVE ”öppna nytt fönster” medför minska CWP med 1 zRESTORE ”byt till gammalt fönster” medför öka CWP med 1

25 20 June G1502, Föreläsning 8 vt2004, för IT25 Table 20. Smallest Nios Register File Reg[.. Reg[24..31] Reg[16..23] Reg[8..15] Reg[ ] Reg[ ] Reg[ ] Reg[0..7] %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %o0..%o7 %L0..%L7 %i0..%i7%g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7%g0..%g7 SAVE RESTORE CWP = 0 CWP = 1 CWP = 5 CWP = 6 CWP = 4 CWP = 2

26 20 June G1502, Föreläsning 8 vt2004, för IT26 Nios Exceptions Control-regs, %ctl0-2 CWP IPRI IE CWP NCVZ CWP = Current Window Pointer IPRI = Interrupt PRIority IE = Interrupt Enable %ctl0/1 %ctl2 HI_LIMIT HI_LIMIT = Maximum value of CWP LO_LIMIT LO_LIMIT = Minimum value of CWP

27 20 June G1502, Föreläsning 8 vt2004, för IT27 Nios (nytt) Process Control Block - PCB Thread Control Block - TCB 8 times %gi8 times %ii8 times %Li8 times %oi ctrl1 ;ISTATUS Probably multiples %sp %o7 ;returadress

28 20 June G1502, Föreläsning 8 vt2004, för IT28 Nios-makro spara PCB å stacken.macroSAVEPCB ?moore;lägen fungerar ej i Nios-makron mov %o6, %i6;fixa till %sp om det inte redan gjorts push%o7;retur/startadress PUSHGREGS;8 global regs to stack PUSHIREGS;8 iutput regs to stack moore:mov%i6, %o6;ta med %sp restore;increment CWP PUSHLREGS;8 (new) Local regs to stack PUSHIREGS;8 (new) input regs to stack CMPCWPMAX;jämför CWP med HI_LIMIT ifscc_ne;om ej lika (CWP < HI_LIMIT) brmoore;så finns fler fönster nop PUSHCTL 1;control reg 1 to stack.endm

29 20 June G1502, Föreläsning 8 vt2004, för IT29 Nios-makro hämta PCB ur stacken.macroUNSAVEPCB ?muure;lägen fungerar ej i Nios-labben ! POPCTL1;control reg 1 from stack POPIREGS;8 input regs from stack muure:POPLREGS;8 (new) Local regs from stack save%sp,0 POPIREGS;8 (new) input regs from stack CMPCWPICWP;om CWP = ICWP (makro) ifscc_eq;är det klart brmuure;annars fortsätt nop POPGREGS;8 global regs from stack pop%o7;returadress till %o7.endm

30 20 June G1502, Föreläsning 8 vt2004, för IT30 Nios: Macro för att pusha controlreg å stacken ; förstör %L0.macroPUSHCTLnum pfx\num rdctl%L0 push%L0.endm

31 20 June G1502, Föreläsning 8 vt2004, för IT31 Nios: Macro för att pusha controlreg å stacken ; förstör ej %L0 (lyxversion, överkurs).macroPUSHCTLnum subi%sp, 4 PUSH%L0 addi%sp, 8 pfx\num rdctl%L0 push%L0 subi%sp, 4 POP%L0.endm

32 20 June G1502, Föreläsning 8 vt2004, för IT32 Nios: Macro för att popa controlreg ur stacken ; förstör %L0.macroPOPCTLnum pop%L0 pfx\num wrctl%L0.endm

33 20 June G1502, Föreläsning 8 vt2004, för IT33 Nios: Macro för att popa controlreg ur stacken ; förstör ej %L0 (lyxversion, överkurs).macroPOPCTLnum push%L0 addi%sp, 4 pop%L0 pfx\num wrctl%L0 nop subi%sp, 8 pop%L0 addi%sp, 4.endm

34 20 June G1502, Föreläsning 8 vt2004, för IT34 Nios: Macro för att pusha 8 global regs å stacken.macroPUSHGREGS push%g0 push%g1 push%g2 push%g3 push%g4 push%g5 push%g6 push%g7.endm

35 20 June G1502, Föreläsning 8 vt2004, för IT35 Nios: Macro för att pusha 8 local regs å stacken.macroPUSHLREGS push%L0 push%L1 push%L2 push%L3 push%L4 push%L5 push%L6 push%L7.endm

36 20 June G1502, Föreläsning 8 vt2004, för IT36 Nios: Macro för att pusha 8 output regs å stacken.macroPUSHOREGS push%o0 push%o1 push%o2 push%o3 push%o4 push%o5 ;push%o6;ska %sp pushas ? NEJ ! push%o7;return address !.endm

37 20 June G1502, Föreläsning 8 vt2004, för IT37 Nios: Macro för att pusha 8 input regs på stacken.macroPUSHIREGS push%i0 push%i1 push%i2 push%i3 push%i4 push%i5 push%i6;%fp push%i7;ev. old return address.endm

38 20 June G1502, Föreläsning 8 vt2004, för IT38 Nios: Macro för att popa 8 input regs ur stacken.macroPOPIREGS pop%i7;ev. old return address pop%i6;%fp pop%i5 pop%i4 pop%i3 pop%i2 pop%i1 pop%i0.endm

39 20 June G1502, Föreläsning 8 vt2004, för IT39 Nios: Macro för att popa 8 output regs ur stacken.macroPOPOREGS pop%o7;return address ;pop%o6;ska %sp poppas ? NEJ ! pop%o5 pop%o4 pop%o3 pop%o2 pop%o1 pop%o0.endm

40 20 June G1502, Föreläsning 8 vt2004, för IT40 Nios: Macro för att popa 8 Local regs ur stacken.macroPOPLREGS pop%L7 pop%L6 pop%L5 pop%L4 pop%L3 pop%L2 pop%L1 pop%L0.endm

41 20 June G1502, Föreläsning 8 vt2004, för IT41 Nios: Macro för att popa 8 global regs ur stacken.macroPOPGREGS pop%g7 pop%g6 pop%g5 pop%g4 pop%g3 pop%g2 pop%g1 pop%g0.endm

42 20 June G1502, Föreläsning 8 vt2004, för IT42 Nios Exceptions Control-regs, %ctl0-2 CWP IPRI IE CWP NCVZ CWP = Current Window Pointer IPRI = Interrupt PRIority IE = Interrupt Enable %ctl0/1 %ctl2 HI_LIMIT HI_LIMIT = Maximum value of CWP LO_LIMIT LO_LIMIT = Minimum value of CWP

43 20 June G1502, Föreläsning 8 vt2004, för IT43 Jämför CWP med HI_LIMIT (överkurs) ;returnerar flaggor från jämförelse mellan CWP och HI_LIMIT.macroCMPCWPMAX pfx0;onödig rdctl%g0;läs ctrl-0 lsri%g0, 4;och skifta fram CWP andip %g0, 0x1F;till 5 LSBits i %g0 pfx2 rdctl%g1;läs ctrl-2 lsri%g1, 5;och skifta fran HI_LIMIT andip %g1, 0x1F;till 5 LSBits i %g1 cmp%g0, %g1;jämför CWP med HI_LIMIT.endm

44 20 June G1502, Föreläsning 8 vt2004, för IT44 Jämför CWP med ICWP (överkurs) ;returnerar flaggor från jämförelse mellan CWP och ICWP.macroCMPCWPICWP pfx0;onödig ! rdctl%g0;läs STATUS / ctl-0 andip %g0, 0x1F0;maska fram CWP i %g0 pfx1 rdctl%g1;LÄS ISTATUS / ctl-1 andip %g1, 0x1F0;maska fram ICWP i %g1 cmp%g0, %g1;jämför CWP med ICWP.endm

45 20 June G1502, Föreläsning 8 vt2004, för IT45 initera ”tom” PCB å stacken.macroINITPCB PUSH%o7;skydda returadress subip%sp, 8*4;reservera plats för 8 global regs subip%sp, 8*4;reservera plats för 8 input regs subip%sp, 8*4;reservera plats för 8 Local regs subip%sp, 8*4;reservera plats för 7-8 output regs? PUSHCTL 1;push ISTATUS.endm

46 20 June G1502, Föreläsning 8 vt2004, för IT46 Create_Thread med en PCB å stacken.macroCreateThread Startaddress, Stackinit, Priority movia%sp, \Stackinit;initiera %o6=%sp mov%fp, %sp;med kopia i %i6=%fp SPL\Priority;Set Priority Level pfx0 rdctl%L0;kopiera CWP till %L0 pfx2 rdctl%L2;läs HI_LIMIT mm lsri%L2, 5;flytta till LSB andip%L2, 0x1F;maska fram bara HI_LIMIT lsli%L2, 4;skifta till rätt plats andip%L0, oxFE0F;nollställ CWP or%L0, %L2;kopiera in CWP i %L0 orip%L0, 0x8000;EI om det inte gjorts pfx1 wrctl%L0;och skriv vidare till ISTATUS nop movia%o7, på plats INITPCB;MACRO, ny variant.endm

47 20 June G1502, Föreläsning 8 vt2004, för IT47 2G1502 Datorteknik allmän kurs Föreläsning 8 2. Semaforer (förberedelse till lab 5)

48 20 June G1502, Föreläsning 8 vt2004, för IT48 Samverkande processer Användning av semaforer

49 20 June G1502, Föreläsning 8 vt2004, för IT49 Semafor, vad är det zEn heltalsvariabel (0, 1, 2, 3 … -1, -2 ??) zSpeciella egenskaper zOperationer (atomära - odelbara) zsignal (sem) ~ öka med 1 zwait (sem) ~ minska med 1 om det går (annars ”vänta” tills det går) zBinär semafor, kan anta värde 0 eller 1

50 20 June G1502, Föreläsning 8 vt2004, för IT50 Semafor korgbollsanalogi KORG BOLL

51 20 June G1502, Föreläsning 8 vt2004, för IT51 Semafor korgbollsanalogi KORG BOLL SIGNAL är ungefär: Lägg en till boll i korgen (och fortsätt sedan…)

52 20 June G1502, Föreläsning 8 vt2004, för IT52 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 …)

53 20 June G1502, Föreläsning 8 vt2004, för IT53 Dijkstra zSignal - Verhogen; V(sem) zWait - Proberen; P(sem)

54 20 June G1502, Föreläsning 8 vt2004, för IT54 Samverkan mellan processer med hjälp av semaforer zSynkronisering zÖmsesidig uteslutning (Mutual Exclusion) zRendez Vous

55 20 June G1502, Föreläsning 8 vt2004, för IT55 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

56 20 June G1502, Föreläsning 8 vt2004, för IT56 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

57 20 June G1502, Föreläsning 8 vt2004, för IT57 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

58 20 June G1502, Föreläsning 8 vt2004, för IT58 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

59 20 June G1502, Föreläsning 8 vt2004, för IT59 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

60 20 June G1502, Föreläsning 8 vt2004, för IT60 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

61 20 June G1502, Föreläsning 8 vt2004, för IT61 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

62 20 June G1502, Föreläsning 8 vt2004, för IT62 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

63 20 June G1502, Föreläsning 8 vt2004, för IT63 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

64 20 June G1502, Föreläsning 8 vt2004, för IT64 Ö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”

65 20 June G1502, Föreläsning 8 vt2004, för IT65 Ö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”

66 20 June G1502, Föreläsning 8 vt2004, för IT66 Ö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”

67 20 June G1502, Föreläsning 8 vt2004, för IT67 Ö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”

68 20 June G1502, Föreläsning 8 vt2004, för IT68 Ö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”

69 20 June G1502, Föreläsning 8 vt2004, för IT69 Ö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”

70 20 June G1502, Föreläsning 8 vt2004, för IT70 Ö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”

71 20 June G1502, Föreläsning 8 vt2004, för IT71 Ö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”

72 20 June G1502, Föreläsning 8 vt2004, för IT72 Ö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”

73 20 June G1502, Föreläsning 8 vt2004, för IT73 Rendez Vous T1 och T2 inväntar varann innan S1 och S2 exekverar … P1: … signal wait S1 … P2: … signal wait S2 T1: T2:

74 20 June G1502, Föreläsning 8 vt2004, för IT74 Testprogram (laboration 5) zProducers, p stycken, producerar primtal zConsumers, c stycken, konsumerar d:o zFIFO (buffert) med x platser för primtal

75 20 June G1502, Föreläsning 8 vt2004, för IT75 Producer Init:tal := start ploop:räkna ut nästa primtal, tal anropa PUT-FIFO (tal) bra ploop

76 20 June G1502, Föreläsning 8 vt2004, för IT76 Producer ”Nios-kod” / makron prod:movia%o0, start ploop:bsrNextPrime;subrutin nop PUTFIFO;macro brploop nop

77 20 June G1502, Föreläsning 8 vt2004, för IT77 Consumer Init: cloop:anropa GET-FIFO (tal) konsumera primtalet (skrivut tal) bracloop

78 20 June G1502, Föreläsning 8 vt2004, för IT78 Consumer ”Nios-kod” / makron cons:nop cloop:GETFIFO;macro bsrPrintPrime;subrutin nop brcloop nop

79 20 June G1502, Föreläsning 8 vt2004, för IT79 PUT-FIFO Skriv data till FIFO-buffert på ett säkert sätt zDet måste finnas ledig plats zSamtidig skrivning är kritisk Vad är det som är kritiskt ? Hantering av skrivpekaren wraddr

80 20 June G1502, Föreläsning 8 vt2004, för IT80 FIFO Queue, Data Structure (jfr med RQ!) WRFIFOA: RDFIFOA: fifoend: FIFO: ledig upptagen

81 20 June G1502, Föreläsning 8 vt2004, för IT81 FIFO Queue, Data Structure.equnrfifo, 16.data.align4 wrfifoa:.wordfifo rdfifoa:.wordfifo fifo:.fillnrfifo, 4, 0 fifoend:.word

82 20 June G1502, Föreläsning 8 vt2004, för IT82 FIFO Queue Macros.macroWRFIFO;macro bsrfifowr;subrutinanrop nop.endm.macroRDFIFO;macro bsrfiford;subrutinanrop nop.endm

83 20 June G1502, Föreläsning 8 vt2004, för IT83 Subrutinen fifowr fifowr:save%sp, 0 movia%L0, wrfifoa;hämta addr ld%L1, [%L0] ;hämta pekare st[%L1], %i0;skriv primtal addip%L1, 0x4;öka wraddr movia%L2, fifoend cmp%L1, %L2;kolla om fifoend ifscc_ne brfwrend nop movia%L1, fifo fwrend:st[%L0], %L1 ret restore

84 20 June G1502, Föreläsning 8 vt2004, för IT84 Subrutinen fiford fiford:save%sp, 0 movia%L0, rdfifoa;hämta addr ld%L1, [%L0];hämta pekare ld%i0, [%L1];hämta primtal addip%L1, 0x4;öka rdaddr movia%L2, fifoend cmp%L1, %L2;kolla om fifoend ifscc_ne brfrdend nop movia%L1, fifo frdend:st[%L0], %L1 ret restore

85 20 June G1502, Föreläsning 8 vt2004, för IT85 anrop … wait … wait … wrfifo … signal … signal … retur PUT-FIFO nrempty wrmut nrfull

86 20 June G1502, Föreläsning 8 vt2004, för IT86 ”Nios-kod” för PUTFIFO (bara en massa macron) putfifo:WAITnrempty WAITwrmut WRFIFO SIGNALwrmut SIGNALnrfull RETURN

87 20 June G1502, Föreläsning 8 vt2004, för IT87 Nios-kod Macro för Wait och Signal.macroSIGNALsem movia%o0, \sem TRAP6.endm.macroWAITsem movia%o0, \sem TRAP7.endm

88 20 June G1502, Föreläsning 8 vt2004, för IT88 GET-FIFO Läs data från FIFO-buffert på ett säkert sätt zDet måste finnas upptagen plats zSamtidig läsning är kritisk Vad är det som är kritiskt ? Hantering av rdaddr !

89 20 June G1502, Föreläsning 8 vt2004, för IT89 GET-FIFO nrempty rdmut nrfull retur … signal … signal … rdfifo … wait … wait … anrop

90 20 June G1502, Föreläsning 8 vt2004, för IT90 Nios-kod för GETFIFO (bara en massa macron) getfifo:WAITnrfull WAITrdmut RDFIFO SIGNALrdmut SIGNALnrempty RETURN

91 20 June G1502, Föreläsning 8 vt2004, för IT91 CPU-scheduling OS Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 time-slice

92 20 June G1502, Föreläsning 8 vt2004, för IT92 En process kan göra yield zLämna bort resten av sin time-slice zSpeciellt vid wait-operation på semafor zNästa thread bör få en hel time-slice zVid en semafor finns ”väntande threads” zEn signal kan flytta en thread till RQ zDet finns olika varianter vid signal

93 20 June G1502, Föreläsning 8 vt2004, för IT93 Några sidor om zSIGNAL som system call med TRAP 6 zWAIT som system call med TRAP 7 zYIELD som system call med TRAP 8 zEXIT som system call med TRAP 9 zNios-kod för signal, wait och yield z...

94 20 June G1502, Föreläsning 8 vt2004, för IT94 Signal med Nios-kod pekare till semafor i %o0 zOm anrop görs med TRAP6 är IE redan 0 ;DI;enter critical trap6:ld%L0, [%i0];hämta semafor addi%L0, 1;lägg i en boll st[%i0], %L0;semafor tillbaks ;EI tret%o7;medför även EI

95 20 June G1502, Föreläsning 8 vt2004, för IT95 Wait med Nios-kod pekare till semafor i %o0 zOm anrop görs med TRAP7 är IE redan =0 trap7: ld%L0, [%i0];läs nytt semaforvärde ifrz%L0;finns det någon boll? brnoball;hopp om ingen boll nop subi%L0, 1;ta en boll st[%i0], %L0;semaforväred skrivs tillbaks tret%o7;medför även EI noball:EI;släpp in TimerInt, OBS OBS ! ;YIELD;om så önskas med TRAP8 DI;hindra TimerInt brtrap7;och leta boll igen nop

96 20 June G1502, Föreläsning 8 vt2004, för IT96 Makro-Kod för context switch Hit kommer man efter timerint om man ska göra Context Switch ( Timern har givits kvittens med mera …) zDenna makro-kod exekveras med IE=0 SAVEPCB;spara PCB på lokal stack move %o0, %sp;kopiera %sp till %o0 PUTRQ;skriv %sp i Ready Queue GETRQ ;läs %sp från Ready Queue move %sp, %o0;kopiera %o0 till %sp UNSAVEPCB ;kopiera PCB till processorn tret%07 ;gör ”returhoppet”

97 20 June G1502, Föreläsning 8 vt2004, för IT97 Yield med Nios-kod zYIELD-anrop görs med TRAP (t.ex TRAP8) zVad ska utföras av YIELD zSamma sak som context switch

98 20 June G1502, Föreläsning 8 vt2004, för IT98 Kod för context switch Hit kommer man efter yield-anrop och det ska göras Context Switch ( Timern ska justeras till hel time-slice …) TRAP8: SAVEPCB ;spara PCB på lokal stack move%o0, %sp PUTRQ ;skriv %sp till ReadyQueue GETRQ ;läs ny %sp från ReadyQueue move %sp, %o0 UNSAVEPCB ;kopiera PCB till processorn tret%07;gör ”returhopp” som vanligt

99 20 June G1502, Föreläsning 8 vt2004, för IT99 EXIT med Nios-kod zEXIT-anrop görs med TRAP (t.ex TRAP9) zVad ska utföras av EXIT zTråden ska ej placeras i RQ

100 20 June G1502, Föreläsning 8 vt2004, för IT100 Kod för EXIT Hit kommer man efter EXIT-anrop och det ska göras Context Switch TRAP9: ;SAVEPCB ;spara ej PCB på lokal stack ;PUTRQ ;skriv ej %sp till ReadyQueue GETRQ ;läs ny %sp från ReadyQueue move %sp, %o0 UNSAVEPCB ;kopiera PCB till processorn tret%07;gör ”returhopp” som vanligt

101 20 June G1502, Föreläsning 8 vt2004, för IT101 Laboration 5 ingår i kursen hösten 2003 zMaterial ingår i tentamen (se extentor) zLab-PM finns på hemsidan zLabben körs på MIPS-simulatorn ! zLabben ska redovisas muntligt zEnsam eller i grupp om 2 (eventuellt 4)

102 20 June G1502, Föreläsning 8 vt2004, för IT102 Laboration 5 CPU-scheduling / semaforer zIdle-tråd kan göra Yield zProducer skriver primtal till FIFO zConsumer läser primtal från FIFO zAntal Producers varieras zAntal Consumers varieras zAntal platser i FIFO varieras zBeteende vid WAIT varieras

103 20 June G1502, Föreläsning 8 vt2004, för IT103 CPU-scheduling endast Idle-tråd OS Idle time-slice Round Robin

104 20 June G1502, Föreläsning 8 vt2004, för IT104 OS Idle Prod 1 time-slice Round Robin CPU-scheduling Idle-tråd och en Producer Prod 1 får cirka 50% av tiden

105 20 June G1502, Föreläsning 8 vt2004, för IT105 OS Idle Prod 1 time-slice Round Robin CPU-scheduling Idle-tråd och en Producer Prod 1 får nästan 100% av tiden

106 20 June G1502, Föreläsning 8 vt2004, för IT106 OS Idle Prod 1 Prod 2 Prod 3 time-slice Round Robin CPU-scheduling Idle-tråd och tre Procuder Prod 1 får cirka 33% av tiden


Ladda ner ppt "20 June 2015 2G1502, Föreläsning 8 vt2004, för IT1 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling 2. Semaforer (förberedelse till lab 5)"

Liknande presentationer


Google-annonser