挑戰408——操作系統(4)——進程狀態及其轉換
來自專欄挑戰4081 人贊了文章
?前面我們提到了進程的引入背景,現在就深入了解一下。
進程與程序
為了從變化的角度,動態地研究可以並發執行的程序,真實反映系統的獨立性並發性和動態性,操作系統中不得不引入「進程」這一概念。 進程(process),即運行著的程序。直觀翻譯其英文,就是過程的意思。它表示程序的運行過程。它是分配資源的基本單位,也是並發活動的基本單位。進程是程序的執行過程,但是又與程序不同,我們看看他們之間的區別: 1. 進程的動態性與程序的靜態性。我們剛剛才說道引入進程,就是為了動態地研究程序,因此動態性是進程最基本或者說是最根本的特徵。進程是有一定的生命周期的,進程結束之後就不復存在。但是程序不一樣,程序結束後,它仍以數據實體的方式存在於內存當中。 2. 進程的並發性與程序的順序性。進程是一個可以獨立調度並能和其他進程並發執行的單位,並且能確切地描述並發活動。但是程序卻不能獨立調度,並且其中的語句都是順序執行的、 3. 進程具有結構性,進程是由程序,數據,PCB(進程式控制制塊)構成。但是程序不是。
進程的狀態及其轉換(必考)
進程的動態性是由它的狀態和狀態轉換來體現的,為了更好的描述進程之間的動態變化,於是給進程定義了三種基本狀態。
1. 運行狀態。即進程正在處理機上運行的狀態。在單處理機上,如果有進程處於運行狀態(注意,這裡說的是有,那麼可不可能全部都不處於運行狀態呢?當然可能),那麼有且只有一個進程處於運行狀態。但是多處理機則可以多個。
2. 就緒狀態。此時進程已經獲得了除了處理機以外的所需要的其他資源,只要獲得處理機就可以運行的轉態。系統中當這樣的狀態的進程不止一個的時候,就把它們放入一個隊列,稱為就緒隊列中,排隊獲得處理機。
3. 阻塞狀態。當進程由於等待I/O操作或者其他某個資源的時候暫停運行時,此時進程就出去阻塞狀態。
在實際的操作系統中,存在著大量並發的進程,所以要同時滿足所有進程的資源是不可能的,因此進程在運行過程中不僅隨著自身推進,還隨外界環境變化而變化,即狀態之間存在某種轉換。
- 就緒狀態 ->運行狀態:處於就緒狀態的進程,具備了運行的條件,但由於沒有獲得處理機,那麼它就沒能運行,只能在就緒隊列中等待。處於就緒隊列的進程很多而具體調度哪些程序可以運行則是由調度程序來決定的。
- 運行狀態 - >就緒狀態:正在運行的程序,由於時間片用完,或者有比它優先順序更高的進程強佔了處理機,而被暫停執行,那麼該進程就會從運行狀態變為就緒狀態。
- 運行狀態->阻塞狀態:由於系統的某些原因(比如請求I/O,或者請求訪問某個臨界資源,而該資源又癥狀被訪問),那麼該進程由運行狀態轉變為阻塞狀態。這種狀態是進程自發進行的
- 阻塞狀態->就緒狀態:當阻塞原因解除後,被阻塞進程不是直接投入運行,而是將其投入就緒隊列中,直到調度程序再次分配處理機。
從上面我們可以看到,運行和阻塞都可以轉向就緒狀態,而阻塞狀態卻不能一步到達運行狀態,必須在就緒隊列中先排隊。 即阻塞 ->就緒 ->運行
這裡,我們看一個例子,當一個進程請求I/O後,這個時候記住程序是被阻塞起來的,因為它需要等待I/O的結果,此時CPU又不可能空閑,於是CPU調用其他的進程,當I/O結束後,進程是由阻塞狀態進入就緒狀態的。 除此之外,進程還有創建狀態和退出狀態 因為系統在創建和退出的時候,操作系統還有很多工作要做,因此設立這兩種狀態便於操作系統對進程進行管理:
- 創建狀態。進程正在創建還不能運行,這個過程主要給進程分配PCB結構,填寫相關的內容,為進程分配地址空間和資源。
- 退出狀態。當進程已經完成預期任務或發生某種異常事件(越界,非法指令等)而被終止時,進程由運行狀態轉為退出狀態,使之成為一個不可再運行的進程,並回收其所有資源,但此時系統並不立即撤銷它(退出不等於撤銷)。以便其他進程從它的PCB中收取信息
推薦閱讀: