作業系統 程序(1)什麼是程序和對程序狀態的理解

2021-08-19 21:17:55 字數 2996 閱讀 6432

在作業系統中滿足的大多數需求都涉及程序,在有了應用程式、系統軟體和資源的概念,就需要一種有序的方式管理應用程式的執行,從而能夠讓資源對多個應用程式是可用的、能夠讓所有程式得以執行、充分利用所有裝置。

程序如此重要那麼程序是什麼?首先程序是乙個正在計算機上執行的程式例項,即程式是靜態的而程式是動態的,這麼說有一些抽象,換乙個說法程序是乙個運動的過程這個過程能被交給處理機去執行,也就是乙個應用程式執行的時間段。那麼從作業系統的角度來說程序是什麼呢?首先程序是由資料集、程式**和程序控制塊組成,但作業系統的眼中只有程序控制塊,可以說系統是通過程序控制塊來感知程序是否存在,所以程序控制塊已經成為程序存在於系統的唯一標誌。對於系統來說程序就是乙個名為程序控制塊的資料結構,並且這個資料結構可以被分配排程。

通過程式**段和資料集以及程序控制塊(pcb)組成的實體,具有以下特徵的活動單元:一組指令序列的執行、乙個當前狀態和相關的系統資源。

程序控制塊的資料結構內儲存的資訊,充分到可以中斷乙個程序的執行並且恢復的時侯就像從未中斷過一樣。在乙個程序控制塊內具有以下資訊等:

(1)識別符號:分為內部標誌符和外部標誌符,內部識別符號是方便系統對程序的使用由系統建立,外部識別符號由建立者提供方便使用者對程序的訪問。

(2)狀態:表明程序所處的環境。

(3)優先順序:相對於其他程序的優先順序。

(4)程式計數器:程式中即將被執行的下一條指令的位址。

(5)記憶體指標:包括程式**和程序相關資料的指標,和其他程序共享記憶體塊的指標。

(6)上下文資料(處理器暫存器):程序執行時處理器暫存器中的資料。

(7)i/o狀態資訊:包括顯示i/o請求、分配給程序的i/o裝置、被程序使用的檔案列表。

(8)記賬資訊:包括處理器的時間總和、使用的時鐘數總和、時間限制、記賬號等等。

當進行中斷時,作業系統會把程式計數器和處理器暫存器儲存到程序控制塊中的相應位置,然後程序狀態會改變其他的值,就可以讓其他程序設定為執行態開始執行。也就是說pcb需要儲存處理機狀態資訊、程序標誌資訊、程序控制資訊三大部分。

處理機狀態資訊通過各種暫存器的內容組成包括:通用暫存器、程式計數器、條件碼、程式狀態字、棧指標。

程序控制資訊包括:程序狀態,程序優先順序、等待事件、排程所需資訊、程式和資料的位址、程序同步和通訊機制的各種標記和訊號、資源的所有權和使用情況、儲存管理、鏈結指標。

上面說過對乙個被執行的程式不同的角色看到的結果是不同的,從系統看它會為其建立乙個程序或者任務;從處理器看它在指令序列中根據程式計數器變化的值去執行某種順序的指令;從程式自身看它的執行涉及程式中的一系例指令。這些程序執行的指令序列可以描述單個程序的行為,這樣的序列稱為程序的軌跡。

作業系統的基本職責是控制程序的執行,乙個程序可以處於以下兩種狀態:執行態和未執行態,作業系統必須用某種方式來表示程序使得其可以被追蹤,這就是程序控制塊,未執行的程序必須保持在某種型別的佇列裡並等待執行的時機,程序的生存週期圍繞著建立和終止,當乙個新程序被新增到正在被管理的程序集合中時作業系統需要建立用於管理改程序的資料結構,並在記憶體中分配位址。而程序終止,任何乙個計算機系統都必須為程序提供表示其完成的方法,在不同的系統中結束的方法不相同比如說作業中的halt指令、使用者的行為、中端的關閉或者服務請求等等。

在建立之後如果程序做好了執行準備,對於可執行的程序處理器以一種輪轉方式操作,這時出現了乙個問題佇列裡除了存在可以直接執行的程序,還存在了等待i/o操作結束的程序,所以不能只考慮佇列中最老的程序,而是未被阻塞且在佇列中時間最長的程序。所以需要將非執行狀態分為就緒狀態和阻塞狀態,同時為了解決在成百上千的程序中去遍歷整個阻塞佇列搜尋等待響應該事件的程序,擁有多個佇列是有效的,乙個事件乙個佇列也可以按照優先順序方案分配程序維護多個就緒佇列面,每個優先順序乙個佇列。而為了更好的與建立和終止進行銜接出現了新建態和退出態,還有一直存在的執行態,這個五個狀態組成了程序的無狀態模型。

