linux内核杂记(10)-进程调度(5)
一、用戶搶占
1、用戶搶占時機
從系統(tǒng)調(diào)用返回用戶空間
從中斷處理程序返回用戶空間
2、檢查標志
內(nèi)核返回后檢查need_resched標志
如果被設(shè)置了,內(nèi)核會選擇一個更適合的進程投入進行
3、返回路徑與代碼
在entry.S匯編代碼中,實現(xiàn)了 返回路徑,并且還實現(xiàn)了內(nèi)核入口部分程序、內(nèi)核退出部分的相關(guān)代碼。
二、內(nèi)核搶占
1、LINUX完整支持內(nèi)核搶占
調(diào)度程序可在一個內(nèi)核級任務執(zhí)行時打斷它,并重新調(diào)度,否則內(nèi)核要執(zhí)行完成或遇到阻塞為止,在2.6版的內(nèi)核中引入了搶占能力。
2、搶占時機
(1)沒持有鎖,內(nèi)核就可以進行搶占,鎖是非搶占區(qū)域的標志
(2)為了完成鎖機制了,引入了preempt_cunt計數(shù)器,在進程的thread_info中。
(3)preempt_cunt加1表示加鎖,減1表示釋放鎖。為0時表示沒有持有鎖,此時,如果need_resche設(shè)置,則內(nèi)核程序可被安全搶占
(4)內(nèi)核搶占發(fā)生在以下時候:
中斷處理程序正在執(zhí)行,且返回內(nèi)核空間之前
內(nèi)核代碼 再一次具有可搶占性的時候
如果內(nèi)核任務顯式調(diào)用 schedule()
如果內(nèi)核任務阻塞,導致調(diào)用 schedule()
總結(jié)
以上是生活随笔為你收集整理的linux内核杂记(10)-进程调度(5)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java容器解析——HashMap
- 下一篇: Gson详解(二)