1. 程式人生 > >挑戰408——作業系統(4)——程序狀態轉換

挑戰408——作業系統(4)——程序狀態轉換

前面我們提到了程序的引入背景,現在就深入瞭解一下。

程序與程式

為了從變化的角度,動態地研究可以併發執行的程式,真實反映系統的獨立性併發性和動態性,作業系統中不得不引入“程序”這一概念。
程序(process),即執行著的程式。直觀翻譯其英文,就是過程的意思。它表示程式的執行過程它是分配資源的基本單位,也是併發活動的基本單位。程序是程式的執行過程,但是又與程式不同,我們看看他們之間的區別:

  1. 程序的動態性與程式的靜態性。我們剛剛才說道引入程序,就是為了動態地研究程式,因此動態性是程序最基本或者說是最根本的特徵。程序是有一定的生命週期的,程序結束之後就不復存在。但是程式不一樣,程式結束後,它仍以資料實體的方式存在於記憶體當中。
  2. 程序的併發性與程式的順序性。程序是一個可以獨立排程並能和其他程序併發執行的單位,並且能確切地描述併發活動。但是程式卻不能獨立排程,並且其中的語句都是順序執行的、
  3. 程序具有結構性,程序是由程式,資料,PCB(程序控制塊)構成。但是程式不是

程序的狀態及其轉換(必考)

程序的動態性是由它的狀態和狀態轉換來體現的,為了更好的描述程序之間的動態變化,於是給程序定義了三種基本狀態。

  1. 執行狀態。即程序正在處理機上執行的狀態。在單處理機上,如果有程序處於執行狀態(注意,這裡說的是有,那麼可不可能全部都不處於執行狀態呢?當然可能),那麼有且只有一個程序處於執行狀態。但是多處理機則可以多個。
  2. 就緒狀態。此時程序已經獲得了除了處理機以外的所需要的其他資源,只要獲得處理機就可以執行的轉態。系統中當這樣的狀態的程序不止一個的時候,就把它們放入一個佇列,稱為就緒佇列中,排隊獲得處理機。
  3. 阻塞狀態。當程序由於等待I/O操作或者其他某個資源的時候暫停執行時,此時程序就出去阻塞狀態。

在實際的作業系統中,存在著大量併發的程序,所以要同時滿足所有程序的資源是不可能的,因此程序在執行過程中不僅隨著自身推進,還隨外界環境變化而變化,即狀態之間存在某種轉換。
在這裡插入圖片描述

  • 就緒狀態 ->執行狀態:處於就緒狀態的程序,具備了執行的條件,但由於沒有獲得處理機,那麼它就沒能執行,只能在就緒佇列中等待。處於就緒佇列的程序很多而具體排程哪些程式可以執行則是由排程程式來決定的。
  • 執行狀態 - >就緒狀態:正在執行的程式,由於時間片用完,或者有比它優先順序更高的程序強佔了處理機,而被暫停執行,那麼該程序就會從執行狀態變為就緒狀態。
  • 執行狀態->阻塞狀態:由於系統的某些原因(比如請求I/O,或者請求訪問某個臨界資源,而該資源又症狀被訪問),那麼該程序由執行狀態轉變為阻塞狀態。這種狀態是程序自發進行的
  • 阻塞狀態->就緒狀態:當阻塞原因解除後,被阻塞程序不是直接投入執行,而是將其投入就緒佇列中,直到排程程式再次分配處理機。

從上面我們可以看到,執行和阻塞都可以轉向就緒狀態,而阻塞狀態卻不能一步到達執行狀態,必須在就緒佇列中先排隊。
這裡,我們看一個例子,當一個程序請求I/O後,這個時候記住程式是被阻塞起來的,因為它需要等待I/O的結果,此時CPU又不可能空閒,於是CPU呼叫其他的程序,當I/O結束後,程序是由阻塞狀態進入就緒狀態的
除此之外,程序還有建立狀態和退出狀態
因為系統在建立和退出的時候,作業系統還有很多工作要做,因此設立這兩種狀態便於作業系統對程序進行管理:
在這裡插入圖片描述

  • 建立狀態。程序正在建立還不能執行,這個過程主要給程序分配PCB結構,填寫相關的內容,為程序分配地址空間和資源。
  • 退出狀態。當程序已經完成預期任務或發生某種異常事件(越界,非法指令等)而被終止時,程序由執行狀態轉為退出狀態,使之成為一個不可再執行的程序,並回收其所有資源,但此時系統並不立即撤銷它(退出不等於撤銷)。以便其他程序從它的PCB中收取資訊