※ 引述《wandog (fight!!)》之銘言:
: ※ [本文轉錄自 Linux 看板 #1RGrij4S ]
: 作者: wandog (fight!!) 看板: Linux
: 標題: [問題] 關於kernel的多執行緒?
: 時間: Mon Jul 9 20:55:07 2018
: 我看到的一些資料 不太確定我的認知正不正確 請各位指教
: 基本上 kernel space中 可以當作一個process一直在無限loop
: 並且裡面有多個threads在執行
: 當user space的process執行kill這個指令
: 則會藉由c lib呼叫syscall 並將要執行的vector function所對應
: 的代號放入特定暫存器後 執行軟體中斷 切換到kernel mode
: 而在kernel mode中 vector function讀取站存器存放的代號
: 呼叫對應的函式做事
: 我不太懂的是 如果kernel space是一個多執行緒的process 他是另外產生一個
: thread來呼叫對應的函式做事 還是原本就在跑的thread自己會呼叫函式做事?
: 以及這個呼叫的過程是怎麼實作的?
: 另外想接著問一個schedular的問題 他的運作方式是是在timer的中斷產生後
: 直接在vetor function中就執行context switch的動作嗎? 抑或是跟上一段
: 一樣 vector function是讓kernel process去執行context switch?
排程器主要靠TIMER來完成 另外TASK也能夠主動釋放出控制權
像是呼叫synchronized or usleep之類的通常會觸發排程
kernel內的printk也常常會觸發RESCHEDUER
系統設計基本上就那幾種 (timer, workqueue , scheduler...etc)
JOB被放在CPU RQ的資料結構中
CPU在執行TASK前已經算好該TASK能夠執行多少時間
所謂算好是指排程器給你的時間
當PROGRAM使用排程禁止便可以獨佔整個CPU, 只剩下中斷可以搶佔
這一般在USER SPACE是不許可的
有興趣可以GOOGLE loda CFS 相關的字眼
網路資源其實頗多的
現在對岸的資料對於LINUX subsystem的分析很多
蜗窝科技上有很多文章可以參考