[理工] OS kernel thread, user thread

看板Grad-ProbAsk作者 (todo se andarà)時間7年前 (2016/12/11 00:29), 編輯推噓5(5029)
留言34則, 4人參與, 最新討論串1/1
想請教各位 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

12/11 00:47, , 1F
user thread因為不需要透過kernel所以執行速度快,缺點是
12/11 00:47, 1F

12/11 00:47, , 2F
發出block之後kernel會把整個process一起block(因為kerne
12/11 00:47, 2F

12/11 00:47, , 3F
l只看得到process),kernel thread相反。 同理若是OS要"
12/11 00:47, 3F

12/11 00:47, , 4F
平均"分配資源也會因為視角不同而分配不同。那個model就
12/11 00:47, 4F

12/11 00:47, , 5F
是在解釋user thread(1-1)跟kernel thread(1-多、多-多)
12/11 00:47, 5F

12/11 00:47, , 6F
如果有打錯請其他人幫補充QQ
12/11 00:47, 6F

12/11 10:47, , 7F
前面我都懂 但不懂就是那個model mapping是什麼意思XD 意
12/11 10:47, 7F

12/11 10:47, , 8F
思是在多-1中 全部thread都是user thread? (那那個kernel
12/11 10:47, 8F

12/11 10:47, , 9F
thread是什麼@@) 一樣在多對多中 全部都是kernel thread
12/11 10:47, 9F

12/11 10:47, , 10F
? (那畫的user thread是...?)
12/11 10:47, 10F

12/11 13:24, , 11F
我發現我打錯了,趕快更正一下。user thread是多對一,然
12/11 13:24, 11F

12/11 13:24, , 12F
後kernel thread是1-1或是多對多。
12/11 13:24, 12F

12/11 13:28, , 13F
多對一你就想象成一個kernel thread管理整個process,1-1
12/11 13:28, 13F

12/11 13:28, , 14F
就是一個kernel thread管理一個user thread,但是非常浪
12/11 13:28, 14F

12/11 13:28, , 15F
費系統資源,才會衍生出多對多。如果你有上課的話你應該
12/11 13:28, 15F

12/11 13:28, , 16F
記得老師那時舉得例子(政府給每個家庭配一個僕人or給每
12/11 13:28, 16F

12/11 13:28, , 17F
個人配一個僕人的例子)
12/11 13:28, 17F

12/11 14:23, , 18F
這樣大概懂惹 跟我腦補的差不多 那我不懂的就是 1 to 1
12/11 14:23, 18F

12/11 14:23, , 19F
是怎麼在建立一個user thread時就mapping 一個kernel thr
12/11 14:23, 19F

12/11 14:23, , 20F
ead給他 不是說好OS不會知道user thread的存在嗎?
12/11 14:23, 20F

12/11 22:38, , 21F
就是因為os不知道 所以是由kernel thread管理
12/11 22:38, 21F

12/11 22:53, , 22F
OS 不知道user thread 的存在 因此當user thread 被
12/11 22:53, 22F

12/11 22:53, , 23F
從 thread library 取出的同時( in kernel space)
12/11 22:53, 23F

12/11 22:54, , 24F
就會同時產生 1 kernel thread 去類似標註它在哪的感
12/11 22:54, 24F

12/11 22:55, , 25F
覺, 只不過因為1-1 太浪費, 且從User library 取出
12/11 22:55, 25F

12/11 22:56, , 26F
                thread
12/11 22:56, 26F

12/11 22:56, , 27F
=.= thread library
12/11 22:56, 27F

12/11 22:57, , 28F
時通常會取出多個user thread ,這時kernel thread產
12/11 22:57, 28F

12/11 22:57, , 29F
生 就為 many to 1
12/11 22:57, 29F

12/12 10:50, , 30F
喔喔 意思是 thread pool會放在kernel space 產生user sp
12/12 10:50, 30F

12/12 10:50, , 31F
ace其實也要去kernel space拿的意思? 然後一次拿多個use
12/12 10:50, 31F

12/12 10:50, , 32F
r thread看model來決定會同時創幾個kernel thread來管理
12/12 10:50, 32F

12/12 10:50, , 33F
這樣嗎@@?
12/12 10:50, 33F

12/12 14:23, , 34F
我是這麼想的啦@@~
12/12 14:23, 34F
文章代碼(AID): #1OJ2rg8J (Grad-ProbAsk)