核心把程序的列表存放在叫做任務佇列(task_list)的雙向迴圈鍊錶中,鍊錶中每一項都是型別為task_struct、稱為程序描述符的結構。
程序描述符包含了乙個具體程序的所有資訊。
程序描述符中包含的資料能完整地描述乙個正在進行的程式:它開啟的檔案、程序的位址空間、掛起的訊號、程序的狀態,還有其他更多資訊。
linux通過slab分配器分配task_struct結構,這樣能達到物件復用和快取著色的目的。
核心通過乙個唯一的程序標識值pid來標識每個程序。
核心把每個程序的pid存放在它們各自的程序描述符中。
pid的最大值為32768;
pid的最大值很重要,因為它實際上是系統中允許同時存在的程序的最大數量。
程序資料量越小,轉一圈就越快,本來數值大的程序比數值的程序遲執行,但是這樣一來就破壞了這一原則。
在核心中,訪問任務通常需要獲得指向其task_struct的指標。實際上核心中大部分處理程序的**都是直接通過task_struct進行的。
程序狀態
程序描述符中的state域描述了程序的當前狀態,系統中每個程序都必然處於五種狀態中的一種:
程序是可以執行的,它或者正在執行,或者在執行佇列中等待執行。這是程序在使用者空間中執行的唯一可能狀態。
程序正在休眠(也就是說它被阻塞),等到某些條件達成,一旦條件達成,核心就會把程序狀態設定為執行。處於此狀態的程序也會因為接收到訊號而提前被喚醒並隨時準備投入執行。
除了就算是接收到訊號也不會被喚醒或者準備投入執行外,這個狀態與可中斷狀態相同,這個狀態通常在程序必須在等待時不受干擾或者等待事件很快會發生時出現。
被其他程序跟蹤的程序。
程序停止狀態,程序沒有投入執行也不能投入執行。
程序上下文
可執行程式**是程序的重要組成部分。這些**從乙個可執行檔案載入到程序的位址空間執行。
一般程式在使用者空間執行。
但乙個程式呼叫執行了系統呼叫或者觸發了某個異常,它就會陷入核心空間。此時我們成核心「代表程序執行」並處於程序上下文中。
第三章 程序描述與控制
一 程序 二 程序狀態轉換 五狀態模型 七狀態模型 重要的狀態間轉換 三 程序描述 作業系統的控制結構 程序控制結構 程序控制塊 四 程序控制 執行模式 程序的建立 程序切換 toc識別符號 唯一標識 狀態 執行狀態 優先順序 相對於其他程序的優先順序 上下文資訊 程序執行時處理器暫存器中的資料 i...
Linux第三章 程序概念
1.調研程序的排程演算法.有利於長作業和cpu繁忙的作業,不利於短作業和i o繁忙作業 輪轉法 round robin 將所有需要cpu處理的就緒的程序按照fcfs原則排隊。之後cpu會劃分時間片,根據時間片來給佇列上的程式執行,當時間片結束。當前程序中斷,讓出cpu讓下一程序使用。高響應比優先排程...
第三章 程序排程與死鎖
程序排程的功能 程序排程的功能由作業系統的程序程式來完成 按照某種策略和演算法從就緒態程序中為當前空閒的cpu選擇在其上執行的新程序 程序排程的功能是什麼?按照某種策略和演算法從就緒態程序中選擇新程序執行。需要程序排程的時機 1.程序正常或異常結束 程序阻塞 有更高優先順序程序到來,時間片用完時都會...