3.1 linux程序:
每個程序通過乙個t a s k _ s t r u c t資料結構表示。ta s k向量是乙個指向系統中所有
t a s k _ s t r u c t資料結構的指標陣列。這意味著系統中最大程序受限於ta s k向量的大小,預設情況
下它有5 1 2項。當程序被建立時,從系統記憶體中分配乙個新的t a s k _ s t r u c t並把它加入到t a s k向量
中。為了便於查詢,當前執行的程序由c u r r e n t指標來指向。
l i n u x還支援實時程序。
t a s k _ s t r u c t資料結構很大很複雜,但它的字段可以被分成幾個功能區:
• 狀態:執行/等待/停止/死亡
• 排程資訊:排程器需要這些資訊以公平地決定系統中哪個程序最值得執行
• 標識:系統中每個程序有乙個程序標識。程序標識不是t a s k向量的索引,它只是乙個簡
單的數。每個程序還有使用者和組標識,這些被用來控制本程序對系統中檔案和裝置的訪
問。• 程序間通訊:l i n u x支援經典的unixtm ipc機制如訊號、管道和訊號燈,以及system v
i p c機制如共享記憶體、訊號燈和訊息佇列。
• 時間和時鐘:核心記住程序的建立時間以及在它生存期內消耗的c p u時間
• 檔案系統:程序在需要的時候可以開啟和關閉檔案;程序的t a s k _ s t r u c t包含每個開啟的
檔案的描述符指標以及兩個v f s索引節點的指標。每個v f s索引節點唯一地描述檔案系
統中的乙個檔案或目錄,並提供乙個底層檔案系統的統一介面。令p w d—列印工作目錄(print working directory)
• 虛擬記憶體:大多數程序有一些虛擬記憶體(核心執行緒和守護程序沒有),並且l i n u x必須跟蹤
虛擬記憶體如何對映到系統物理記憶體。
• 處理器相關上下文:乙個程序可以被認為是系統當前狀態的總和。每當乙個程序執行時,
它要使用處理器的暫存器、棧等等,這是程序的上下文( c o n t e x t )。並且,每當乙個程序
被暫停時,所有的c p u相關上下文必須被儲存在該程序的t a s k _ s t r u c t中。當程序被排程
器重新啟動時其上下文將從這裡恢復。
第 3 章 程序
程序是現代分時作業系統的工作單元。程序是資源分配的基本單位。執行緒是程式執行的最小單位。程序是執行的程式,這是一種非正式的說法。程序不只是程式 也稱文字段 程序還包括資料 程式計數器的值和處理器暫存器的內容等 程序堆疊 包括臨時資料,如函式引數 返回位址和區域性變數 和資料段 包括全域性變數 和堆。...
第3章程序管理(二)
3.3程序建立 unix的程序建立很特別。許多其它的作業系統都提供了產生程序的機制,首先在新的位址空間裡建立程序,讀入可執行檔案,最後開始執行。unix採用與眾不同的實現方式,把上述步驟分解到兩個單獨的函式中去執行 fork 和exec 首先,fork 通過拷貝當前程序建立乙個子程序。子程序與父程序...
第4章 程序 I
4.1.1 程序例項控制代碼 載入到程序位址空間的每乙個可執行檔案或者dll檔案都被賦予了乙個獨一無二的例項控制代碼。可執行檔案的例項被昂做 w winmain函式的第乙個引數hinstanceexe傳入。在需要載入資源的函式呼叫中,一般都要提供此控制代碼的值。例如,為了從可執行檔案的映像中能夠載入...