小雪~ says
12 years ago
context switch happens at process A switching to process B, and only when processes are in sleep mode
latest #6
小雪~ says
12 years ago
我一直以為user mode switch to kernel mode也有context switch, 以前又讀錯書了我Orz...
小雪~ says
12 years ago
所以基本上只要整個process進入sleep mode就有可能被context switch?
Purine says
12 years ago
人是這樣沒錯ㄛ...
立即下載
Thinker says
12 years ago
這一句話感覺怪怪的,可能要看前後文才能正確解讀。context switch 發生在 kernel 需要切換到另一個 task 時,也就是另一組 registers 。有幾種情況會發生,當某一個 process 用完 time slice 之後,就會找下一個相同或更高優先權的 process 並切換過去。或者是目前在 run 的 process,因為 I/O 或其它原因而被 block,這時也會 switch 到其它
Thinker says
12 years ago
而在 UNIX 的設計,一般而言,kernel 是和 userspace 使用相同的 address space,只是當 CPU 進入 userspace 後,有較低的權限,無法讀 kernel 使用的部分的記憶體。因此,當 CPU 從 userspace 回到 kernel 時,是不需要 context switch。
Thinker says
12 years ago
你可以想成,所有 process 都在 address space 裡保留一段固定的 range 給 kernel 用。因此 kernel 的 data 和 code 會所有的 process 裡,都處在相同位址。因此,就算切換到不同的 process, kernel 也可能正常運作,不用特別處理。而從 userspace 回到 kernel 時,也不用 context switch,因為在同一個 space。
back to top