1. 程式人生 > >程序控制塊、程序上下文

程序控制塊、程序上下文

一. 程序控制塊
    為了描述和控制程序的執行,系統為每個程序定義了一個資料結構——程序控制塊(PCB)。  它是程序重要的組成部分,它記錄了作業系統所需的、用於描述程序的當前狀態和控制程序的全部資訊。  作業系統就是根據程序的PCB來感知程序的存在,並依此對程序進行管理和控制。 PCB是程序存在的唯一標識。     PCB主要包括如下4方面的資訊     1. 程序標識資訊
    程序標識資訊用於唯一地標識一個程序,一個程序通常有兩種識別符號:內部標誌符&外部識別符號。         - 內部標誌符: 由作業系統賦予每個程序的一個唯一的數字識別符號,它通常為一個程序的序號,方便了系統使用。         - 外部識別符號: 由建立者產生,是由字母和數字組成的字串,為使用者程序訪問該程序提供方便。
    為了描述程序間的家族關係,通常還設有父程序標識和子程序標識,以表示程序間的家族關係。     此外,還設有使用者名稱或使用者標識號表示該程序屬於哪個使用者。    2. 處理機狀態
處理機狀態資訊主要由處理機的各個暫存器內的資訊組成。 程序執行時的許多資訊均存放在處理機的各種暫存器中。其中程式狀態字(PSW)是相當重要的,處理機根據程式狀態暫存器中的PSW來控制程式的執行。         3. 程序排程資訊    PCB中還存放著一些與程序排程有關的資訊。    
        - 程序狀態。 標識程序的當前狀態(就緒、執行、阻塞),作為程序排程的依據。         - 程序優先順序。 表示程序獲得處理機的優先程度。
        - 為程序排程演算法提供依據的其他資訊。例如,程序等待時間、程序已經獲得處理器的總時間和程序佔用記憶體的時間等。
        - 事件。 是指程序由某一狀態轉變為另一狀態所等待發生的事件。(比如等待I/O釋放)    4. 程序控制資訊
     - 程式和資料地址。 是指組成程序的程式和資料所在記憶體或外存中的首地址,以便在排程該程序時能從其PCB中找到相應的程式和資料。         - 程序同步和通訊機制。 指實現程序同步和通訊時所採取的機制,如訊息佇列指標和訊號量等,他們可以全部或部分存在PCB中。
        - 資源清單。 列出了程序所需的全部資源 及 已經分配給該程序的資源,但不包括CPU.
        - 連結指標。它給出了處於同一佇列中的下一個PCB的首地址。
  總結:     對於多道程式環境,系統中通常存在多個PCB,這些PCB有的已經被佔用,有的處於空閒狀態。為了方便對這些PCB的查詢,通常採用連結串列或索引將PCB管理起來。 無論採用哪種管理方式,均是將具有相同狀態程序的PCB組成一個佇列
,或是根據程序進入該狀態的原因將其組成一個佇列,設定相應的隊首指標,這樣就可以非常方便的訪問各個程序的PCB。      總之,系統因 PCB 而感知程序的存在,並通過 PCB 來對程序進行排程、控制、分配資源。 若程序執行結束,則通過釋放 PCB 來釋放程序所佔有的各種資源。     一. 程序上下文與上下文切換     1. 程序上下文     程序是在作業系統支援下執行的,程序執行時需要作業系統為其設定相應的執行環境,如系統堆疊、地址映像暫存器、程式計數器、程式狀態字、開啟檔案表以及相關通用暫存器等。 所以,把程序的物理實體與支援程序執行的物理環境合稱為程序上下文。                             - 上文: 把已執行的程序指令和資料相關暫存器與堆疊中的內容稱為上文。         - 正文: 把正在執行的程序指令和資料相關暫存器與堆疊中的內容稱為正文。         - 下文: 把待執行的程序指令和資料相關暫存器與堆疊中的內容稱為下文。
Unix System Ⅴ 的程序上下文組成:由使用者級上下文、暫存器上下文、系統級上下文組成。                                          - 使用者級上下文:由程序的使用者程式段部分編譯而成的使用者正文段、使用者資料和使用者棧等組成。    - 暫存器上下文:由程式計數器(PC)、處理機狀態字(PS)、棧指標和通用暫存器組成。 PC給出CPU將要執行的下一條指令的虛地址;PS給出機器與該程序相關聯時的硬體狀態;棧指標指向下一項的當前地址;通用暫存器則用於不同執行模式之間的引數傳遞。         - 系統級上下文又分為靜態部分和動態部分。 這裡的動態部分是指進入和退出不同的上下文層次時,系統為各層上下文中相關聯的暫存器值所儲存和恢復的記錄。 系統級上下文靜態部分包括PCB結構、將程序虛地址空間對映到物理空間的有關表格、核心棧等。 這裡,核心棧主要用來裝載程序中所使用的系統呼叫的呼叫序列。           系統級上下文的動態部分是與暫存器上下文相關聯的。         程序上下文的層次概念主要體現在動態部分中,即系統級上下文的動態部分可看成是由一些數量變化的層次組成,其變化規則符合許先進後出的堆疊方式。     2. 程序上下文切換     程序上下文切換髮生在不同的程序之間而不是同一個程序內。     進城上下文切換分成三個步驟:     (1) 把被切換程序的相關資訊儲存到有關儲存區,例如該程序的PCB中。     (2) 作業系統中的排程和資源分配程式執行,選取新的程序。     (3) 將被選中程序的原來儲存的正文部分從有關儲存區中取出,並送至暫存器與堆疊中,啟用被選中程序執行。 總結: 程序上下文切換的切換過程涉及由誰來保護和獲取程序的正文的問題,也就是如何使暫存器和堆疊等中的資料流入流出 PCB 的儲存區。 另外,程序上下文切換還涉及系統排程和分配程式,這些都比較耗費CPU時間。