Linux 核心對程序的管理

2021-10-23 22:37:04 字數 1862 閱讀 8889

程序

描述程序西南西的結構或者進行程序管理和控制 --pcb

程序實體部分 – 有序指令 資料

系統管理程序(可執行程式**+各種資源及處理器狀態等等)是通過pcb(程序描述符)來記錄這些資料,從而管理程序。

作業系統管理pcb是通過雙向迴圈鍊錶管理,鍊錶中每一項都是task_struct,該結構在32位機器中大小約17k

1.執行程式時,要生成乙個程序,先申請pcb,然後引導程式部分

2.乙個程序結束時,先釋放實體部分,再釋放pcb

殭屍程序:程序實體釋放與其pcb釋放有時間差(pcb釋放需要一定條件),程序實體被釋放,但是pcb沒有釋放(作業系統看乙個程序是否存在是看pcb是否存在)

程序的狀態

邏輯上:

就緒:所有資源準備完畢,只等cpu空閒排程執行

執行:cpu正在執行程序中的指令

阻塞:等待某些事件的發生

時間片具體參考時間片輪轉法

核心中的狀態

併發並行

並行需要依賴硬體支援(雙核,四核,八核)

程式到程序的載入過程:簡單分頁(將記憶體劃分成大小相等的固定的區塊,一般4k)

磁碟的頁幀和程式的頁通常大小相同

作業系統為每乙個程序維護了乙個頁表:頁表中記錄程式的所有的頁號載入到記憶體上後,對應的頁幀標號

printf列印的位址是邏輯位址

交換分割槽:在磁碟上開闢的一塊空間,是對記憶體的乙個補充

乙個程序執行時,並不需要程序的所有頁都時刻在記憶體上。程序當前不需要的頁就會被儲存在交換分割槽上。(記憶體不足時)

1.在記憶體上駐留更多程序

2.可以執行比記憶體大的程序

作業系統的發展:

1.序列處理

2.批處理

3.多道程式設計

4.分時系統 實時系統

輸出緩衝區問題

此段**執行結果為:睡眠五秒,然後列印helloworld

因為第乙個printf無 \n ,所以先不會輸出

printf是將內容寫入到輸入緩衝區,緩衝區重新整理到介面上需要一定條件:

1.遇到「\n」

2.主動重新整理緩衝區 fflush(stdout);

3.程序結束(exit或者_exit)_exit不會重新整理緩衝區中的資料而直接結束程序

4.緩衝區滿

緩衝區意義:

提高程式執行效率

主函式引數:int main(int argc,char ar** , char envp[ ]);

argc:傳給主函式的引數個數(預設只有乙個)

ar**:傳遞給主函式的引數列表,字元指標陣列,傳遞的都是字串

envp:傳遞的環境變數列表

參考:linux核心設計與實現(第三版)

linux系統程式設計

Linux核心 程序管理

注 對linux系統來說,執行緒只是一種特殊的程序,linux不區分執行緒和程序 程序 處於執行期的程式 包含的資源 一 程序描述符及任務結構 程序存放在任務佇列 task list 的雙向迴圈鍊錶中 鍊錶中每一項型別均為task struct 程序描述符,也可表示為task t 該結構定義在inc...

Linux核心 程序管理

1 程序生命週期 某個程序通過系統呼叫fork,建立乙個用於執行程式的程序。生成此程序的程序稱為父程序,被生成的程序稱為子程序。子程序通過複製父程序的資料得以建立 父程序執行系統呼叫wait,等待子程序結束 子程序通過系統呼叫exec將程式讀取到記憶體並開始執行 當程式執行完畢後,子程序通過系統呼叫...

Linux核心之程序管理

linux核心之程序管理 支援執行緒的計算機系統裡面,程序作為資源分配的基本單位而存在,執行緒作為排程的基本單位而存在.執行緒僅擁有必不可少的一些資源,如 一組暫存器,堆疊資訊等等和其他執行緒共享同乙個程序的所有資源.所以,在同乙個程序的執行緒切換時不需要大量的儲存和恢復工作,同時由於共享同乙個儲存...