Linux 程序管理子系統

2022-09-02 19:54:10 字數 2428 閱讀 7563

一。程序管理子系統

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命令在姓名目錄下建...