project 2 roadmap++. handling bbbbbbbbbbbbbb….. review process a main() { for(1000) print “a”...
Post on 19-Dec-2015
222 views
TRANSCRIPT
![Page 1: Project 2 Roadmap++. HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/1.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/2.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/3.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/4.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/5.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/7.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/8.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/9.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/10.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/12.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/14.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/15.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/16.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/17.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/18.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/19.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/20.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/21.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/22.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/23.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/24.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/25.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/26.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/27.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/28.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/29.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d375503460f94a0f907/html5/thumbnails/30.jpg)
Scheduler: w/ signals
A
B’s user level sig.
hand.
B
scheduler
B
Check Pending Signal
Setup Frame Complete
Handler