現在說一下新建態和退出態對於起到的作用:

首先新建態可以分兩步定義新程序

(1)先執行一些必須的輔助工作,將識別符號關聯到程序,分配和建立管理程序所需要的所有表,這一步處於新建態雖然作業系統已經執行了建立程序的必須操作但是沒有執行程序,沒有執行是操縱系統基於效能或者記憶體容量的原因會限制程序的數量,在程序處於新建態時,雖然已經建立了程序表並且將關於該程序的資訊儲存到記憶體的程序表中但是程序本身並沒有進入記憶體。當程序處於新建態時該程序的執行的**還沒有進入記憶體也沒有為這個程式相關的資料分配空間。

(2)當作業系統準備好在接受乙個程序時,程序從新建態轉換到就緒態的時候,程式**和資料被載入到虛擬記憶體中。同時確保活躍的程式不會過多。

同理程序退出系統也分為兩步

(1)當乙個程序被終止的時候,終止使程序轉換到退出態,程序不再被執行但是它的表資訊及其他資訊,因為一些輔助程式和支援程式會提取資訊分析效能和利用率。

(2)一旦提取結束就不需要在保留任何與該程序相關的資料了,該程序從系統中刪除。

在之前五種狀態進行的活動模型,它的建立是因為在之前的i/o活動要比計算速度慢很多,所以記憶體中等待i/o的情況很常見,因此處理器大多時候是空閒的,即使是多道程式處理器仍然處於空閒狀態,記憶體保有大量的等待i/o程序,一種解決辦法是記憶體可以被擴充以適應更多的程序但是更大的記憶體往往導致的是更大的程序而不是更多的程序,另一種解決方案是交換,即將記憶體中被阻塞程序換到磁碟中進行掛起,暫時儲存從記憶體中被驅逐出來的程序佇列,用來交換需要處理機執行的程序使其能夠進入記憶體,這一步交換是乙個i/o操作因為磁碟i/o是系統最快i/o所以交換會提公升效能。

當執行乙個換出操作後一般有倆種選擇(1)接納乙個新程序。(2)調入乙個被掛起的程序,但是一般會傾向於調入乙個被掛起的而不是增加增加負載數,這時要考慮阻塞的特定事件。如果沒有就緒程序則至少乙個阻塞程序被換出為另乙個阻塞程序讓出空間,而且就緒掛起狀態的程序要比處於就緒態的任何程序都要高,調入高優先順序的程序比減少交換亮更重要,一般系統更願意掛起阻塞態,並且如果確定了高優先順序的阻塞態程序會很快就緒,那麼可能選擇掛起乙個低優先順序的就緒態程序。

掛起這個概念與不在記憶體中的程序是等價的,不論是否等待乙個事件都不立即執行,也就是說程序可能是或不是的等待乙個事件,如果是阻塞條件不依賴於掛起條件不會使程序立即執行。可以通過**把這個程序置於掛起狀態,掛起程序的活動都是由最初請求掛起的**請求的,這個**可以是程序自己也可以是父程序或作業系統。除非**顯示的轉換程序否則程序無法從這個狀態中轉移。

作業系統 程序(1)

程序就是執行中的程式,當乙個程式被載入到記憶體之後就變為了程序 程序的出現,讓每個使用者感覺到自己在獨佔cpu,因此可以說程序就是為了在cpu上實現多道程式設計而出現的概念 物理視角 從物理記憶體的分配來看,每個程序占用一片記憶體空間,從這點上看,程序其實就是記憶體的某片空間,由於在任意時刻,乙個 ...

作業系統 1 程序

1.程序 資料集程式在乙個資料集執行的過程。組成 程式 資料集棧,程序控制塊 pcb 是程序存在的唯一標識,os根據pcb的屬性控制程序。2.上下文 程序執行時cpu的暫存器資料集合 現場 包括了使用者可見暫存器和控制 狀態暫存器。3.分派器 即程序排程程式 排程時發生上下文切換 儲存舊程序的上下文...

作業系統 程序1

程式本身不是程序。程式只是被動實體,如儲存在磁碟上包含一系列指令的檔案 而程序是活動實體,具有乙個程式計數器用於表示下個執行命令和一組相關資源。當乙個可執行檔案被載入到記憶體,程式就變成了程序。引入程序的目的是 為了實現程式的併發執行,並且可以對併發程式進行控制 程序具有以下狀態 新的 正在被建立 ...