溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux 進程調度簡單理解

發布時間:2020-06-14 08:26:17 來源:網絡 閱讀:641 作者:昵稱真難改 欄目:系統運維

一、Linux進程的R、S、D、T、Z、X狀態

RTASK_RUNNING:進程處于ready狀態,及可執行狀態

STASK_INTERRUPTIBLE):可以中斷的睡眠狀態

DTASK_UNINTERRUPTIBLE:不可中斷的睡眠狀態,很少見

TTASK_STOPPED or TASK_TRACED):暫?;蛘吒櫊顟B,收到sigstopt信號變為暫停狀態,收到sigcont變為running狀態;gdb調試及跟蹤狀態

ZTASK_DEAD-TASK_ZOMBIE):退出狀態,進程稱為僵尸進程(子進程退出)

XTASK_DEAD-EXIT_DEAD):退出狀態,進程即將被銷毀(一個進程cancel另一個進程)

在平時工作中其中RS最常見,當進程接受消息隊列,sleep等,進程處于阻塞狀態(S)。

一般狀態變化,R-S,S-R

通過ps -l查看進程狀態 s(state)那列

Linux 進程調度簡單理解

二、Linux提供兩種優先級:普通進程優先級、實時進程優先級

1、? 實時進程優先級

實時優先級采用兩種調度算法:SCHED_FIFO(先入先出調度算法)、SCHED_RR(時間片輪詢調度算法)

實時優先級調度特點:只有靜態優先級,不會調整優先級,默認優先級0-99MAX_RT_PRIO=100)。nice值只影響100~100+40的進程優先級.

總結:對FIFO,只有當進程執行完畢才能輪到其他進程執行

RR,一旦時間片消耗完,則將該進程放到隊列末端,其他進程才能執行。

2、? 普通進程優先級

普通優先級采用的調度算法:SCHED_NORMALCFS調度器實現)

普通優先級調度特點:根據動態優先級調度,動態優先級由靜態優先級調整而來。靜態優先級由內核隱藏,但是提供接口:由nice值計算得到:

static_prio = MAX_RT_PRIO(默認100+ nice +20

nice取值范圍是 -20~19,所以靜態優先級100~139

并且進程時間片也是有靜態優先級得到:

If(?static_prio?<?120?)
???????????time?=?(?140?–?static_prio?)*20
else?if(?static_prio?>=?120)
???????????time?=?(?140?–static_prio?)*5

動態優先級主要考慮的兩個因素:靜態優先級和進程平均運行時間bouns值,計算公式:

dynamic_prio = max( 100,min(static_prio-bouns+5 ,139)

bouns值的大小0-10,當大于5表示優先級提高,當小于5時優先級變低;Linux內核會根據進程的平均運行時間動態的改變進程的動態優先級。

一般來說,交互式進程的平均運行時間比較長,因此Linux內核會獎勵從而增加bouns的值。

總結:實時進程只考慮靜態優先級;普通進程一般不需要太在意進程優先級,因為內核會動態調整進程的優先級。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女