《LINUX實操:關于Linux進程管理》要點:
本文介紹了LINUX實操:關于Linux進程管理,希望對您有用。如果有疑問,可以聯系我們。
當計算機在引入多道程序時,出現了臨界資源競爭的情況,為了刻畫和辦理程序間的這種制約關系,提出了進程的概念,用以改善資源的利用率,提高程序的吞吐量.
/*全局變量nr_task動態記錄進程數*/
struct task_sturct *task[NR_TASK]={&init_task};
運行狀態進程的PCB同樣用結構體指針數組表現:
current_set[];
struct task_struct{
...
unsigned short uid;
int pid;
...
volatile long state;
long prority;
unsigned long rt_protity;
long counter;
unsigned long policy;
...
struct task_struct *next_task, *prev_task;
struct task_struct *next_run, *prev_run;
struct task+struct *p_opptr, *pptr, *p_cptr, *pysptr, *p_ptr;
...
};
數據成員說明:
uid:用戶標識;
pid:進程標識;
state:進程狀態標識;
1)可運行狀態
2)可中斷阻塞狀態
3)弗成中斷阻塞狀態
4)僵死狀態
5)暫停狀態
6)交換狀態
protity:進程優先級;
counter:優先級計數器,用于進程輪轉調度算法;
policy:進程調度策略;
next_task,prev_task:PCB雙向鏈表指針;
p_opptr ...:指明進程家族間的關系,分別為祖父進程,父進程,子進程,以及新老進程指針;
謙讓度:標識進程之間資源競爭能力,高謙讓度的進程,資源競爭能力弱.負值或0表示最高優先級,對其他進程不謙讓.謙讓度的值一般為:-20~19;當前硬件發展速度非常快,一般我們是不設置進程優先級的,除非有進程失控而瘋狂的搶占資源;
在創建進程時,nice可以為進程設置謙讓值,但進程優先級的值為父進程shell優先級的值與nice所指定的謙讓度相加的成果.即,利用nice指定的值是一個增量,而不是優先級的絕對值.
運行 a.out 法式,并為它指定謙讓度增量為5:
nice -n 5 a.out &
利用renice來變動謙讓度:
renice 謙讓度 PID
法式使用cpu的三種模式:I/O密集型、計算密集型和平衡型.對于I/O密集型法式,響應時間非常重要,響應時間不及時,和可能丟失數據;對于計算密集型法式,cpu的周轉時間非常重要;對于平衡型法式,協調響應和cpu周轉的工作最重要.
進程周轉時間:期待進入內存的時間,在就緒隊列中期待的時間,在 CPU中執行的時間和I/O操作的時間的總和.
FCFS(frist come first serve),也叫FIFO算法,先來先執行.短任務執行可能會異常慢,因為前面的進程可能占用很長時間,造成平均響應時間過長.
目的是改善短程序響應時間長的問題.辦法是周期性的對進程進行切換.該算法最關鍵的時間片的選擇,時間片過長和FIFO算法區別不大,時間片過短,進程頻繁切換的開銷大于執行程序的開銷,系統效率降低.
STCF算法全稱:short time to complete frist.核心是每個進程都有優先級,短進程的優先級要高于長進程的優先級.STCF算法分為:非搶占式和搶占式兩類.非搶占式便是讓已經在cpu上運行的程序執行到結束或者阻塞,然后在就緒隊列中選擇執行時間最短的程序來執行.而搶占式是,每當有新進程進入就緒隊列時,都會去判斷當前運行進程和新進程的執行時間長短,選擇執行時間短的進程運行,及永遠保證cpu運行的是所有進程中執行時間最短的進程.該算法有個非常明顯的缺點:長任務進程無法執行.還有該算法的關鍵點是如何預測進程所需的執行時間.
辦理了STCF算法中長任務進程饑餓的問題,而暴露出的短任務會饑餓的問題,可以通過動態調整優先級來辦理.實際上動態調整優先級(稱為權值)+ 時間片輪轉的策略正是Linux系統進程調度的策略之一的分時調度策略,調度過程如下:
(1) 創建任務指定采用分時調度策略,指定優先級nice的值(-20~19)
(2) 依據nice的值確定在cpu上的執行時間
(3) 如果沒有等待資源,則將該任務加入就緒隊列中
(4) 調度程序遍歷就緒隊列,通過對動態優先級的計算,選擇計算結果最
大的去執行.當時間片用完時或進程主動放棄cpu時,該任務就重新放回就
緒隊列隊尾或等待隊列中.
(5) 調度程序重新依照(4)的方式調度進程.
(6) 當調度程序發現所有就緒隊列中的進程的權值都不大于0時,重復(2)
的過程
現代OS通常都會采用混合調度算法.如:將不同的進程分為幾個大類,每個大類有不同的優先級,不同大類的進程調度取決于大類的優先級,同一個大類的進程調度采用時間片輪轉算法來實現.
本文永遠更新鏈接地址:
《LINUX實操:關于Linux進程管理》是否對您有啟發,歡迎查看更多與《LINUX實操:關于Linux進程管理》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7684.html