Tinker: The Saga Continues PC 03 0 A B 0 IR OUTPUT N 1 AC 001 - - PowerPoint PPT Presentation

tinker the saga continues
SMART_READER_LITE
LIVE PREVIEW

Tinker: The Saga Continues PC 03 0 A B 0 IR OUTPUT N 1 AC 001 - - PowerPoint PPT Presentation

When last we left our heroine CPU Registers Process A Process B Process C Run Queue Tinker: The Saga Continues PC 03 0 A B 0 IR OUTPUT N 1 AC 001 Mode: USER Main Memory


slide-1
SLIDE 1

1 ¡

CS240 Computer Organization Department of Computer Science Wellesley College

Tinker: The Saga Continues

Interruptions and Communications

When last we left our heroine

27-2

(00) -001 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) (09) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) (33) (34) (35) 000 (36) (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) +100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +000 (69) -001 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 001 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 03 IR OUTPUT N AC 001

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: USER

1 Process C SCHED:

OS Tink Continued

In for the long haul?

  • - patience.toy
  • - Counts to infinity
  • LOOP:

LOAD N

  • - print N to I/O device
  • OUTPUT N
  • - AC <- N
  • ADD

ONE

  • - AC <- N + 1
  • STORE

N

  • - store result in N
  • JUMP

LOOP

  • - go back for more
  • HALT
  • - and stop
  • - program variables and constants
  • N:

000

  • - label a location for N
  • ONE:

001

  • - Constant 1

27-3 OS Tink Continued

On-line storage

  • Tinker ordinarily executes instructions sequentially. However, in a

multiprocessing environment, the OS sometimes needs to step in.*

  • These situations are handled by interrupts or traps consisting of

transfers to specific addresses in the operating system kernel.

  • To get back from an interrupt, the system must have both the old

PC and the previous mode. In Tinker, address 00 holds both values.

27-4 *Why? OS Tink Continued

(00)

+ = kernel mode

  • = user mode

Pre-interrupt PC

slide-2
SLIDE 2

2 ¡

  • When interrupts occur from user mode, the current process is

put to sleep and the active context switches to another process.

  • The operating system saves the current AC plus the pre-interrupt

PC and previous mode to the user process so that the previous process can be restarted later.*

Good night moon

27-5 *These values are stored in (and restored from) words 8 and 9 of the per-process page table using the SSTATE (and RSTATE) kernel instructions. OS Tink Continued

(00)

+ = kernel mode

  • = user mode

Pre-interrupt PC Pre-interrupt AC (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +337 (69) -004

  • 4

+ 3 3 7

Process page table

  • A quantum interrupt is used to ensure that no process dominates

the machine.

  • When a clock interrupt occurs, the hardware suspends the

current process by storing its PC and mode in address 00 and traps to CLOCK.

Stop talking while I’m interrupting

27-6 OS Tink Continued

(08) CLOCK: STORE ACSAV

  • - save user's AC

(09)

  • LOAD

LPID

  • - recover last ID

(10)

  • SUB

PID

  • - same as current one?

(11)

  • JUMPE

SLEEP

  • - if so, nite nite

(12) ELSE: LOAD PID

  • - copy current ID

(13)

  • STORE

LPID

  • - into LPID for next time

(14) RESUME: LOAD ACSAV

  • - restore AC

(15)

  • RTI
  • - and resume process

(16) SLEEP: LOAD ACSAVE

  • - recover state

(17) DISMS: SSTATE PID

  • - save state

(18)

  • ENQUEUE PID
  • - put on run queue

(19)

  • JUMP SCHED
  • - and get next process
  • Patience soldiers on and on and on ...

27-7

(20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +000 (69) -001 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 03 IR OUTPUT N AC 002

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: USER

1 2 Process C (00) -001 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED ELSE: RESUME: SLEEP: DISMS: CLOCK: SCHED:

OS Tink Continued

Quantum interrupt (the second time around)

27-8

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +000 (69) -001 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 08 IR INPUT N AC 002

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS: SCHED:

OS Tink Continued

slide-3
SLIDE 3

3 ¡

Store the AC

27-9

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +000 (69) -001 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 09 IR STORE ACSAV AC 002

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS: SCHED:

OS Tink Continued

Check that this is second time around

27-10

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +000 (69) -001 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 10 IR LOAD LPID AC C

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS:

OS Tink Continued

LPID = PID?

27-11

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +000 (69) -001 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 11 IR SUB PID AC 000

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS:

OS Tink Continued

Yep, bedtime

27-12

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +000 (69) -001 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 16 IR JUMPE SLEEP AC 000

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS:

OS Tink Continued

slide-4
SLIDE 4

4 ¡

Prepare to save state

27-13

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +000 (69) -001 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 17 IR LOAD ACSAV AC 002

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS:

OS Tink Continued

Save AC, PC, and mode in locations 8 & 9 of page table

27-14

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 18 IR SSTATE PID AC 002

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS:

OS Tink Continued

Put process at the end of the queue

27-15

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 19 IR ENQUEUE PID AC 002

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A C

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS:

OS Tink Continued

And schedule the next process

27-16

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) C (32) C (33) (34) (35) V (36) 002 (37) (38) (39) (40) -000 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) PC 01 IR JUMP SCHED AC 002

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

