作業系統 kernel thread 疑問

看板Programming作者 (真是瘋了)時間2年前 (2022/05/17 16:53), 編輯推噓2(2011)
留言13則, 2人參與, 2年前最新討論串1/1
最近在念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

05/17 22:18, 2年前 , 1F
kernel不認識user-thread,它只知道有哪
05/17 22:18, 1F

05/17 22:19, 2年前 , 2F
些kernel thread,然後控制彼此間的切換
05/17 22:19, 2F

05/17 22:19, 2年前 , 3F
而user-thread是由user library產生及控制
05/17 22:19, 3F

05/17 22:20, 2年前 , 4F
所以是在這個process所擁有的CPU時間裡切
05/17 22:20, 4F

05/17 22:20, 2年前 , 5F
換不同的user-thread執行
05/17 22:20, 5F

05/17 22:21, 2年前 , 6F
如果是user-thread sleep的話,那是看
05/17 22:21, 6F

05/17 22:22, 2年前 , 7F
library怎麼implement
05/17 22:22, 7F

05/17 22:22, 2年前 , 8F
如果是這個process對應的kernel-thread
05/17 22:22, 8F

05/17 22:22, 2年前 , 9F
sleep的話,那就是整個process都不會執行
05/17 22:22, 9F

05/17 22:23, 2年前 , 10F
即所有user-thread都暫停
05/17 22:23, 10F

05/17 22:23, 2年前 , 11F
另外,文中有錯字,是kernel不是kernal
05/17 22:23, 11F

05/27 17:25, 2年前 , 12F
你的推理有錢途,但你問其它同事意
05/27 17:25, 12F

05/27 17:25, 2年前 , 13F
見好了
05/27 17:25, 13F
文章代碼(AID): #1YWsA6yf (Programming)
文章代碼(AID): #1YWsA6yf (Programming)