程序的描述與控制
程序的定義:
一·程序是程式的一次執行。 二.程序是一個程式及其資料在處理機上順序執行時所發生的活動。 三.程序是具有獨立功能的程式在一個數據結合上執行的過程,它是系統進行資源分配和排程的一個獨立單位。
為了使程式併發執行,並且可以對併發執行的程式加以描述和控制,人們引入了程序的概念。 為了使參與併發執行的每個程式都能獨立執行,在作業系統中必須為之分配一個專門的資料結構,稱為程序控制塊(PCB)。系統利用PCB來描述程序的基本情況和活動過程,進而控制和管理程序。
程序實體由程式段,相關資料和PCB三部分構成。
在引入了程序實體的概念後,可以將傳統的os定義為:“程序是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位。”
程序的特徵:
動態性 併發性 獨立性 非同步性
程序三種基本狀態
由於多個程序在併發執行時共享系統資源,致使他們在執行過程中呈現間斷性的執行規律,所以程序在生命週期內可能具有不同狀態。一般而言,每個程序至少應處於以下三種基本狀態:
就緒(Ready)狀態 指程序已處於準備好執行的狀態,即程序已分配到除CPU以外的所有必要資源後,只要再獲得CPU就可以立即執行。如果有多個就緒狀態的程序。 通常按照一定的策略排成一個佇列,稱該佇列為就緒佇列 執行(Running)狀態 指程序已經獲得CPU,其程式正在執行的狀態。在單處理機系統中,只有一個程序處於執行狀態,而多處理機系統則有多個程序處於執行狀態。 阻塞(Block)狀態
建立狀態和終止狀態
建立狀態 申請PCB,填寫用於控制和管理程序的資訊—>分配必須資源—>把程序轉入就緒狀態並插入就緒佇列。 引入建立狀態是為了保證程序排程必須在建立工作完成後進行,以確保對程序控制塊操作的完整性。
終止狀態 兩個步驟: 首先,是等待作業系統進行善後處理,最後將其PCB清零,並將PCB空間返還系統。
掛起操作和程序狀態的轉換
當掛起操作作用與某個程序時,該程序被掛起,意味著此時該程序處於靜止狀態。如果程序在執行,那麼將暫停執行。
引入掛起的原因 終端使用者的需要 父程序的請求 負荷調節的需要 作業系統的需要 引入掛起原語操作後三個程序的狀態轉換 引入掛起原語Suspend和啟用原語Active後,程序可能發生以下幾種狀態轉換:
活動就緒—>靜止就緒 當程序處於未被掛起的就緒狀態時,被稱為活動就緒狀態,標示為Readya,此時程序接受排程。當用Suspend將程序掛起時,此程序變為靜止就緒狀態,表示為Readys,此時程序不再被排程執行。 活動阻塞—>靜止阻塞 當程序未被掛起時的阻塞狀態稱為活動阻塞狀態,表示為Blockda,當用SUspend掛起時,便成為了靜止阻塞,表示為Blockeds.處於該狀態的程序中在其所期待的事件出現後,它將從靜止阻塞變為靜止就緒狀態Readys狀態。 靜止就緒—>活動就緒 處於Readys狀態的程序若用Active啟用後,就變成了活動就緒Readya狀態。 靜止阻塞—>活動阻塞 處於Blockeds狀態的用Active啟用後,變成Blockeda狀態。
程序控制塊PCB的作用
為了便於系統描述和管理程序的執行,在os的核心為每個程序專門定義了一個數據結構——程序控制塊PCB(Process Control Block) 程序控制塊的作用是使一個在多道程式環境下不能獨立執行的程式成為一個能獨立執行的基本單位,一個能與其他程序併發執行的程序。
1.**作為獨立執行基本單位的標誌。**PCB 成為程序存在於系統的唯一標誌 2.能實現間斷性執行方式。 3.提供程序管理所需要的資訊。 4.提供程序排程所需要的資訊。 5.實現與其他程序的同步與通訊。
程序控制
引起建立程序的事件 使用者登入 作業排程 提供服務 應用請求 程序建立步驟: 申請空白PCB,為新程序申請獲得唯一的數字識別符號,並從PCB集合中索取一個空白PCB。 為新程序分配其執行所需要的資源,包括物理和邏輯資源,如記憶體、檔案、I/O裝置和CPU時間等。 初始化程序控制塊 如果程序就緒佇列能夠接納新的程序,便將新程序插入就緒佇列。 程序的終止 引起程序終止的事件: 正常結束,表示程序的任務已經完成,準備推出執行。 異常結束,指程序在執行時發生了某種異常事件,使程式無法繼續執行。 越界錯:程式訪問儲存區超出該程序區域 保護措:程序訪問一個不允許訪問的資源,或者以不當的方式訪問。 非法指令:程式試圖去執行不存在的指令 特權指令錯:使用者程序試圖去執行一條只允許OS執行的指令 執行超時:程序執行事件超過了制定的最大值 等待超時:程序等待的時間超過了規定最大值 算術運算錯:程序試圖執行一個被禁止的運算。例如被0除。 I/O故障:I/O過程中發生錯誤。 外界干預 操作員或者作業系統干預 父程序請求 父程序終止 程序終止的過程 根據被終止程序的識別符號,從PCB集合中檢索出該程序的PCB,從中讀取該程序的狀態 若被終止程序正在處於執行狀態,則立即終止執行,並置排程標誌為真,用於指示該程序被終止後應重新進行排程。 如有該程序有子程序,則所有子程序也終止 將被終止程序PCB從佇列移除,等待其他程式來蒐集資訊。
程序的阻塞與喚醒
引起程序阻塞和喚醒的事件: 向系統請求共享資源失敗 請求共享資源,但是沒有足夠資源分配,所以程序變為阻塞狀態。 等待某種操作的完成 例如一個程序的完成必須要有另一個程序的支援,即另個程序完成後這個程序才能執行,這時候程序變為阻塞狀態。 新資料尚未到達 等待新任務到達 程序阻塞過程 如果程序執行,則立刻停止,把PCB插入阻塞佇列。
程序喚醒過程 當阻塞程序所期待的事件發生,則呼叫喚醒原語wakeup,從阻塞佇列移出,將PCB狀態由阻塞變為就緒,然後把PCB插入就緒佇列中。
程序的掛起與啟用
程序的掛起 檢查程序狀態,如果活動就緒改為靜止就緒;如果活動阻塞改為靜止阻塞。為了方便使用者或父程序考察該程序的執行情況,把程序PCB複製到制定記憶體區域;最後若被掛起的程序正在執行,則扎ungxiangdiaodu程式重新排程。
程序的啟用狀態 利用啟用原語Active,把程序從外存調入記憶體,檢查其狀態,若靜止就緒改為活動就緒;若靜止阻塞改為活動阻塞。