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