看板 Programming 關於我們 聯絡資訊
最近在念OS的kernal thread跟user thread時遇到一個問題是, 假設我有一個最簡單的情境是只有一個cpu在跑多個thread,當我現在有兩個user thread在執行, 分別是userA跟userB,我對kernal thread有兩個猜想,不知道實際上kernal thread到底負責什麼 假設1 cpu的context(就是register跟program counter那些)應該會是不停的在userA跟userB兩個thread之間不停做context switch對嗎?這時候kernal thread是閒置在旁邊,等system call發生,cpu的context才會切換到kernal thread的context來執行kernal mode的相關指令嗎 ? 假設2 cpu的context其實是在兩個user thread跟一個kernal thread之間不停切換, kernal thread負責管理userA跟userB,thread塞到CPU裡執行順序是 : kernal thread執行,叫userA起來跑 > A跑一段時間該輪到B的時候會觸發中斷把kernal叫回來取代userA > kernal thread去叫userB開始跑 > userB跑一段時間又回到kernal > kernal叫userA起來跑 並且kernal thread也負責執行userA跟userB的system call 因為老師上課有提到當kernal thread-user-thread是一對多時,當userA去call sleep時,會整個process卡住,我一直想不太到原因,假如kernal thread在執行sleep,cpu不能先讓給userA或userB跑嗎?好像只有假設2比較合理 ----- Sent from JPTT on my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.134.241 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1652777606.A.F29.html
gusion: kernel不認識user-thread,它只知道有哪 123.252.23.7 05/17 22:18
gusion: 些kernel thread,然後控制彼此間的切換 123.252.23.7 05/17 22:19
gusion: 而user-thread是由user library產生及控制 123.252.23.7 05/17 22:19
gusion: 所以是在這個process所擁有的CPU時間裡切 123.252.23.7 05/17 22:20
gusion: 換不同的user-thread執行 123.252.23.7 05/17 22:20
gusion: 如果是user-thread sleep的話,那是看 123.252.23.7 05/17 22:21
gusion: library怎麼implement 123.252.23.7 05/17 22:22
gusion: 如果是這個process對應的kernel-thread 123.252.23.7 05/17 22:22
gusion: sleep的話,那就是整個process都不會執行 123.252.23.7 05/17 22:22
gusion: 即所有user-thread都暫停 123.252.23.7 05/17 22:23
gusion: 另外,文中有錯字,是kernel不是kernal 123.252.23.7 05/17 22:23
sorcerer1973: 你的推理有錢途,但你問其它同事意 101.12.51.140 05/27 17:25
sorcerer1973: 見好了 101.12.51.140 05/27 17:25