1k likes | 1.14k Views
IS1200 Datorteknik. Föreläsning 9 Del 1. CPU-scheduling Del 2. Semaforer (förberedelse till hemlab 3). IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200. CE F1. CE F2. CE Ö1. CE F3. CE Ö2. Assemblerprogram. CE F4. CE Ö3. lab nios2time. C. CE F5. CE Ö4. hemlab C.
E N D
IS1200 Datorteknik Föreläsning 9 Del 1. CPU-scheduling Del 2. Semaforer (förberedelse till hemlab 3) IS1200 Datorteknik föreläsning CE - F9
IS1200 Datorteknikhttp://www.ict.kth.se/courses/IS1200 CE F1 CE F2 CE Ö1 CE F3 CE Ö2 Assemblerprogram CE F4 CE Ö3 lab nios2time C CE F5 CE Ö4 hemlab C In- och utmatning CE F6 CE Ö5 CE Ö6 lab nios2io Avbrott och "trap" CE F7 CE Ö7 lab nios2int Cacheminnen CE F8 CE Ö8 hemlab cache Trådar, synkronisering CE F9 CE Ö9 hemlab trådar CE F10 CE Ö10 tentamen IS1200 Datorteknik föreläsning CE - F9
IS1500 Datorteknik och komponenter Föreläsning 9 Del 1. CPU-scheduling Fördelning av processortid (förberedelse till hemlab 3) IS1200 Datorteknik föreläsning CE - F9
Realtidskärna Viktiga begrepp (en del) • CPU - scheduling • Time Slice • Timer Interrupt • Context Switch (process/thread switch) • Process Control Block / Thread Control Block • Ready Queue • Round Robin IS1200 Datorteknik föreläsning CE - F9
CPU-schedulingRound 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 IS1200 Datorteknik föreläsning CE - F9
Å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 IS1200 Datorteknik föreläsning CE - F9
+n +n SP SP PC PC Kartbild av fysiska minnetvarje tråd har egna platser 7 0 7 0 adress ? adress ? .text .text (fetch-execute) (fetch-execute) .data .data (load-store) (load-store) .bss .bss heap heap (malloc-free) (malloc-free) . . . . stack stack (push-pop) (push-pop) adress ? adress ? IS1200 Datorteknik föreläsning CE - F9
Program-Kod för context switch context_switch: # TCBSAVE och TCBUNSAVE kan skrivas som makron, se senare 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 processor . . . cswret: eret # tillbaks till utvald tråd/process IS1200 Datorteknik föreläsning CE - F9
Program-Kod för context switch(mer som i labprogramvaran) oslab_time_to_switch: . . . oslab_trap_handler: # TCBSAVE och TCBUNSAVE kan skrivas som makron, se senare 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 IS1200 Datorteknik föreläsning CE - F9
r31 #returadress r29 (ea) r1—r23 r26 (gp) r28 (fp) Nios-II Process Control Block - PCB Thread Control Block - TCB sp 27 register 108 bytes Varje register som en tråd använder ska sparas/skyddas IS1200 Datorteknik föreläsning CE - F9
TCB2 Process Control Block TCB4 Process Control Block TCB5 Process Control Block TCB0 Process Control Block TCB1 Process Control Block Ready QueueCurrent Thread and PCB:s Idle 0 sp1 1 sp2 2 running_thread sp3 3 sp4 4 sp5 5 Ready Queue innehåller (stack-) pekare till PCB:er IS1200 Datorteknik föreläsning CE - F9
oslab_thread_info_arraybefore idle runs upptagen oslab_thread_info_array[0] 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 IS1200 Datorteknik föreläsning CE - F9
oslab_thread_info_arrayidle and 5 threads upptagen 0 Idle-thread sp1 1 First created thread Second created thread ... ... sp2 2 sp3 3 oslab_currently_running_thread sp4 4 sp5 5 oslab_current_thread_count = 6 oslab_next_available_thread_id = 6 MAX_THREADS = 17 oslab_thread_info_array[16] ledig IS1200 Datorteknik föreläsning CE - F9
Realtidskärna Viktiga begrepp (igen) • Time-Slice #10-100 millisekunder • TCB Save # spara undan Process Control Block • RQ Put # pekare till tråd läggs i Ready Queue • RQ Get # pekare till tråd tas ur Ready Queue • TCB Unsave # återställ Process Control Block • Exit # avsluta en tråd • CreateThread (Addr, SP, PRIO, ...) # initiera ett Process Control Block • Yield # släpp resten av en Time-Slice • (Sleep # ”sov en stund” (inte nu!) ) IS1200 Datorteknik föreläsning CE - F9
CPU-schedulingExit (System Call) Round Robin OS Tråd 1 Tråd 2 Tråd 3 time-slice exit Tråd 2 borta ur RQ ! time-out time-out time-out time-out IS1200 Datorteknik föreläsning CE - F9
CPU-schedulingCreate (System Call) Round Robin OS Tråd 1 Tråd 2 Tråd 3 Tråd 4 time-slice create Tråd 4 tillkom i RQ ! time-out time-out time-out time-out time-out time-out IS1200 Datorteknik föreläsning CE - F9
CPU-schedulingYield (System Call) Sound Robin OS Tråd 1 Tråd 2 Tråd 3 time-slice < time-slice yield Tråd 2 vilar i RQ ! time-out time-out time-out time-out time-out IS1200 Datorteknik föreläsning CE - F9
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 IS1200 Datorteknik föreläsning CE - F9
Kod för context switchmer 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 IS1200 Datorteknik föreläsning CE - F9
r31 #returadress r29 (ea) r1—r23 r26 (gp) r28 (fp) Nios-II (repris) Process Control Block - PCB Thread Control Block - TCB sp 27 register 108 bytes Varje register som en tråd använder ska sparas/skyddas IS1200 Datorteknik föreläsning CE - F9
Nios-II: Macro för att pusha register på stacken .macro TCBSAVE # r31, r28, r26, r23-r1, r29push r31 # returadresspush r28 # fppush r26 # gppush r23. . .push r2push r1push r29 # ea .endm IS1200 Datorteknik föreläsning CE - F9
Nios-II: Macro för att poppa register på stacken .macro TCBUNSAVE #r29, r1-r23, r26, r28, r31pop r29 # eapop r1pop r2. . .pop r23pop r26 # gppop r28 # fppop r31 # returadress .endm IS1200 Datorteknik föreläsning CE - F9
Nios-II: Macro för att lagra register till stacken .macro TCBSAVE # r29, r1-r23, r26, r28, r31 subi sp, sp, 27*4 # reservera 27 platserstw ea, 4*0(sp) # r29 = eastw r1, 4*1(sp)stw r2, 4*2(sp) . . .stw r23, 4*23(sp)stw r26, 4*24 (sp) # r24 = gpstw r28, 4*25 (sp) # r26 = fpstw r31, 4*26 (sp) # r31 = ra .endm IS1200 Datorteknik föreläsning CE - F9
Nios-II: Macro för att ladda register från stacken .macro TCBUNSAVE #r1-r23, r26, r28, r31, r29ldw 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 # återlämna 27 platser .endm IS1200 Datorteknik föreläsning CE - F9
Int ? TrapHand: IRQ00 irq00Hand Trap ? Yes IRQ10 irq10Hand trap0 trap0Hand ElseHand No Yes IRQ31 irq31Hand trap1 trap1Hand No Yes error trapn eret trapnHand No error eret Exceptions in Nios-IISuggested software structure ExcHand: IntHand: Yes subi r29, r29, 4 No NoInt: Yes Yes No No Yes No Yes No int instr 0x800020:”jmp ExcHand” trap IS1200 Datorteknik föreläsning CE - F9
Int ? Trap ? IRQ10 100? ElseHand error Hemlaboration 3Suggested software structure ExcHand: IntHand: Yes TimerIntHand: subi r29, r29, 4 No NoInt: Yes Yes Yes No No No eret Context Switch int instr 0x800020:”jmp ExcHand” trap eret IS1200 Datorteknik föreläsning CE - F9
CPU-schedulingCreate (System Call) Round Robin OS Tråd 1 Tråd 2 Tråd 3 Tråd 4 time-slice create Tråd 4 tillkom i RQ ! time-out time-out time-out time-out time-out time-out IS1200 Datorteknik föreläsning CE - F9
oslab_thread_info_arrayidle and 5 threads R upptagen Idle 0 Idle-thread sp1 1 First created thread Second created thread ... ... sp2 2 sp3 3 oslab_currently_running_thread sp4 4 sp5 5 oslab_current_thread_count = 6 oslab_next_available_thread_id = 6 MAX_THREADS = 17 oslab_thread_info_array[16] ledig IS1200 Datorteknik föreläsning CE - F9
oslab_thread_info_array create next thread #6 oslab_thread_info_array[0] Idle 0 Idle-thread sp1 1 sp2 2 sp3 3 sp4 4 sp5 5 sp6 6 oslab_current_thread_count = 7 oslab_next_available_thread_id = 7 oslab_thread_info_array[16] IS1200 Datorteknik föreläsning CE - F9
r31 #returadress r29 (ea) r1—r23 r26 (gp) r28 (fp) Hemlab 3TCB efter Create_Thread programkod ret sp r4 ”Object”: inparam IS1200 Datorteknik föreläsning CE - F9
oslab_thread_info_arrayexit thread, #2 and #5 oslab_thread_info_array[0] Idle 0 Idle-thread sp1 1 sp3 3 sp4 4 sp6 6 oslab_current_thread_count = 5 oslab_next_available_thread_id = 7 oslab_thread_info_array[16] IS1200 Datorteknik föreläsning CE - F9
oslab_thread_info_arraycreate next thread #7 oslab_thread_info_array[0] Idle 0 Idle-thread sp1 1 sp3 3 sp4 4 sp6 6 sp7 7 oslab_current_thread_count (6) oslab_next_available_thread_id = 8 oslab_thread_info_array[16] IS1200 Datorteknik föreläsning CE - F9
PAUS-RUTA • Snart kommer nästa portion IS1200 Datorteknik föreläsning CE - F9
2G1518 Datorteknik Föreläsning 9 Del 2. Semaforer (förberedelse till hemlab 3) IS1200 Datorteknik föreläsning CE - F9
Samverkande processer Användning av semaforer vid Synkronisering Ömsesidig uteslutning IS1200 Datorteknik föreläsning CE - F9
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 IS1200 Datorteknik föreläsning CE - F9
Semaforkorgbollsanalogi BOLL KORG IS1200 Datorteknik föreläsning CE - F9
Semaforkorgbollsanalogi BOLL KORG SIGNAL är ungefär: Lägg en till boll i korgen (och fortsätt sedan…) IS1200 Datorteknik föreläsning CE - F9
Semaforkorgbollsanalogi 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 …) IS1200 Datorteknik föreläsning CE - F9
Dijkstra • Signal - Verhogen; V(sem) • Wait - Proberen; P(sem) Egentligen prolaag, short for probeer te verlagen “Försök att minska” Edsger Wybe Dijkstra (May 11, 1930 – August 6, 2002; was a Dutchcomputer scientist. IS1200 Datorteknik föreläsning CE - F9
Samverkan mellan processermed hjälp av semaforer • Synkronisering • Ömsesidig uteslutning (Mutual Exclusion) • Rendez Vous (dubbel synkronisering) IS1200 Datorteknik föreläsning CE - F9
Synkronisering:P1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9
SynkroniseringP1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9
SynkroniseringP1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9
SynkroniseringP1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9
SynkroniseringP1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9
SynkroniseringP1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9
SynkroniseringP1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9
SynkroniseringP1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9
SynkroniseringP1 i T1 krävs före P2 i T2 T2: T1: … wait P2: … … P1: … signal IS1200 Datorteknik föreläsning CE - F9