+ All Categories
Home > Documents > Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A”...

Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A”...

Date post: 19-Dec-2015
Category:
View: 222 times
Download: 3 times
Share this document with a friend
30
Project 2 Roadmap++
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


Recommended