程序:
描述程序西南西的結構或者進行程序管理和控制 --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核心之程序管理 支援執行緒的計算機系統裡面,程序作為資源分配的基本單位而存在,執行緒作為排程的基本單位而存在.執行緒僅擁有必不可少的一些資源,如 一組暫存器,堆疊資訊等等和其他執行緒共享同乙個程序的所有資源.所以,在同乙個程序的執行緒切換時不需要大量的儲存和恢復工作,同時由於共享同乙個儲存...