1. 程式人生 > >作業系統-程序概念與程序控制塊

作業系統-程序概念與程序控制塊

程序

在學習作業系統時,對於程序我們經常能看到如下幾個定義:

  • 一個正在執行的程式。
  • 一個正在計算機上執行的程式例項。
  • 能分配給處理器並由處理器執行的實體
  • 由一組執行的指令,一個當前狀態和一組相關的系統資源表徵的活動單元。

以上定義都是很抽象的,將程序的概念總結如下。

程序是指一個具有一定獨立功能的程式在一個數據集合上的一次動態執行過程。

所以我們可以把程序看作由一組元素組成的實體,其中兩個基本元素時程式程式碼和與程式碼相關聯的資料集
假設處理器開始執行這個程式程式碼,我們就把這個實體叫做程序

特點

動態性:可動態的建立程序,結束程序。
併發行:程序可以被獨立排程並佔有處理機執行。
獨立性:不同程序的工作互相不影響
制約性:因訪問共享資料/資源或程序間同步而產生制約。

程序與程式

聯絡

  • 程序是作業系統處於執行狀態程式的抽象
    -程式=檔案(靜態的可執行檔案)
    -程序=執行中的程式=程式+執行狀態
  • 同一個程式的多次執行過程對應為不同程序
    -例如:多次使用命令ls的執行對應多個程序。
  • 程序執行需要的資源
    -記憶體:儲存程式碼和資料
    -cpu:執行指令

區別:

  • 程序是動態的,程式是靜態的。
    -程式是有序程式碼的集合
    -進行時程式的執行,程序由和心態/使用者態
  • 程序是暫時的,程式是永久的。
    -程序時一個狀態變化的過程
    -程式可長久儲存
  • 程序與程式的組成不同。
    -程序的組成包括程式,資料,和程序控制塊。

簡單來說:我們寫好的一個程式碼,要想讓它執行起來,首先需要將這個程式載入到記憶體中,程式一旦執行那麼就是一個程序,就需要給程序分配資源建立PCB等動作。說白了,程式只是一個躺在我們硬碟上的文字而已掉電不會沒有,但是程序是在動態執行的一個實體,程序執行結束相關資訊就會被釋放了。

程序控制塊

我們的系統當前運行了若干程序,那麼作業系統是如何管理這些程序呢?
作業系統對這些程序只做兩件事情:“描述”+“組織”。
描述:將程序描述出來,就需要描述出來當前程序的各種資訊,我們的作業系統將這些各種資訊放在一個結構體中,這個結構體就稱為程序控制塊
組織:用我們所學過的資料結構的各種各樣的資料結構知識將這些結構體組織起來,例如:雙鏈表結構,索引表結構。
索引表:同一狀態的程序歸入一個索引表,多個狀態對應多個不同的索引表。
這裡寫圖片描述
連結串列:
同一狀態的程序其PCB成一連結串列,多個狀態對應多個不同的連結串列。
這裡寫圖片描述
那麼 程序控制塊中具體有什麼呢?

  • 識別符號:與程序相關的唯一識別符號,用來區分其他程序。
  • 狀態:程序有不同的狀態,例如執行,就緒,阻塞等。
  • 優先順序:為了給處理機排程提供支援,優先順序用來區分各種程序的先後執行順序
  • 程式計數器:程式中即將執行的下一條指令的地址
  • 記憶體指標:包括程式程式碼的程序相關資料的指標,以及與其他程序貢獻那個記憶體塊的指標。
  • 上下文:程序是需要切換的,切換程序時需要保留程序的上下文資訊,以防程序在切換時丟失現場資料。
  • i/o狀態資訊:包括顯示i/o請求,分配給程序的i/o裝置和被程序使用的檔案列表等。
  • 記賬資訊:包括處理器時間總和,使用的時鐘數總和,時間限制,記賬號等。

程序控制塊是作業系統為支援多程序並提供多重處理技術的關鍵。
程序有很多,但cpu只有一個,所有有時程序是需要切換的,PCB的作用可以使程序在恢復後,像從未中斷過一樣。
所以在許多作業系統書中經常會看到:PCB是程序存在的唯一標誌