Mechanism of process execution:)
1. Process Execution:-
- OS allocates memory and creates memory image
– Code and data (from home).
– Stack and heap
- Points CPU program counter to the current instruction
– Other registers may store operands, return values, etc.
- After setup, OS is out of the way and the process executes directly on the CPU.
– Code and data (from home).
– Stack and heap
– Other registers may store operands, return values, etc.
2. A simple function call:-
- A function call translates to a jump instruction
- A new stack frame pushed to the
- stack and the stack pointer (SP) updated
- The old value of PC (return value) pushed to the stack and PC updated
- A stack frame contains return value, function arguments, etc.
3. How is a system call different?
- CPU hardware has multiple privilege levels
– One to run user code: user mode
– One to run OS code like system calls: kernel mode
– Some instructions execute only in kernel mode
- The kernel does not trust user stack
– Uses a separate kernel stack when in kernel mode
- The kernel does not trust user-provided addresses to jump to
– The kernel sets up Interrupt Descriptor Table (IDT) at boot time
– IDT has addresses of kernel functions to run for system calls and other events
– One to run user code: user mode
– One to run OS code like system calls: kernel mode
– Some instructions execute only in kernel mode
– Uses a separate kernel stack when in kernel mode
– The kernel sets up Interrupt Descriptor Table (IDT) at boot time
– IDT has addresses of kernel functions to run for system calls and other events
4. Mechanism of system call: trap instruction:-
- When system call must be made, a special trap instruction is run (usually hidden from the user by lib c)
- Trap instruction execution:-
– Move CPU to higher privilege level
– Switch to the kernel stack.
– Save context (old PC, registers) on the kernel stack.
– Look up address in IDT and jump to trap handler function in OS code.
– Move CPU to higher privilege level
– Switch to the kernel stack.
– Save context (old PC, registers) on the kernel stack.
– Look up address in IDT and jump to trap handler function in OS code.
5. More on the trap instruction:-
- Trap instruction is executed on hardware in the following cases:
– System call (program needs OS service).
– Program fault (the program does something illegal, e.g., access the memory it doesn’t have access to).
– Interrupt (the external device needs the attention of OS, e.g., a network packet has arrived on network card)
- Across all cases, the mechanism is: save context on kernel stack and switch to OS address in IDT.
- IDT has many entries: which to use?
– System calls/interrupts store a number in a CPU register before calling trap, to identify which IDT entry to use.
– System call (program needs OS service).
– Program fault (the program does something illegal, e.g., access the memory it doesn’t have access to).
– Interrupt (the external device needs the attention of OS, e.g., a network packet has arrived on network card)
– System calls/interrupts store a number in a CPU register before calling trap, to identify which IDT entry to use.
6. Return from the trap:-
- When OS is done handling syscall or interrupt, it calls a special instruction return-from-trap
– Restore the context of CPU registers from the kernel stack.
– Change CPU privilege from kernel mode to user mode.
– Restore PC and jump to user code after trap.
- User process unaware that it was suspended, resumes execution as always
- Must you always return to the same user process from kernel mode? No
- Before returning to user mode, OS checks if it must switch to another process
– Restore the context of CPU registers from the kernel stack.
– Change CPU privilege from kernel mode to user mode.
– Restore PC and jump to user code after trap.
7. Why switch between processes?:
- Sometimes when OS is in kernel mode, it cannot return back to the same process it left
– The process has exited or must be terminated (e.g., segfault)
– The process has made a blocking system call
- Sometimes, the OS does not want to return back to the same process
– The process has run for too long
– Must timeshare CPU with other processes
- In such cases, OS performs a context switch to switch from one process to another
– The process has exited or must be terminated (e.g., segfault)
– The process has made a blocking system call
– The process has run for too long
– Must timeshare CPU with other processes
8. The OS scheduler:-
- OS scheduler has two parts
– Policy to pick which process to run (next lecture)
– A mechanism to switch to that process (this lecture)
- Non-preemptive (cooperative) schedulers are polite
- Preemptive (non-cooperative) schedulers can switch even when the process is ready to continue
– CPU generates periodic timer interrupt
– After servicing the interrupt, OS checks if the current
the process has run for too long
– Policy to pick which process to run (next lecture)
– A mechanism to switch to that process (this lecture)
– CPU generates periodic timer interrupt
– After servicing the interrupt, OS checks if the current
the process has run for too long
9. Mechanism of context switch:-
- Example: process A has moved from user to kernel mode, OS decides it must switch from A to B.
- Save context (PC, registers, kernel stack pointer) of A on the kernel stack
- Switch SP to kernel stack of B
- Restore context from B’s kernel stack
- Who has saved registers on B’s kernel stack?
– OS did when it switched out B in the past
- Now, CPU is running B in kernel mode, return-from-trap to switch to user mode of B
– OS did when it switched out B in the past
10. A subtlety on saving context:-
- Context (PC and other CPU registers) saved on the kernel stack in two different scenarios
- When going from user mode to kernel mode, user context (e.g., which instruction of user code you stopped at) is saved on kernel stack by the trap instruction
– Restored by return-from-trap
- During a context switch, kernel context (e.g., where you stopped in the OS code) of process A is saved on the kernel stack of A by the context switching code
– Restores kernel context of process B
– Restored by return-from-trap
– Restores kernel context of process B