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