程序的活動是通過在cpu上執行一系列程式和對資料進行相應操作的完成來體現的,因此程式和資料是組成程序的實體,為了反映程序的動態特徵,需要乙個資料結構來描述程序本身的特性狀態,排程資訊以及對資源的占有等等。這個資料結構我們稱之為程序控制塊(pcb)
pcb的內容
pcb主要包含下面幾部分的內容:
程序的描述資訊,比如程序的名稱,識別符號,
處理機的狀態資訊,當程式中斷是保留此時的資訊,以便cpu返回時能從斷點執行
程序排程資訊,比如阻塞原因,狀態,優先順序等等
pcb的作用:
程序的組成可以用下圖來表示:
而程序之間可以通過pcb中的鏈結指標找到下乙個程序,他們彼此之間組成乙個鏈佇列:
程序控制主要表現在對乙個程序進行建立,撤銷以及程序狀態之間進行轉換控制。這些操作都是通過前面的原語操作執行的
程序的建立與撤銷
程序允許建立和控制另乙個程序,前者稱為父程序,後者稱為子程序,子程序又可以建立孫程序,如此下去進而形成乙個程序的家族樹,這樣子程序就可以從父程序那裡繼承所有的資源,當子程序撤銷時,便將從父程序處獲得的所有資源歸還,此外,撤銷父程序,則必須撤銷所有的子程序。(撤銷的過程實際上就是對這棵家族樹進行後序遍歷的過程)
在應用中建立乙個子程序的過程如下:
申請空白的pcb
初始化程序描述資訊
為程序分配資源以及位址空間
將其插入就緒佇列中
當程序完成後,系統會**占用的資源,撤銷程序,而引發程序撤銷的情況有:程序正常結束或者異常結束,外界的干預(比如我們在任務管理器中強制停止某個程序的執行)。
程序的阻塞和喚醒
. 前面我們說過,程序的阻塞是程序的一種主動的行為,但是沒有解釋為什麼,現在我們解釋一下,程序執行過程中常常會因為等待i/o或者某個事件的出現而進入阻塞狀態。當處於阻塞狀態的程序所等待的操作完成或者事件出現時,程序就會從阻塞狀態喚醒而進入就緒狀態。因此程序的阻塞是程序自身的一種主動行為,是程序自己通過阻塞原語自己阻塞。
阻塞原語如下:
停止程序執行
程序插入阻塞佇列
重新排程
喚醒原語如下:
注意,程序的阻塞和喚醒原語是一對功能相反的原語,若某個程序呼叫了阻塞原語,則必有乙個與之對應的喚醒原語。
挑戰408 作業系統(10) 訊號量與PV操作
處理同步和互斥的問題,除了用到之前的軟體和硬體的方法,用的最多的還是訊號量機制。訊號量機制是通過定義表示共享資源使用的特殊變數以及兩個標準的原語 p操作和v操作 來實現同步和互斥的。根據訊號量的資料型別不同,我們將訊號量分為整型訊號量和記錄型訊號量。整型訊號量 整型訊號量是一種被定義為用來表示資源數...
挑戰408 作業系統(2) 使用者態與核心態
作業系統的核心是指在計算機硬體上擴充的第一層軟體。通常是一些與硬體緊密相關的模組。核心的實現是通過原語實現的,而原語又是由原子操作構成的。原語是由若干指令構成的,用於完成一定功能的過程。而原子操作是指在這過程中的行為 要麼全做,要麼不做,不可中斷 以保證操作的完整性 作業系統主要包含以下功能 在說這...
挑戰408 作業系統(17) 程式的執行過程
進入了儲存管理的部分了。也是作業系統中的一大難題。這部分接在組成原理複習完儲存器部分來複習,會對儲存器和儲存系統會有個更深入的感觸。記憶體管理的物件是記憶體,記憶體管理的方案有很多,從簡單的單一連續分配到頁式端式儲存方案,各有優點。為作業系統選擇儲存方案,依賴於很多因素,特別是硬體的支援。下面先來看...