文章目錄
- 行程管理一覽
- 行程概念
- 描述行程 --- PCB (行程控制塊)
- task_struct中所包含的內容
- 行程識別符號
- 背景關系資訊
- 簡述行程的切換
- 行程優先級
- PRI與NI
- 優先級的資料計算與取值范圍:
- 優先級的修改
行程管理一覽
?接下來的幾篇博客,我將主要按照這個思維導圖的劃分去進行講解,

思維導圖獲取
提取碼: kfiq
· 管理
??在理解什么是行程管理之前,我想我們可以先理解一下什么是管理!
問題:什么是管理?
管理的程序就是:“先描述,再組織” —> 也就是用資訊(資料)去構建資料結構的程序
????????????????????????????????—>管理者就是對資料結構的管理
【所有事情都可以被分類為:決策 和 執行】
管理的三個角色:
??被管理者(學生/軟硬體資源):
??執行者(老師/驅動的角色):執行
??管理者(校長/作業系統OS) :決策
-> 決策的依據是什么?
??資訊(資料)
-> 資訊量太大怎么辦?
??對資訊進行分類,將同類的資料放在一起,
??將這些資訊放在一個結構體中,也就是抽象出一個結構體struct
??即,這個結構體能夠“描述”一個物件的資訊 [面向物件]
結論:
· 被管理者和管理者可以不需要直接溝通,
· 管理者做管理就是對資料進行先描述,再組織,也就是對資料結構進行管理的程序,
??
??
行程概念
問題:什么是行程?我們該如何理解行程?
??把程式加載到記憶體后,它就是行程了, (方便理解,這里的定義是不準確的)
#換句話說,就是一個程式運行起來后,它就變成了行程,
前面我們提到了,管理就是要先描述再組織,那么對行程的管理該如何描述和組織呢?
??其實在將程式的代碼和資料加載到記憶體后,OS還會為其創建對應的資料結構-----行程控制塊(process control block).
描述行程 — PCB (行程控制塊)
??行程控制塊(PCB)本質就是一個結構體,它里面存盤著行程的相關資訊,(所以它可以用來描述行程)
??在Linux中,行程控制塊的具體名稱是:task_struct
??
task_struct中所包含的內容
- 識別符號:pid,它是一個行程的唯一識別符號,每個行程都不一樣
- 狀態:包含行程狀態、退出碼、退出信號等
- 優先級:相對于其他行程的優先順序 (我會在下面細說)
- 背景關系資訊:一個行程在執行的時候,處理器的暫存器中的資料,
- 時間片:描述一個行程能執行多久
- 程式計數器:程式中即將被執行的下一條指令的地址
- I/O狀態資訊:包括顯式I/O請求、分配給行程的I/O設備和被行程使用的檔案串列等
- 記賬資訊:包括處理器時間總和、使用的時鐘數總和、時間限制、記賬號等
?
?我接下來介紹一些task_struct中經常涉及的一些內容:
行程識別符號
?· 行程ID ? —> getpid()
?· 父行程ID —> getppid()
?在代碼中,我們可以呼叫上面的兩個介面去獲取當前行程的pid和ppid,
包含于<sys/types.h>和<unistd.h>
pid_t getpid(void);
pit_t getppid(void);
背景關系資訊
??在行程切換的時候,當前行程若沒執行結束,則會將CPU中的執行的資訊保存到背景關系資料中,
??保存背景關系資訊的目的是為了下一次使用時能恢復到之前的狀態,
?
簡述行程的切換
??在程式被加載到記憶體中時,作業系統會為其創建對應的task_struct結構體用于描述行程的資訊,
??由于CPU內部只有一套暫存器,計算時需要將記憶體資料移動到CPU內的暫存器中,形成當前的背景關系資料,
??當行程被切換時:(被切換的情況:①時間片到了 ②來了更高優先級的行程,當前行程被搶占了)
??因此在行程切換前,會先保存背景關系資訊,以便于下一次恢復背景關系,
?
?
行程優先級
問題:行程優先級是什么?
??CPU資源分配的先后順序,就是指行程的優先級,
問題:為什么要有優先級?
??存在優先級后,可以把行程運行到指定的CPU上,這樣一來,就可以把不重要的行程安排到某個CPU上,可以極大地改善系統的整體性能,
問題:怎么設定/修改優先級?
??利用PRI和NI調整優先級,
?
PRI與NI
??在弄清楚PRI和NI之前,我們先來熟悉一條Linux中的指令!
ps -l //查看當前行程的優先級方面的資訊(主要用來看優先級的) //ps -al 也可以

通過這個圖,我們的聚焦點主要集中在我圈出的這幾列,
UID:執行者的身份
PID:代表該行程的pid(識別符號)
PPID:代表該行程的ppid,也就是父行程的pid
PRI: 代表這個行程可被執行的優先級,PRI的值越小代表越早被執行,
NI: 代表這個行程的nice值,
?
優先級的資料計算與取值范圍:
PRI: ps -l所顯示的PRI值是經過計算后的新PRI, PRI (new) = PRI (old) + nice;這里的PRI是new
NI: nice值的取值范圍是 [-20, 19] 共40個級別,nice值是行程優先級的修正資料,
?
優先級的修改
??優先級的修改都是通過對nice值進行修改,從而間接的修改PRI的值的!
這里我們要介紹一下top命令了!
top #top命令相當于Windows中的任務管理器
概括修改優先級的流程:
????????????進入top后 —> 按 “r” —> 輸入行程PID —> 再輸入nice值即可修改 ?? //沒權限要sudo一下
注意:每次輸入nice值后,都是對基礎 PRI 值進行修改的!!!
??????即:每次調整都是從起始值PRI ± nice 值的
我舉個🌰,
?? 基礎值PRI = 20,那么輸入nice = 10后, PRI —》30
??在此 基礎上再輸入 nice = -10后, ?????? PRI —》-10
??解釋:第二次也是在基礎值PRI = 20的基礎上進行±nice的!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/403963.html
標籤:其他
上一篇:資料結構——第一章——1.1
