【操作系統】第七章:進程管理(Part1:進程的概念)

進程描述

進程的靜態表述部分。

1.定義

在這裏插入圖片描述
進程的概念比較抽象。某些角度上,我們可以把運行的程序看作進程,它代表程序在整個執行過程的描述。隨着計算機的不斷髮展,程序開始出現多元化,一個程序分成幾部分運行的例子也很多,此時如果我們再用程序的概念來描述多個程序的實例就比較困難,所以我們引出進程的概念。
進程:一個具有獨立功能的程序在一個數據集合上的一次動態執行過程。
如圖,我們寫程序,然後程序通過編譯可以變成一個執行程序,執行程序包含了代碼段,數據段和數據結構等。這樣的程序是放在文件系統裏,以一種執行文件的形態存在,是靜態存在的,無法看到它可以完成什麼樣的功能;只有當OS將其調入內存中,讓這個程序跑起來,通過CPU執行程序中的一條條指令、對相應數據進行處理,可以完成一定的功能。這一步是一個動態的執行過程,這個執行過程就是進程。進程是一個動態的過程,程序是靜態的,他們之間有很深的聯繫,因爲進程取決於程序的代碼。

2.組成

進程具體需要執行的東西:
①相應的代碼
②代碼需要處理的數據
③現在要執行的指令
④一組通用寄存器的當前值、堆棧
寄存器中一般存着下一條要執行的指令位置,同時整個處理過程中他會用到大量CPU的寄存器,會動態變化。
⑤系統資源(內存、文件系統、網絡等一系列的資源)

進程包含了一個正在運行的程序的狀態信息。這個狀態信息是比較抽象的概念。

3.進程與程序的聯繫

在這裏插入圖片描述
程序是產生進程的基礎,進程的功能受制於程序的代碼。程序的每一次執行構成了不同的進程,程序放在系統中可以被多次執行,且每次執行如果數據不同,則得到的結果也可能不同。當有多個進程執行這個程序時,可能會因爲獲得的資源不一樣而獲得不同的結果。進程就是程序功能的體現,數據不同,但是其邏輯原理是一樣的,排序程序,輸入不同輸出不一定相同但是一定是一個排序的程序。通過多次執行,一個程序可以對應多個進程;通過調用關係,一個進程可以包括多個程序。


區別:進程是動態的;程序是靜態的。程序是有序代碼的集合,進程是程序的執行,進程有核心態用戶態
核心態就是在操作系統中運行,我們寫的程序都是運行在用戶態。進程在執行過程中需要一些特定功能,比如讀寫文件,這個功能需要由OS完成,所以代表進程在內核中執行,也就說進程處於核心態。


進程是暫時的,程序是永久的。進程是一個狀態變化的過程,程序可以長久保存。程序保存在硬盤中,可以長久保存;進程隨着結束自然也就消失了。


進程與程序的組成不同。進程的組成包括程序、數據和進程控制塊(即進程狀態信息)。雖然進程用到了程序的代碼段和數據段等數據結構,但是進程執行過程中也有一些變化,處理數據時,數據在變;這個過程在程序中不存在的。處理輸入數據對應產生輸出數據,爲了管理進程OS而建立的進程控制塊等。
【例子】
在這裏插入圖片描述
很明顯醫療救護的優先級要高於做蛋糕,在處理完傷口後回來做蛋糕發現未完成的蛋糕上落滿了蒼蠅,科學家決定倒掉重做,這就是殺死進程。也就說CPU在執行進程時,會動態切換不同進程來完成不同的功能,這也是靜態程序所沒有的特徵。

4.特點

