is1200 datorteknik
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 1
IS1200 Datorteknik
Föreläsning 9Del 1. CPU-scheduling
Del 2. Semaforer(förberedelse till hemlab 3)
IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200
Assemblerprogram
C
In- och utmatning
Avbrott och "trap"
CacheminnenTrådar, synkronisering
CE F1
CE F3
CE F4
CE F5
CE F6
CE F7
CE F8
CE F9
CE F2
CE Ö4
CE Ö1
CE Ö2
CE Ö3
CE Ö7
CE Ö8
CE Ö9
CE Ö5 CE Ö6
lab nios2time
hemlab C
lab nios2io
lab nios2int
hemlab cache
hemlab trådar
CE F10 CE Ö10 tentamen
April 20, 2023 2IS1200 Datorteknik föreläsning
CE - F9
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 3
IS1500 Datorteknik och komponenter
Föreläsning 9Del 1. CPU-scheduling
Fördelning av processortid
(förberedelse till hemlab 3)
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 4
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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 5
CPU-schedulingRound Robin
OSTråd 1Tråd 2Tråd 3
time-slice
time-out time-out time-out time-outtime-out
time-out
context switches
. . .
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 7
Kartbild av fysiska minnetvarje tråd har egna platser
adress ?
adress ?
7 0
.data
.text
heap
stack
(fetch-execute)
(malloc-free)
(push-pop)
(load-store)
SP
PC +n
.bss
adress ?
adress ?
7 0
.data
.text
heap
stack
(fetch-execute)
(malloc-free)
(push-pop)
(load-store)
SP
PC +n
.bss
. . . .
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 8
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 r4call RQPUT # skriv sp i Ready Queue
# här görs ”språnget” mellan 2 processer/trådarcall RQGET # läs ny sp från Ready Queuemove sp, r2 # kopiera r2 till sp
TCBUNSAVE # kopiera TCB till processor. . .
cswret:eret # tillbaks till utvald tråd/process
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 9
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ådarcall oslab_internal_threadswitchmove sp, r2 # kopiera r2 till sp
TCBUNSAVE # kopiera TCB till processorn. . .
cswret:eret # tillbaks till utvald tråd/process
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 10
Nios-II Process Control Block - PCB Thread Control Block - TCB
r1—r23r26 (gp)r28 (fp)
sp
r31 #returadress
r29 (ea)
27 register108 bytes
Varje register som en tråd använder ska sparas/skyddas
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 11
Ready QueueCurrent Thread and PCB:s
TCB2ProcessControlBlock
TCB4ProcessControlBlock
TCB5ProcessControlBlock
TCB0ProcessControlBlock
Ready Queue innehåller(stack-) pekare till PCB:er
sp1 1
Idle 0
sp2 2
sp3 3
sp4 4
sp5 5
running_thread
TCB1ProcessControlBlock
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 12
oslab_thread_info_arraybefore 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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 13
oslab_thread_info_arrayidle and 5 threads
sp1 1
0
sp2 2
sp3 3
sp4 4
sp5 5
ledig
upptagen
First created threadSecond 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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 14
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!) )
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 15
CPU-schedulingExit (System Call)
OSTråd 1Tråd 2Tråd 3
time-slice
time-out
exit
time-out time-out time-out
Round Robin
Tråd 2 borta ur RQ !
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 16
OSTråd 1Tråd 2Tråd 3Tråd 4
time-slice
time-out time-out time-outtime-out
time-out
Round Robin
CPU-schedulingCreate (System Call)
create
Tråd 4 tillkom i RQ !
time-out
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 17
OSTråd 1Tråd 2Tråd 3
time-slice
time-out time-out time-outtime-out
time-out
Sound Robin
CPU-schedulingYield (System Call)
yield
< time-slice
Tråd 2 vilar i RQ !
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 18
Program-Kod för context switch(repris)
contextswitch:TCBSAVE # spara TCB på lokal stackmove r4, sp # kopiera sp till r4call RQPUT # skriv sp i Ready Queue
# här görs ”språnget” mellan 2 processer/trådarcall RQGET # läs ny sp från Ready Queuemove sp, r2 # kopiera r2 till spTCBUNSAVE # kopiera TCB till processorn. . .
cswret: eret # tillbaks till utvald
tråd/process
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 19
Kod för context switchmer liknande lab-PM
contextswitch:TCBSAVE # spara TCB på lokal stackmove r4, sp # kopiera sp till r4call oslab_internal_threadswitch
# RQPUT och RQGET i C-kod
move sp, r2 # kopiera r2 till spTCBUNSAVE # kopiera TCB till processorn
cswret:eret # tillbaks till utvald
tråd/process
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 20
Nios-II (repris) Process Control Block - PCB Thread Control Block - TCB
r1—r23r26 (gp)r28 (fp)
sp
r31 #returadress
r29 (ea)
27 register108 bytes
Varje register som en tråd använder ska sparas/skyddas
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 21
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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 22
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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 23
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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 24
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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 25
Exceptions in Nios-IISuggested software structure
trap
0x800020:”jmp ExcHand”
Int ?
Trap ?
ExcHand:
ElseHand
Yes
Yes
No
NoInt:IRQ00
IRQ10
IRQ31
error
IntHand:
No
No
irq00HandYes
irq10HandYes
irq31HandYes
subi r29, r29, 4
eret
No
trap0
trap1
trapn
error
TrapHand:
No
No
trap0Hand
Yes
trap1Hand
Yes
trapnHand
Yes
eret
No
instr
int
No
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 26
Hemlaboration 3Suggested software structure
trap
0x800020:”jmp ExcHand”
Int ?
Trap ?
ExcHand:
ElseHand
Yes
Yes
No
NoInt:
IRQ10
error
IntHand:
Yes
subi r29, r29, 4
instr
int
No
TimerIntHand:
Context Switch
100? Yes
eret
eret
No No
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 27
OSTråd 1Tråd 2Tråd 3Tråd 4
time-slice
time-out time-out time-outtime-out
time-out
Round Robin
CPU-schedulingCreate (System Call)
create
Tråd 4 tillkom i RQ !
time-out
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 28
oslab_thread_info_arrayidle and 5 threads
sp1 1
Idle 0
sp2 2
sp3 3
sp4 4
sp5 5
ledig
upptagen
First created threadSecond 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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 29
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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 30
Hemlab 3TCB efter Create_Thread
r1—r23r26 (gp)r28 (fp)
sp
r31 #returadress
r29 (ea)
programkod
ret
”Object”:inparam
r4
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 31
oslab_thread_info_arrayexit 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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 32
oslab_thread_info_arraycreate 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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 33
PAUS-RUTA
Snart kommer nästa portion
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 34
2G1518 Datorteknik
Föreläsning 9
Del 2. Semaforer(förberedelse till hemlab 3)
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 35
Samverkande processer
Användning av semaforervid
SynkroniseringÖmsesidig uteslutning
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 36
Semafor, vad är det
En heltalsvariabel (0, 1, 2, 3 … -1, -2 ??)
(men med) Speciella egenskaperOperationer (atomära - odelbara)signal (sem) ~ öka med 1wait (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
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 37
Semaforkorgbollsanalogi
KORG
BOLL
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 38
Semaforkorgbollsanalogi
KORG
BOLL
SIGNAL är ungefär: Lägg en till boll i korgen
(och fortsätt sedan…)
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 39
Semaforkorgbollsanalogi
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 …)
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 40
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 Dutch computer scientist.
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 41
Samverkan mellan processermed hjälp av semaforer
SynkroniseringÖmsesidig uteslutning (Mutual
Exclusion)
Rendez Vous (dubbel synkronisering)
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 42
Synkronisering:P1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 43
SynkroniseringP1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 44
SynkroniseringP1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 45
SynkroniseringP1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 46
SynkroniseringP1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 47
SynkroniseringP1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 48
SynkroniseringP1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 49
SynkroniseringP1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 50
SynkroniseringP1 i T1 krävs före P2 i T2
…P1: …signal
…wait P2: …
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 51
Ömsesidig uteslutning:P1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 52
Ömsesidig uteslutningP1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 Och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 53
Ömsesidig uteslutningP1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 Och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 54
Ömsesidig uteslutningP1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 Och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 55
Ömsesidig uteslutningP1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 Och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 56
Ömsesidig uteslutningP1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 Och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 57
Ömsesidig uteslutningP1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 Och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 58
Ömsesidig uteslutningP1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 Och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 59
Ömsesidig uteslutningP1 i T1 kritisk liksom P2 i T2
…waitP1: …signal
…wait P2:signal …
T1: T2:
P1 Och P2 får inte exekveras ”samtidigt”
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 60
Rendez VousT1 och T2 inväntar varandra innan S1 och S2 exekverar
…P1: …signalwaitS1
…P2: …signalwaitS2
T1: T2:
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 61
Testprogram(hem-laboration 3)
Producers, p stycken, producerar primtal
och skriver tillBuffert (FIFO) med x platser för
primtalsom sedan läses av
Consumers, c stycken, som konsumerar primtal
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 62
Producer
init: tal := start
ploop: räkna ut nästa primtal, tal anropa PUT-FIFO (tal)br ploop
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 63
Producer”NiosII-kod” / makron
prod: movia r4, startploop: call NextPrime #
subrutinPUTFIFO # macro# yield() ???br ploop
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 64
ProducerC-kod enligt hemlab 3
Void Producer ( … )next = ”startvalue from inparam”
while (1){next = NextPrime(next) // functionPutFifo(next) // function
// yield() // maybe ? }
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 65
Consumer ”NiosII-kod” / makron
init: vid behov ?
cloop:anropa GET-FIFO (tal)konsumera primtalet (skriv
ut tal)br cloop
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 66
Consumer C-kod enligt hemlab 3
Void Consumer ( … )while (1){next = GetFifo() // function”consume” (next) // function
// yield() // maybe ? }
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 67
PUT-FIFO
Skriv data till FIFO-buffert på ett säkert sättDet måste finnas minst en ledig plats”Samtidig” skrivning är kritiskFråga: Vad är det som är kritiskt ?Svar: Hantering av skrivpekaren
wraddr !
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 68
FIFO Queue, Data Structure(jfr med RQ!)
wraddr: rdaddr:
FifoEnd:
Fifo:
ledig
upptagen
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 69
FIFO Queue, Data Structure
#define Fifo_Size16int Fifo[Fifo_Size] ;int wraddr = 0 ;int rdaddr = 0 ;
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 70
C-code: skriv tal till Fifo-buffertC-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;
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 71
anrop … wait … wait … wrfifo … signal … signal … retur
PUT-FIFO
nrempty
wrmut
nrfull
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 72
”Nios-kod” för PUTFIFO(macron eller subrutinanrop)
PUTFIFO: WAIT nremptyWAIT wrmutcall wrfifoSIGNAL wrmutSIGNAL nrfullRETURN
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 73
Nios-II-kodMacro för System Call
.macro SysCall indexmovia r4, \index trap
.endm
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 74
Nios-II-kodMacro för Signal och Wait
.macro SIGNAL semmovia r5, \sem SysCall 6 # trap med 6 i r4
.endm
.macro WAIT semmovia r5, \sem SysCall 7 # trap med 7 i r4
.endm
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 75
GET-FIFO
Läs data från FIFO-buffert på ett säkert sättDet måste finnas minst en upptagen
platsSamtidig läsning är kritiskFråga: Vad är det som är kritiskt ?Svar: Hantering av läspekaren
rdaddr !
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 76
GET-FIFO
nrempty
rdmut
nrfull
retur … signal … signal … rdfifo … wait … wait … anrop
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 77
Nios-kod för GETFIFO(macron eller subrutiner)
GETFIFO: WAIT nrfullWAIT rdmutcall rdfifoSIGNAL rdmutSIGNAL nremptyRETURN
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 78
CPU-scheduling
OSProd 1Prod 2Prod 3Cons 1Cons 2
time-slice
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 79
En process kan göra yield
Lämna bort resten av sin time-slice Speciellt vid wait-operation på semaforNästa thread bör få en hel time-sliceVid en semafor finns ”väntande
threads”En signal kan flytta en thread till RQDet finns olika varianter vid signal
(vilken tråd ska fortsätta efter signal ?)
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 80
Några sidor om
SIGNAL som System Call med TRAP 6WAIT som System Call med TRAP 7YIELD som System Call med TRAP 8EXIT som System Call med TRAP 9Nios-II-kod för signal, wait och yield...
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 81
Signal med Nios-II-kodpekare till semafor i r5
# Om anrop görs med SysCall 6 är PIE redan= 0
# DI # enter criticaltrap6:ldw r24, 0(r5) # hämta
värdeaddir24, r24, 1 # lägg till en bollstw r24, 0(r5) # skriv värde
# EI # NEJ !eret # medför även EI
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 82
function: Signal med C-kodinparameter: pekare till semafor
void Signal ( int * sem){
oslab_begin_critical_region() ;*sem = *sem + 1 ;oslab_end_critical_region() ;
}
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 83
Wait med Nios-II-kodpekare 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 bollnoball: PUSHCTL 1 # skydda estatus
PUSH r29 # skydda eaEI # släpp in TimerInt, OBS OBS !
# YIELD # om så önskas med SysCall 8 DI # hindra TimerInt
POP r29 # återställ eaPOPCTL 1 # återställ estatus
br trap7 # och leta boll igenball: subi r24, r24, 1 # ta en boll stw r24, 0(r5) # semaforvärde skrivs tillbaks eret # medför även EI
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 84
function: Wait med C-kodinparameter: 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() ;
}
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 85
Program-Kod för context switch(uppdaterad repris)
contextswitch:TCBSAVE # spara TCB på lokal stackmove r4, sp # kopiera sp till r4call RQPUT # skriv sp i Ready Queue
# här görs ”språnget” mellan 2 processer/trådarexit: call RQGET # läs ny sp från Ready
Queuemove sp, r2 # kopiera r2 till spTCBUNSAVE # kopiera TCB till processorn
. . .cswret: eret # tillbaks till utvald tråd/process
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 86
Yield med Nios-kodYIELD-anrop görs med TRAP 8 TRAP 8 görs med SysCall 8Fråga: Vad ska utföras av YIELD ?Svar: Samma sak som context
switch !
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 87
Kod för YIELDHit kommer man efter YIELD-anrop och det ska göras Context Switch
(Timern ska justeras till hel time-slice …)
trap8: push r29br contextswitch
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 88
EXIT med Nios-kodEXIT-anrop görs med TRAP (t.ex
TRAP9)TRAP 9 görs med SysCall 9Fråga: Vad ska utföras av EXIT ?Svar: Tråden ska ej placeras i RQ !
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 89
Kod för EXITHit kommer man efter EXIT-anropoch det ska göras Context Switch (Timern ska justeras till hel time-slice …)
trap9: br exit
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 90
Hem-laboration 3
En uppgift på tentamen (se extentor)Lab-PM finns på hemsidanLabben körs på NiosII-simulatorn !Labben ska redovisas muntligtEnsam eller i grupp om 2 (ev 2
grupper)
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 91
Hem-laboration 3CPU-scheduling / semaforer
Idle-tråd kan göra YieldProducer skriver primtal till FIFOConsumer läser primtal från FIFOAntal Producers varierasAntal Consumers varierasAntal platser i FIFO varierasBeteende vid WAIT varieras
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 92
OSIdle (gör inte
yield)Prod 1
time-slice
Round Robin
CPU-schedulingIdle-tråd och en Producer
Idle tar cirka 50% av tidenProd 1 får cirka 50% av tiden
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 93
OSIdle (Idle gör
yield)Prod 1
time-slice
Round Robin
CPU-schedulingIdle-tråd och en Producer
Idle tar cirka 0% av tidenProd 1 får nästan 100% av tiden
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 94
OSIdle (Idle gör
yield)Proc 1Proc 2Proc 3
time-slice
Round Robin
CPU-schedulingIdle-tråd och tre Processer
Proc 1 får cirka 33% av tiden
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 95
OSIdleProc 1Proc 2Proc 3Proc 4Proc 5
time-slice Round Robin
CPU-schedulingIdle-tråd och fem Processer
Proc 1 får cirka 20% av tiden
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 96
CPU-schedulingendast Idle-tråd som yieldar
OSIdle gör yield
time-slice
Robin Hood
Idle får cirka 100% av tiden (bränner/slösar)
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 97
Med time-slice 10 millisekunderHur många instruktioner?
Antag 1 GHz processorAntag 1 instruktion per CPU-cykel1 000 000 000 instruktioner per sekund1 000 000 instruktioner per millisekund10 000 000 instruktioner per time slice
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 98
Windows OSctrl-alt-del öppnar
Windows Task ManagerKlicka på Processesoch studera längst ner:...System Idle Process SYSTEM många
%
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 99
OSIdleP1P2P3C1C2
Round Robin
Exempel på figurExempelsamling del 9
time-slice
April 20, 2023IS1200 Datorteknik föreläsning
CE - F9 100
OSIdleProd 1Prod 2Prod 3Cons 1Cons 2
time-slice Round Robin
Hemlab 3, figurexempelyield i Consumer och i Wait()
Första varvet varv 3 och senare