B A C

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS:

OS Tink Continued

slide-5
SLIDE 5

5 ¡ Input wait

  • In a single user system it is

reasonable for the INPUT instruction to wait until the user enters a value before

  • continuing. This is not such a

good idea in a multiprocessing environment.

  • In user mode, the execution
  • f the INPUT instruction is

handled by signaling the appropriate I/O device and trapping to IWAIT in the OS.

23-17 *What does Tinker do at address IWAIT? OS Tink Continued

Process A needs input

27-18

(00) -003 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) A (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 02 IR INPUT X AC 000

  • CPU Registers

Process A Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

C B

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: USER

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS: > IWAIT:

OS Tink Continued

Input trap to IWAIT

27-19

(00) -002 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) A (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -001 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 20 IR INPUT X AC 000

  • CPU Registers

Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

C B

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS: > IWAIT: Process A

OS Tink Continued

Save the state

27-20

(00) -002 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) A (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 21 IR SSTATE PID AC 000

  • CPU Registers

Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

C B

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS: > IWAIT: Process A

OS Tink Continued

slide-6
SLIDE 6

6 ¡

And return to schedule next process -- A not enqueued

27-21

(00) -002 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) (23) (24) (25) (26) (27) (28) (29) (30) 000 (31) A (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 002 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 21 IR JUMP SCHED AC 000

  • CPU Registers

Process B Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

C B

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS: > IWAIT: Process A

OS Tink Continued

You have mail

  • When input arrives the

hardware puts the ID of the process requesting the I/O into memory location IPID, the actual input in memory location IVALU and traps to IREADY in the OS.

  • Our job is to write the code

for IREADY.*

27-22 *This code uses two special instructions GETINS and GETPAGE described in your assignment. OS Tink Continued

Process B is also waiting for input, so C drives

27-23

(00) -002 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 003 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 05 IR STORE N AC 003

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: USER

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS: > IWAIT: Process A IREADY: Process B >

OS Tink Continued

Suddenly, input arrives for A

27-24

(00) -002 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) (34) (35) (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 003 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 05 IR STORE N AC 003

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: USER

1 2 Process C CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B >

OS Tink Continued

slide-7
SLIDE 7

7 ¡

Tinker traps to IREADY -- saving PC & mode in (00)

27-25

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 003 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 22 IR STORE N AC 003

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: IPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C SUSPENDED

OS Tink Continued

Save the AC

27-26

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) (34) 003 (35) A (36) 003 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 003 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 23 IR STORE ACSAV AC 003

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C SUSPENDED

OS Tink Continued

AC gets instruction where I/O process was suspended

27-27

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) -050 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) 003 <N (82) 001 <ONE (83) (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 24 IR GETINS IPID AC INPUT X

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C SUSPENDED

OS Tink Continued

Get physical address of input location (swap if necessary)

27-28

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) +080 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) -280 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (80) (81) <X (82) <Y (83) <SUM (84) (85) (86) (87) (88) (89) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 25 IR GETPAGE IPID AC 081

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C SUSPENDED

