linux内核杂记(12)-进程调度(7)
與調(diào)度相關的系統(tǒng)調(diào)用
1、進程的nice值
nice() 設置進程的nice值
2、進程的調(diào)度策略
sched_setscheduler()設置進程的調(diào)度策略
sched_getscheduler()獲得進程的調(diào)度策略
核心在于讀取和設置進程的調(diào)度策略和實時優(yōu)先級(進程task_struct的policy和rt_priority)。
3、進程的實時優(yōu)先級
sched_setparam() 設置進程的實時優(yōu)先級
sched_getparam() 獲得進程的實時優(yōu)先級
sched_param結構體的 rt_priority
sched_get_priority_max()獲得實時優(yōu)先級的最大值
sched_set_priority_min()設置實時優(yōu)先級的最小值
sched_rr_get_interval() 獲得進程的時間片值
4、處理器綁定
親和力試圖使進程盡量在同一處理器上運行,也允許強制指定處理器
親和力保存在task_struct的cpu_allowed位掩碼標志,每一位對應一個處理器
sched_setaffinity()設置進程處理器的親和力
sched_getaffinity()獲得進程處理器的親和力
內(nèi)核提供的強制處理器綁定的方法很簡單:
1)當處理進行每一次創(chuàng)建時,它繼承了其父進程的相關掩碼。
2)由于父進程運行在指定處理器上,子進程也運行在相應處理器上
3)當處理器綁定關系改變時,內(nèi)核會采用“移植線程”把任務 推到合法處理器上
4)加載平衡器只把任務拉到允許的處理器上。
5)進程只運行在指定處理器上,由該進程描述符的 cpus_allowed域設置。
5、放棄處理器時間
sched_yield()暫時放出處理器
1)將進程從活動隊伍中移到過期隊伍中實現(xiàn),由此產(chǎn)生的效果不僅搶占了該進程,并將其放入優(yōu)先級隊列的最后面,還將其放放過期隊列中-這樣保證 在一段時間 它不會再被執(zhí)行了。實時進程不能過期 ,只被移動至其優(yōu)先級隊列最后
2)應用程序甚至內(nèi)核代碼在調(diào)用sched_yield()前,應仔細考慮是否真的希望放棄處理器時間 。
3)內(nèi)核代碼為了方便,可直接調(diào)用yield(),先確定給定進程確實處于可執(zhí)行狀態(tài),然后再調(diào)用sched_yield()。
用戶空間的應用程序則直接使用sched_yield()系統(tǒng)調(diào)用。
總結
以上是生活随笔為你收集整理的linux内核杂记(12)-进程调度(7)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis 一对多查询 按结果嵌套处
- 下一篇: linux内核杂记(13)-系统调用(1