project 2 roadmap++. handling bbbbbbbbbbbbbb….. review process a main() { for(1000) print “a”...

30
Project 2 Roadmap++

Post on 19-Dec-2015

226 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Project 2 Roadmap++

Page 2: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

HANDLING BBBBBBBBBBBBBB…..

Review

Process Amain() { for(1000) Print “A” Kill(B, SIGUSR1)}

Process Bfunction handler() { Print “HANDLING”}

main() { Signal(&handler, SIGUSR1) for(;;) Print “B”}

AABBAABBAABB………

1000 A’S

Output

Page 3: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

System Calls

Sys_Signal: register a signal handler

Sys_Kill: send a signal

Sys_RegDeliver: initialize signal handling for a process

Sys_WaitNoPID: wait for any child process to die

Sys_ReturnSignal: indicate completion of signal handler

Page 4: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

System Calls

Sys_Signal: register a signal handler

Sys_Kill: send a signal

Sys_RegDeliver: initialize signal handling for a process

Sys_WaitNoPID: wait for any child process to die

Sys_ReturnSignal: indicate completion of signal handler

Referenced in user code

Page 5: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

HANDLING BBBBBBBBBBBBBB…..

Review

Process Amain() { for(1000) Print “A” Kill(B, SIGUSR1)}

Process Bfunction handler() { Print “HANDLING”}

main() { Signal(&handler, SIGUSR1) for(;;) Print “B”}

AABBAABBAABB………

1000 A’S

Output

Page 6: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

System Calls

Sys_Signal: register a signal handler

Sys_Kill: send a signal

Sys_RegDeliver: initialize signal handling for a process

Sys_WaitNoPID: wait for any child process to die

Sys_ReturnSignal: indicate completion of signal handler

Page 7: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

System Calls

Sys_Signal: register a signal handler

Sys_Kill: send a signal

Sys_RegDeliver: initialize signal handling for a process

Sys_WaitNoPID: wait for any child process to die

Sys_ReturnSignal: indicate completion of signal handler

Executed by stub code once a signal has been handled

Page 8: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Helper Functions

Send_Signal Set_Handler Check_Pending_Signal Setup_Frame Complete_Handler

Page 9: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Review

Process Amain() { for(1000) Print “A” Kill(B, SIGUSR1)}

Process Bfunction handler() { Print “HANDLING”}

main() { Signal(&handler, SIGUSR1) for(;;) Print “B”}

Page 10: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Overview

A B

Page 11: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Overview

A B

RegDeliver RegDeliverSignal(SIGCHILD) Signal(SIGCHILD, ….)

Page 12: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Overview

libc

A B

RegDeliver RegDeliverSignal(SIGCHILD) Signal(SIGCHILD, ….)

Page 13: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Overview

flag pointer

SIGCHILD

SIGUSR1

SIGUSR2

KILL

libc

A BRegDeliver RegDeliver

Signal(SIGCHILD) Signal(SIGCHILD, ….) Set_handler

Page 14: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Overview

flag pointer

SIGCHILD

SIGUSR1

SIGUSR2

KILL

libc

A BRegDeliver RegDeliver

Signal(SIGCHILD) Signal(SIGCHILD, ….) Set_handler

Page 15: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Overview

flag pointer

SIGCHILD

SIGUSR1

SIGUSR2

KILL

libc

A BRegDeliver RegDeliver

Signal(SIGCHILD) Signal(SIGCHILD, ….)

entry point

mainKill Signal

Send_signal

Page 16: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Overview

flag pointer

SIGCHILD

SIGUSR1 X

SIGUSR2

KILL

libc

A BRegDeliver RegDeliver

Signal(SIGCHILD) Signal(SIGCHILD, ….)

entry point

mainKill Signal

Send_signal

Page 17: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Overview

flag pointer

SIGCHILD

SIGUSR1 X

SIGUSR2

KILL

libc

A BRegDeliver RegDeliver

Signal(SIGCHILD) Signal(SIGCHILD, ….)

entry point

mainKill Signal

Page 18: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Helper Functions

Send_Signal Set_Handler Check_Pending_Signal Setup_Frame Complete_Handler

Look at Scheduler

Page 19: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Scheduler: w/o signals

A

scheduler

B

B

src/geekos/lowlevel.asm

Page 20: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Scheduler: w/ signals

A

B’s user level sig.

hand.

B

scheduler

B

Page 21: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Scheduler: w/ signals

A

B’s user level sig.

hand.

B

scheduler

B

Check Pending Signal

Page 22: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Check Pending Signal

Boolean outputDetermines whether to proceed with

signal handling

Page 23: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Scheduler: w/ signals

A

B’s user level sig.

hand.

B

scheduler

B

Check Pending Signal true

false

Page 24: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Scheduler: w/ signals

A

B’s user level sig.

hand.

B

scheduler

B

Check Pending Signal

Setup Frame

Page 25: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Setup Frame

Sets up state to enable user-level handling code execution

Page 26: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Scheduler: w/ signals

A

B’s user level sig.

hand.

B

scheduler

B

Check Pending Signal

Setup Frame

Page 27: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Setup Frame

Sets up state to enable user-level handling code execution

How are function called?

Page 28: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Function Calls

Parameter of return address is stored on the stack so when finishedPop off stackContinue execution

Setup FrameEnables user stack to keep:

Interrupt_State VectorReturn address

Page 29: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Storing Return Address

Want complete_handler to execute once user level handling done.

HackPlace address of return_signal as return

address on stackNow return_signal stred as function

Page 30: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print

Scheduler: w/ signals

A

B’s user level sig.

hand.

B

scheduler

B

Check Pending Signal

Setup Frame Complete

Handler