OS Tink Continued

slide-8
SLIDE 8

8 ¡

Store address where input goes into location IADDR

27-29

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) 081 (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) +080 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) -280 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 26 IR STORE IADDR AC 081

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C (80) (81) <X (82) <Y (83) <SUM (84) (85) (86) (87) (88) (89) SUSPENDED

OS Tink Continued

Get the input value into AC

27-30

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) 081 (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) +080 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) -280 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 27 IR LOAD IVAL AC 003

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C (80) (81) <X (82) <Y (83) <SUM (84) (85) (86) (87) (88) (89) SUSPENDED

OS Tink Continued

Store it in the proper location using indirect addressing

27-31

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) 081 (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) +080 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) -280 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 28 IR STOREI IADDR AC 003

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C (80) (81) 003 <X (82) <Y (83) <SUM (84) (85) (86) (87) (88) (89) SUSPENDED

OS Tink Continued

Enqueue process A

27-32

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) 081 (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) +080 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) -280 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 29 IR ENQUEUE IPID AC 003

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C (80) (81) 003 <X (82) <Y (83) <SUM (84) (85) (86) (87) (88) (89) SUSPENDED

OS Tink Continued

slide-9
SLIDE 9

9 ¡

Prepare to restart suspended process

27-33

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) 081 (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) +080 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) +080 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 14 IR JUMP RESUME AC 003

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C (80) (81) 003 <X (82) <Y (83) <SUM (84) (85) (86) (87) (88) (89) SUSPENDED

OS Tink Continued

Restore pre-interrupt AC

27-34

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) 081 (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) +080 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) -280 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 15 IR LOAD ACSAV AC 002

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: KERNEL

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C (80) (81) 003 <X (82) <Y (83) <SUM (84) (85) (86) (87) (88) (89) SUSPENDED

OS Tink Continued

Resume suspended process -- C

27-35

(00) -005 (01) DEQUEUE PID (02) LOAD PID (03) JUMPE SCHED (04) LOAD C0 (05) STORE LPID (06) RSTATE PID (07) RTI (08) STORE ACSAV (09) LOAD LPID (10) SUB PID (11) JUMPE SLEEP (12) LOAD PID (13) STORE LPID (14) LOAD ACSAV (15) RTI (16) LOAD ACSAV (17) SSTATE PID (18) ENQUEUE PID (19) JUMP SCHED (20) SSTATE PID (21) JUMP SCHED (22) STORE ACSAV (23) GETINS IPID (24) GETPAGE IPID (25) STORE IADDR (26) LOAD IVAL (27) STOREI IADDR (28) ENQUEUE IPID (29) JUMP RESUME (30) 000 (31) C (32) C (33) 081 (34) 003 (35) A (36) 002 (37) (38) (39) (40) +090 (41) (42) (43) (44) (45) +080 (46) (47) (48) +000 (49) -002 (50) -100 (51) (52) (53) (54) (55) -150 (56) (57) (58) +000 (59) -001 (60) +070 (61) (62) (63) (64) (65) -280 (66) (67) (68) +002 (69) -003 (70) (71) LOAD N <LOOP (72) OUTPUT N (73) ADD ONE (74) STORE N (75) JUMP LOOP (76) HALT (77) (78) (79) (90) (91) INPUT X (92) INPUT Y (93) LOAD X (94) ADD Y (95) STORE SUM (96) OUTPUT SUM (97) HALT (98) (99) PC 005 IR RTI AC 002

  • CPU Registers

Run Queue Main Memory Page table A Page table B Page table C Page frame Page frame Page frame Tinker operating system kernel

A

SCHED: C0: PID: LPID: IADDR: IVAL: IPID: ACSAV:

  • Mode: USER

1 2 CLOCK: ELSE: RESUME: SLEEP: DISMS: > 3 IWAIT: Process A IREADY: Process B > Process C (80) (81) 003 <X (82) <Y (83) <SUM (84) (85) (86) (87) (88) (89)

OS Tink Continued

And now you know

OS Tink Continued 36