進程
概念
進程概念的引入是在多道程序的環境下,資源共享和程序的併發導致各個程序相互間存在制約關係,故引入了進程。
進程的定義:進程是程序關於數據集合的一次執行,該程序可與其他程序間並行。
每個進程都有自己的地址空間,地址空間內有三大部分,分別是程序、數據集合以及進程控制塊(PCB)。
程序
描述進程要執行的功能,也就是我們的代碼。此部分是執行時不可修改部分。
數據集合
這部分是程序執行所需的數據和動態分配的內存。此部分是執行時可修改的部分。
進程控制塊(PCB)
這部分是爲了描述程序的動態變化,便於系統對進程進行控制管理的。
進程與程序的區別
1.程序是靜態的,進程是動態的,進程是程序的一次執行。(程序寫完後就是一片代碼,是死的!而進程是程序的一次執行,進程是活的!是動起來的!)
2.進程是短暫的,當進程完成它的使命後,就會被撤銷掉,而程序是一直都存在的。
3.一個進程可以執行一個或多個程序,一個程序也可能由一個或多個進程組成。
4.進程是可併發的。
5.傳統操作系統中,進程是系統進行資源分配和調度的基本單位,在引入線程的系統中,進程不再是調度的基本單位。
進程的三種基本調度狀態
1.運行狀態
表示當前進程獲得了處理機資源,處理機正在執行此進程。
2.就緒狀態
表示該進程已具備條件,正在等待分配處理機。
3.阻塞狀態
表示進程暫時不能運行,收到了阻塞,就算處理機空閒也不能使用,在條件滿足之前只能乾等着條件滿足爲止。
進程的控制
進程是由原語來進行控制的。原語的概念:原語的執行不能被中斷!原語操作具有不可分割性!就算一條原語由多條機器語言構成,操作系統也會採用屏蔽中斷的方法來保證原語的不可分割性。原語可用於創建一個新進程,終止一個已完成的進程,或者去終止一個因出現某事件而使其無法運行下去的進程,還可負責進程運行中的狀態轉換。
線程
概念
線程可以看做是進程內的一個執行單位,也就是一個進程包含至少一個線程,是進程中實際的運作單位。
與進程的區別
1.線程是進程內的一部分。
2.進程是資源分配的基本單位,線程是獨立運行和獨立調度的基本單位。
3.進程間的資源空間都是獨立的,而線程是共享一個進程的資源空間。資源是分配給進程的,當線程在執行中需要資源時,系統是從分配給進程的資源中分配給線程。線程都是在進程的地址空間內活動。
4.多進程比多線程更健壯,多線程中當有一個線程死掉後,整個進程也就死掉了,而多進程中有一個進程死掉後,對其他進程並無影響,因爲進程間的地址空間都是分割開的,都有着自己獨立的地址空間,互不影響。