is1200 datorteknik

100
June 20, 2022 IS1200 Datorteknik föreläsning CE - F9 1 IS1200 Datorteknik Föreläsning 9 Del 1. CPU-scheduling Del 2. Semaforer (förberedelse till hemlab 3)

Upload: reece-osborn

Post on 02-Jan-2016

33 views

Category:

Documents


1 download

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 Presentation

TRANSCRIPT

Page 1: IS1200 Datorteknik

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)

Page 2: IS1200 Datorteknik

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

Page 3: IS1200 Datorteknik

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)

Page 4: IS1200 Datorteknik

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

Page 5: IS1200 Datorteknik

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

. . .

Page 6: IS1200 Datorteknik

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

Page 7: IS1200 Datorteknik

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

. . . .

Page 8: IS1200 Datorteknik

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

Page 9: IS1200 Datorteknik

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

Page 10: IS1200 Datorteknik

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

Page 11: IS1200 Datorteknik

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

Page 12: IS1200 Datorteknik

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

Page 13: IS1200 Datorteknik

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

Page 14: IS1200 Datorteknik

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!) )

Page 15: IS1200 Datorteknik

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 !

Page 16: IS1200 Datorteknik

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

Page 17: IS1200 Datorteknik

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 !

Page 18: IS1200 Datorteknik

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

Page 19: IS1200 Datorteknik

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

Page 20: IS1200 Datorteknik

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

Page 21: IS1200 Datorteknik

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

Page 22: IS1200 Datorteknik

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

Page 23: IS1200 Datorteknik

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

Page 24: IS1200 Datorteknik

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

Page 25: IS1200 Datorteknik

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

Page 26: IS1200 Datorteknik

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

Page 27: IS1200 Datorteknik

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

Page 28: IS1200 Datorteknik

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

Page 29: IS1200 Datorteknik

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

Page 30: IS1200 Datorteknik

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

Page 31: IS1200 Datorteknik

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

Page 32: IS1200 Datorteknik

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

Page 33: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 33

PAUS-RUTA

Snart kommer nästa portion

Page 34: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 34

2G1518 Datorteknik

Föreläsning 9

Del 2. Semaforer(förberedelse till hemlab 3)

Page 35: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 35

Samverkande processer

Användning av semaforervid

SynkroniseringÖmsesidig uteslutning

Page 36: IS1200 Datorteknik

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

Page 37: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 37

Semaforkorgbollsanalogi

KORG

BOLL

Page 38: IS1200 Datorteknik

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…)

Page 39: IS1200 Datorteknik

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 …)

Page 40: IS1200 Datorteknik

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.

Page 41: IS1200 Datorteknik

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)

Page 42: IS1200 Datorteknik

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:

Page 43: IS1200 Datorteknik

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:

Page 44: IS1200 Datorteknik

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:

Page 45: IS1200 Datorteknik

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:

Page 46: IS1200 Datorteknik

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:

Page 47: IS1200 Datorteknik

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:

Page 48: IS1200 Datorteknik

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:

Page 49: IS1200 Datorteknik

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:

Page 50: IS1200 Datorteknik

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:

Page 51: IS1200 Datorteknik

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”

Page 52: IS1200 Datorteknik

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”

Page 53: IS1200 Datorteknik

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”

Page 54: IS1200 Datorteknik

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”

Page 55: IS1200 Datorteknik

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”

Page 56: IS1200 Datorteknik

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”

Page 57: IS1200 Datorteknik

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”

Page 58: IS1200 Datorteknik

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”

Page 59: IS1200 Datorteknik

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”

Page 60: IS1200 Datorteknik

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:

Page 61: IS1200 Datorteknik

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

Page 62: IS1200 Datorteknik

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

Page 63: IS1200 Datorteknik

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

Page 64: IS1200 Datorteknik

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 ? }

Page 65: IS1200 Datorteknik

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

Page 66: IS1200 Datorteknik

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 ? }

Page 67: IS1200 Datorteknik

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 !

Page 68: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 68

FIFO Queue, Data Structure(jfr med RQ!)

wraddr: rdaddr:

FifoEnd:

Fifo:

ledig

upptagen

Page 69: IS1200 Datorteknik

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 ;

Page 70: IS1200 Datorteknik

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;

Page 71: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 71

anrop … wait … wait … wrfifo … signal … signal … retur

PUT-FIFO

nrempty

wrmut

nrfull

Page 72: IS1200 Datorteknik

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

Page 73: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 73

Nios-II-kodMacro för System Call

.macro SysCall indexmovia r4, \index trap

.endm

Page 74: IS1200 Datorteknik

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

Page 75: IS1200 Datorteknik

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 !

Page 76: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 76

GET-FIFO

nrempty

rdmut

nrfull

retur … signal … signal … rdfifo … wait … wait … anrop

Page 77: IS1200 Datorteknik

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

Page 78: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 78

CPU-scheduling

OSProd 1Prod 2Prod 3Cons 1Cons 2

time-slice

Page 79: IS1200 Datorteknik

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 ?)

Page 80: IS1200 Datorteknik

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...

Page 81: IS1200 Datorteknik

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

Page 82: IS1200 Datorteknik

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() ;

}

Page 83: IS1200 Datorteknik

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

Page 84: IS1200 Datorteknik

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() ;

}

Page 85: IS1200 Datorteknik

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

Page 86: IS1200 Datorteknik

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 !

Page 87: IS1200 Datorteknik

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

Page 88: IS1200 Datorteknik

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 !

Page 89: IS1200 Datorteknik

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

Page 90: IS1200 Datorteknik

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)

Page 91: IS1200 Datorteknik

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

Page 92: IS1200 Datorteknik

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

Page 93: IS1200 Datorteknik

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

Page 94: IS1200 Datorteknik

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

Page 95: IS1200 Datorteknik

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

Page 96: IS1200 Datorteknik

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)

Page 97: IS1200 Datorteknik

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

Page 98: IS1200 Datorteknik

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

%

Page 99: IS1200 Datorteknik

April 20, 2023IS1200 Datorteknik föreläsning

CE - F9 99

OSIdleP1P2P3C1C2

Round Robin

Exempel på figurExempelsamling del 9

time-slice

Page 100: IS1200 Datorteknik

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