看板 Grad-ProbAsk 關於我們 聯絡資訊
想請教各位 user thread 跟 kernel thread有什麼關係嗎? 或是我應該問 kernel thread到底是什麼? 定義上來說 user thread是由process自行管理 kernel不知道他的存在 kernel thread是由OS來管理 然後有1 to 1, many to 1, many to many的model 洪逸課本、原文書都只有寫到這樣 然後就是OS會依據process內的kernel thread來分配CPU time 但剛剛讀一讀突然就覺得 恩....怎麼感覺怪怪的 因為寫過pthread程式 大概可以「意會」user thread是什麼東西 那kernel thread是什麼? 什麼叫做由OS來建立管理? 他跟user thread的關聯是什麼? (有關聯才有所謂的mapping model吧 不然mapping的「意義」是?) 我的想法是: 是不是在建立process時 同時就會建立一個kernel thread (可以看成一個main thread的概念) 然後OS是透過這個kernel thread來管理process 排程~更改PCB~給資源...等等 以及跟硬體層的溝通 像是若process呼叫system call時是用這個kernel thread(main thread)來執行 以上都是我腦補出來的 因為網路上實在找不到完整的說法 如果這樣想是對的 那我又有一個問題 在many to 1的model下 每個process的kernel thread就固定是創建process時所建立的 因此所有user thread都mapping到他 在many to many之下 也可以透過事先定義好建立什麼process要建幾個kernel thread 這兩個還可以理解 但1 to 1呢? 洪逸上課是說建立user thread時就會建立一個kernel thread 但重點是....OS不就是不知道user thread的存在嗎? 那他怎麼在建立user thread時就建立一個kernel thread..... 而且剛剛查了一下才發現好像call API就可以建立kernel thread 所以感覺我好像誤解kernel thread的功用... 有點與user thread是獨立不相干的感覺 那..... 那個model是在mapping什麼呢?mapping的意義是? kernel thread到底是什麼? 還請知道的大大幫忙QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.28.110 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1481387370.A.213.html
newpuma: user thread因為不需要透過kernel所以執行速度快,缺點是 12/11 00:47
newpuma: 發出block之後kernel會把整個process一起block(因為kerne 12/11 00:47
newpuma: l只看得到process),kernel thread相反。 同理若是OS要" 12/11 00:47
newpuma: 平均"分配資源也會因為視角不同而分配不同。那個model就 12/11 00:47
newpuma: 是在解釋user thread(1-1)跟kernel thread(1-多、多-多) 12/11 00:47
newpuma: 如果有打錯請其他人幫補充QQ 12/11 00:47
aa06697: 前面我都懂 但不懂就是那個model mapping是什麼意思XD 意 12/11 10:47
aa06697: 思是在多-1中 全部thread都是user thread? (那那個kernel 12/11 10:47
aa06697: thread是什麼@@) 一樣在多對多中 全部都是kernel thread 12/11 10:47
aa06697: ? (那畫的user thread是...?) 12/11 10:47
newpuma: 我發現我打錯了,趕快更正一下。user thread是多對一,然 12/11 13:24
newpuma: 後kernel thread是1-1或是多對多。 12/11 13:24
newpuma: 多對一你就想象成一個kernel thread管理整個process,1-1 12/11 13:28
newpuma: 就是一個kernel thread管理一個user thread,但是非常浪 12/11 13:28
newpuma: 費系統資源,才會衍生出多對多。如果你有上課的話你應該 12/11 13:28
newpuma: 記得老師那時舉得例子(政府給每個家庭配一個僕人or給每 12/11 13:28
newpuma: 個人配一個僕人的例子) 12/11 13:28
aa06697: 這樣大概懂惹 跟我腦補的差不多 那我不懂的就是 1 to 1 12/11 14:23
aa06697: 是怎麼在建立一個user thread時就mapping 一個kernel thr 12/11 14:23
aa06697: ead給他 不是說好OS不會知道user thread的存在嗎? 12/11 14:23
TWkobe: 就是因為os不知道 所以是由kernel thread管理 12/11 22:38
ken52011219: OS 不知道user thread 的存在 因此當user thread 被 12/11 22:53
ken52011219: 從 thread library 取出的同時( in kernel space) 12/11 22:53
ken52011219: 就會同時產生 1 kernel thread 去類似標註它在哪的感 12/11 22:54
ken52011219: 覺, 只不過因為1-1 太浪費, 且從User library 取出 12/11 22:55
ken52011219:                 thread 12/11 22:56
ken52011219: =.= thread library 12/11 22:56
ken52011219: 時通常會取出多個user thread ,這時kernel thread產 12/11 22:57
ken52011219: 生 就為 many to 1 12/11 22:57
aa06697: 喔喔 意思是 thread pool會放在kernel space 產生user sp 12/12 10:50
aa06697: ace其實也要去kernel space拿的意思? 然後一次拿多個use 12/12 10:50
aa06697: r thread看model來決定會同時創幾個kernel thread來管理 12/12 10:50
aa06697: 這樣嗎@@? 12/12 10:50
ken52011219: 我是這麼想的啦@@~ 12/12 14:23