一。程序管理子系統
1.程序要素
(1). 程式與程序
程式:存放在磁碟上的一系列**和資料的可執行映像,是乙個靜止的實體
程序:是乙個執行中的程式,他是乙個動態的實體。
(2). 程序4要素
1.有一段程式供其執行。這段程式不一定是某個程序所專有,可以與其他程序共用。
2.有程序專用的核心空間堆疊。
3.在核心中有乙個task_struct資料結構,即通常所說的「程序控制塊」。有了這個資料結構,程序才能成為核心排程的乙個基本單位接受核心的排程。
(3). linux程序狀態
1. task_running
程序正在被cpu執行,或者已經準備就緒,隨時可以執行。當乙個程序剛被建立時,就處於task_running狀態。
2. task_interruptible
處於等待中的程序,待等待條件為真時被喚醒,也可以被訊號或者中斷喚醒。
3. task_uninterruptible
處於等待中的程序,待資源有效時喚醒,但不可以由其它程序通過訊號(signal)或中斷喚醒
4. task_killable 、
linux2.6.25新引入的程序睡眠狀態,原理類似於task_uninterruptible,但是可以被致命訊號(sigkill)喚醒。
5. task_traced
正處於被除錯狀態的程序
6. task_dead
程序退出時(呼叫do_exit),所處的狀態
(4). 程序描述結構
在linux核心**中,執行緒、程序都使用結構task_struct(sched.h)來表示,
它包含了大量描述程序/執行緒的資訊,其中比較重要的有:
*pid_t pid; //程序號
*long state; //程序狀態
*int prio; //程序優先順序
2.程序排程
(1). 排程策略
*sched_normal(sched_other):普通的分時程序
*sched_fifo :先入先出的實時程序
*sched_rr:時間片輪轉的實時程序
*sched_batch:批處理程序
*sched_idle: 只在系統空閒時才能夠被排程執行的程序
(2). 排程時機
主動排程:
在核心中直接呼叫schedule()。
當程序需要等待資源等而暫時停止執行時,會把自己的狀態置於掛起(睡眠),並主動請求排程,讓出cpu。
範例:1.current->state = task_interruptible;
2.schedule();
被動排程:
被動式排程又名:搶占式排程。分為:使用者態搶占(linux2.4、linux2.6)和核心態搶占(linux2.6)
1.使用者搶占發生在:
#從系統呼叫返回使用者空間。
#從中斷處理程式返回使用者空間。
核心即將返回使用者空間的時候,如果need_resched標誌被設定,會導致schedule()被呼叫,即發生使用者搶占。
#當某個程序耗盡它的時間片時,會設定need_resched標誌v當乙個優先順序更高的程序進入可執行狀態的時候,也會設定need_resched標誌。
2.核心搶占可能發生在:
#中斷處理程式完成,返回核心空間之前。
#當核心**再一次具有可搶占性的時候,如解鎖及使能軟中斷
3.在支援核心搶占的系統中,某些特例下是不允許搶占的:
#核心正在執行中斷處理。
#核心正在進行中斷上下文的bottom half(中斷的底半部)處理。硬體中斷返回前會執行軟中斷,此時仍然處於中斷上下文中。
#程序正持有spinlock自旋鎖、writelock/readlock讀寫鎖等,當持有這些鎖時,不應該被搶占,否則由於搶占將可能導致其他程序長期得不到鎖,
而讓系統處於死鎖狀態。
#核心正在執行排程程式scheduler。搶占的原因就是為了進行新的排程,沒有理由將排程程式搶占掉再執行排程程式。
4.搶占計數
為保證linux核心在以上情況下不會被搶占,搶占式核心使用了乙個變數preempt_count,稱為核心搶占計數。
這一變數被設定在程序的thread_info結構中。每當核心要進入以上幾種狀態時,變數preempt_count就加1,
指示核心不允許搶占。每當核心從以上幾種狀態退出時,變數preempt_count就減1,同時進行可搶占的判斷與排程。
(3). 排程步驟
1). 清理當前執行中的程序;
2). 選擇下乙個要執行的程序;
3). 設定新程序的執行環境;
4). 程序上下文切換。
國嵌攻略 107 Linux程序管理子系統
程序與程式 1.程式 存放在磁碟上的一系列 和資料的可執行映像,是乙個靜止的實體。2.程序 是乙個執行中的程式,它是乙個動態的實體。程序四要素 1.有一段程式供其執行。這段程式不一定是某個程序所專有,可以與其他程序共用。2.有程序專用的核心空間堆疊。3.在核心中有乙個task struct資料結構,...
Linux系統程序管理
1.ps ps 是 linux 中最基礎的瀏覽系統中的程序的命令。能列出系統中執行的程序,包括程序號 命令 cpu使用量 記憶體使用量等。2.pstree linux中,每乙個程序都是由其父程序建立的。此命令以視覺化方式顯示程序,通過顯示程序的樹狀圖來展示程序間關係。3.top top 是乙個更加有...
Linux系統的程序管理
1.使用at命令實現在當前時間之後的2分鐘,在你的姓名目錄下建立空檔案test.txt 先執行at now 2minutes代表兩分鐘後執行,回車後輸入要執行的語句,ctrl d退出。沒有安裝at軟體包的執行sudo apt get install at進行安裝。2.使用batch命令在姓名目錄下建...