動態性:可動態創建、結束進程。在執行過程中還有可能切換或者殺死進程。
併發性:進程可以被獨立調度並佔用CPU運行。
併發:一段時間內通過不但切換有多個進程在CPU中不斷切換執行,如果這個時間很小,給人一種錯覺是多個進程在同時執行。假·同時執行,是一種人感覺不到的錯覺
並行:一個時刻,有多個進程在同時執行。如果只有一個CPU是不可能完成的,一個CPU在某一時刻只能執行一個進程,執行其他執行必須切換。多核/多處理器CPU時,可以滿足併發執行。真·同時執行
獨立性:不同進程之間的工作互不影響。執行進程時,OS會調度不同進程執行,所以進程的執行時間可能會受到其他進程的影響;但是進程的正確性不會受到影響,進程不會破壞其他進程的正確執行(代碼/數據)。
通過頁表可以使得不同的程序訪問不同的地址空間,頁表就是保證進程獨立性的重要機制。有了頁表,OS可以給不同進程分配不同頁表,讓每個進程在獨立的空間內運行,使得他們的代碼數據相互間不受影響。
制約性:因訪問共享數據/資源或進程間同步而產生制約。進程之間可能有交互,或者某一進程需要在另一個進程在執行到某一階段之後才能執行(前置條件),所以這也需要OS根據進程間的特點來協調進程去執行。
在這裏插入圖片描述
左圖:體現動態性,在ABCD間切換執行。
中圖:四個進程相對獨立執行,他們執行的地址空間相對獨立
右圖:相互之間時間調度有一定的關係,執行的先後順序需要OS調度策略或算法,或者存在約束關係(必須執行A才能執行B)。

進程控制塊

操作系統也是一個軟件,一個程序,描述進程的數據結構:進程控制塊(Process Control Block,PCB)。描述進程執行過程中狀態的變化和資源的需求情況。OS爲每一個進程都維護了一個PCB,用於保存該進程執行過程中相關的所有信息,有了這些信息之後OS纔可以對其管理,提供相應的獨立性、動態性等特徵。
在這裏插入圖片描述
設計一個程序,數據結構是非常重要的。有了數據結構就可以很好地對進程管理。PCB描述了進程的基本情況和運行變化情況,所以一般來說我們可以把PCB作爲進程存在的唯一標識,也就意味着如果進程存在則必然有一個PCB。一旦創建進程,就會相應創建一個進程控制塊。
PCB 體現了什麼時候開始,什麼時候結束,中間是否被切換。
在這裏插入圖片描述
PCB包含的三大類信息:
1.標識信息:一個PCB唯一標識了一個進程,PCB會有一個ID,這個ID就是個標識,他可以識別出進程代表的哪一個程序,或者這一個程序執行了幾次,都可以通過PCB的進程標識來體現。還可以體現用戶標識,比如這個進程屬於哪一個用戶,進程的父進程是什麼(創建這個進程的進程)
2.處理器的狀態信息:其實就是寄存器。處理器是CPU。CPU運行過程中會使用寄存器來做很多事情,比如當前需要對數據進行加減乘除等數學結算,這個過程會把很多數據存到寄存器裏進行處理;還會保存狀態,比如標誌位,做了一個寄存器加法,檢驗是否溢出;執行過程,堆棧在什麼地方;和執行相關的一些過程的保存也放在寄存器裏,比如程序計數器和程序狀態字,他們 保存了程序執行過程中相關的一些重要信息,還有堆棧執行到什麼地方了,這些信息PC裏都有記錄。
在這裏插入圖片描述
3.進程的控制信息:OS需要對進程進行管理和控制,我們需要讓它佔用CPU執行,讓他處於一個等待/就緒/運行的狀態,這些不同的狀態體現了進程在執行過程中臨時的情況(執行特徵),這些特徵會描述出當前進程的執行現狀。
進程之間需要通信,通信的信息也會保存在PCB。
進程本身需要內存,代碼和數據都在內存中,管理其內存信息。比如佔不到內存,是否回收;是否分配新的內存;
包括文件(後續詳解)。一個進程可以打開不同的文件,整個過程怎麼管理。
進程之間有關係,父進程和子進程。我們可以通過List鏈表來管理器來一個子進程與父進程的連續序列,從而形成PCB之間的鏈接信息和管理信息,從而形成了進程控制信息。
ex)進程A創建進程B,進程B可以創建進程C,則A是B的父進程,B是A的子進程;B是C的父進程,C是B的子進程。


PCB的組織方式
我們可以用鏈表/索引(數組方式)來組織,但是一般我們會採取鏈表來組織,因爲進程的執行過程是一個動態的執行過程,也就意味着OS在管理進程時,他會一會創建一會結束,在整個組織裏他應該可以動態插入和動態刪除,用鏈表的方式可以更好地完成動態插入和刪除。如果是數組的話,動態的插入和刪除開銷可能會比較大。所以目前來說更多采取基於鏈表的方式,當然如果一個進程個數比較固定且一開始就執行,到結束也不會頻繁的創建刪除的話,採取索引的方式比較快捷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章