Project 2 Roadmap++ Awwww! ugly slides.HANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print “HANDLING” } main() { Signal(&handler, SIGUSR1) for(;;) Print “B” } AABBAABBAABB……… 1000 A’S OutputSystem 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 handlerSystem 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 codeHANDLING BBBBBBBBBBBBBB….. Review Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print “HANDLING” } main() { Signal(&handler, SIGUSR1) for(;;) Print “B” } AABBAABBAABB……… 1000 A’S OutputSystem 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 handlerSystem 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 handledHelper Functions Send_Signal Set_Handler Check_Pending_Signal Setup_Frame Complete_HandlerReview Process A main() { for(1000) Print “A” Kill(B, SIGUSR1) } Process B function handler() { Print “HANDLING” } main() { Signal(&handler, SIGUSR1) for(;;) Print “B” }Overview A BOverview A B RegDeliver RegDeliver Signal(SIGCHILD) Signal(SIGCHILD, ….)Helper Functions Send_Signal Set_Handler Check_Pending_Signal Setup_Frame Complete_Handler Look at SchedulerScheduler: w/o signals A scheduler B B src/geekos/lowlevel.asmScheduler: w/ signals A B’s user level sig. hand. B scheduler BScheduler: w/ signals A B’s user level sig. hand. B scheduler B Check Pending SignalCheck Pending Signal Boolean output Determines whether to proceed with signal handlingScheduler: w/ signals A B’s user level sig. hand. B scheduler B CheckPending Signal true falseScheduler: w/ signals A B’s user level sig. hand. B scheduler B CheckPending Signal Setup FrameSetup Frame Sets up state to enable user-level handling code executionScheduler: w/ signals A B’s user level sig. hand. B scheduler B CheckPending Signal Setup FrameSetup Frame Sets up state to enable user-level handling code execution How are functions called?Function Calls Parameter of return address is stored on the stack so when finished Pop off stack Continue execution Setup Frame Enables user stack to keep: Interrupt_State Vector Return addressStoring Return Address Want complete_handler to execute once user level handling done. Hack (well kind of) Place address of return_signal as return address on stack Now return_signal stored as functionScheduler: w/ signals A B’s user level sig. hand. B scheduler B CheckPending Signal Setup Frame
View Full Document