57 lines
2.3 KiB
Text
57 lines
2.3 KiB
Text
XV6 as most OSs is monolithic, preemptive and time-sharing multiplexing.
|
|
|
|
Isolation comes from the CPU which provides machine, supervisor and user modes.
|
|
|
|
- machine: just for the boot time
|
|
- supervisor: each time the kernel is active
|
|
including when calling a syscall (with `ecall` in RISC-V)
|
|
- user: for all user code
|
|
|
|
Minix, L4 (seL4) and QNX operating systems have been mentioned as micro-kernel OSs.
|
|
|
|
Memory layout of a process:
|
|
[text; data; user stack; heap (large) ; trapframe; trampoline]
|
|
0 ↑------------------------------------------------------------↑ 2^38-1
|
|
|
|
text: instructions
|
|
data: global variables
|
|
heap: explicitly allocated memory
|
|
trapframe: saved process registers when switching in and out of the kernel
|
|
trampoline (4 KiB): code to transition in and out of the kernel
|
|
|
|
trapframe & trampoline: explained in chapter 4
|
|
|
|
kernel `proc` structure contains:
|
|
|
|
- (kstack) kernel stack used when the process calls for syscalls
|
|
- (pagetable) pointers to physical memory pages actually used by the process,
|
|
provided to the hardware for translation (virtual @ ←→ physical @)
|
|
- (state) UNUSED, USED, SLEEPING, RUNNABLE, RUNNING or ZOMBIE
|
|
- (trapframe) saved process registers when switching in and out of the kernel
|
|
- (pid) process identification number
|
|
- (ofile) list of opened files
|
|
- (name) process name
|
|
- (cwd) current directory
|
|
- (context) kernel registers used to enter the process
|
|
- (sz) size of process's memory
|
|
- (parent) pointer to the process's parent proc structure
|
|
- (xstate) exit status (given to its parent when it "waits" for it)
|
|
- (killed) non-zero when the process has been killed
|
|
- (chan) TODO: not currently explained
|
|
- (lock) TODO: not currently explained
|
|
|
|
|
|
RISC-V instructions
|
|
|
|
- ecall: raise hardware privilege level
|
|
program counter change to a kernel-defined entry point which then switches to the
|
|
process's kernel stack and executes kernel instructions for this syscall
|
|
once done, the kernel calls sret
|
|
- sret: lower hardware privilege level
|
|
|
|
A process is the abstraction of memory and CPU for a running program,
|
|
giving it the illusion of being alone on the hardware.
|
|
A process is:
|
|
|
|
- an address space to give a running program the illusion of owning the entire memory
|
|
- a thread to give a running program the illusion of having a CPU for himself
|