程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 內核線程優先級設置的方法介紹

內核線程優先級設置的方法介紹

編輯:C語言基礎知識

  個人理解,內核級線程和進程是一樣的,前者與POSIX線程(pthread)有很大的區別。因此,內核的進程調度策略和系統調用也適用於內核級線程。

  調度策略有三種:

    1.SCHED_NORMAL 非實時調度策略,默認情況下是100~139,由nice值決定;

    2.SCHED_FIFO實時調度策略,先到先服務。一旦占用cpu則一直運行。一直運行直到有更高優先級任務到達或自己放棄

    3.SCHED_RR實時調度策略,時間片輪轉。當進程的時間片用完,系統將重新分配時間片,並置於就緒隊列尾。同樣可以被高優先級搶占。

  兩種實時優先級范圍在0至MAX_RT_PRIO-1之間,默認為0到99。

  相關的系統調用(來自於LKD,不同內核可能有所不同):

nice()   設置進程的nice值 sched_setscheduler() 設置進程的調度策略 sched_getscheduler() 獲取進程的調度策略 sched_setparam() 設置進程的實時優先級 sched_getparam() 獲取進程的實時優先級 sched_get_priority_max() 獲取實時優先級的最大值 sched_get_priority_min() 獲取實時優先級的最小值 sched_rr_get_interval()
獲取進程的時間片值 sched_setaffinity() 設置進程的處理器的親和力 sched_getaffinity() 獲取進程的處理器的親和力 sched_yield() 暫時讓出處理器

  設置時需要用到struct sched_param這個結構。

  以下為我寫的內核線程中的部分代碼:
代碼如下:

struct sched_param param;
    param.sched_priority = 99;
    sched_setscheduler(current, SCHED_FIFO, ¶m)//出錯時返回-1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved