1) 進程是程序及其數據在計算機上的一次運行活動,是一個動態的概念。進程的運行實體是程序,離開程序的進程沒有存在的意義。從靜態角度看,進程是由程序、數據和進程控制塊(PCB)三部分組成的。而程序是一組有序的指令集合,是一種靜態的概念。
2) 進程是程序的一次執行過程,它是動態地建立和消亡的,具備必定的生命週期,是暫時存在的;而程序則是一組代碼的集合,它是永久存在的,可長期保存。
3) 一個進程能夠執行一個或幾個程序,一個程序也能夠構成多個進程。進程可建立進程,而程序不可能造成新的程序。
4) 進程與程序的組成不一樣。進程的組成包括程序、數據和PCB。算法
具備等待隊列的信號量的實現可能致使這樣的狀況:兩個或多個進程無限地等待一個事件,而該事件只能由這些等待進程之一來產生。這裏的事件是V操做的執行(即釋放資源)。當出現這樣的狀態時,這些進程稱爲死鎖(Deadlocked)。
爲了加以說明,考慮到一個系統由兩個進程P0和P1組成,每一個進程都訪問兩個信號量S和Q,這兩個信號量的初值均爲1。
安全
假設進程P0執行P(S),接着進程P1執行P(Q)。當進程P0執行P(Q)時,它必須等待直到進程P1執行V(Q)。相似地,當進程P1執行P(S),它必須等待直到進程P0執行V(S)。因爲這兩個V操做都不能執行,那麼進程P0和進程P1就死鎖了。
說一組進程處於死鎖狀態是指:組內的每一個進程都等待一個事件,而該事件只可能由組內的另外一個進程產生。這裏所關心的主要是事件是資源的獲取和釋放。
與死鎖相關的另外一個問題是無限期阻塞(Indefinite Blocking)或「飢餓」 (Starvation),即進程在信號量內無窮等待的狀況。
產生飢餓的主要緣由是:在一個動態系統中,對於每類系統資源,操做系統須要肯定一個分配策略,當多個進程同時申請某類資源時,由分配策略肯定資源分配給進 程的次序。有時資源分配策略多是不公平的,即不能保證等待時間上界的存在。在這種狀況下,即便系統沒有發生死鎖,某些進程也可能會長時間等待。當等待時 間給進程推動和響應帶來明顯影響時,稱發生了進程「飢餓」,當「飢餓」到必定程度的進程所賦予的任務即便完成也再也不具備實際意義時稱該進程被「餓死」。
例如,當有多個進程須要打印文件時,若是系統分配打印機的策略是最短文件優先,那麼長文件的打印任務將因爲短文件的源源不斷到來而被無限期推遲,致使最終的「飢餓」甚至「餓死」。
「飢餓」並不表示系統必定死鎖,但至少有一個進程的執行被無限期推遲。「飢餓」與死鎖的主要差異有:數據結構
進入「飢餓」狀態的進程能夠只有一個,而因爲循環等待條件而進入死鎖狀態的進程卻必須大於或等於兩個。併發
處於「飢餓」狀態的進程能夠是一個就緒進程,如靜態優先權調度算法時的低優先權進程,而處於死鎖狀態的進程則一定是阻塞進程。ide
銀行家算法的主要思想是避免系統進入不安全狀態。在每次進行資源分配時,它首先檢查系統是否有足夠的資源知足要求,若是有,則先進行分配,並對分配後的新 狀態進行安全性檢查。若是新狀態安全,則正式分配上述資源,不然就拒絕分配上述資源。這樣,它保證系統始終處於安全狀態,從而避免死鎖現象的發生。操作系統
併發進程的執行會產生相互制約的關係:一種是進程之間競爭使用臨界資源,只能讓它們逐個使用,這種現象稱爲互斥,是一種競爭關係;另外一種是進程之間協同完成任務,在關鍵點上等待另外一個進程發來的消息,以便協同一致,是一種協做關係。3d
進程是系統資源的使用者,系統的資源大部分都是以進程爲單位分配的。而用戶使用計算機是爲了實現一串相關的任務,一般把用戶要求計算機完成的這一串任務稱爲做業。調試
批處理系統中的能夠經過磁記錄設備或卡片機向系統提交批做業,由系統的SPOOLing 輸入進程將做業放入磁盤的輸入井中,做爲後備做業。做業調度程序(通常也做爲獨立的進程運行)每當選擇一道後備做業運行時,首先爲該做業建立一個進程(稱 爲該做業的根進程)。該進程將執行做業控制語言解釋程序解釋該做業的做業說明書。父進程在運行過程當中能夠動態地建立一個或多個子進程,執行說明書中的語 句。例如,對一條編譯的語句,該進程能夠建立一個子進程執行編譯程序對用戶源程序進行編譯。相似地,子進程也能夠繼續建立子進程去完成指定的功能。所以, 一個做業就動態地轉換成了一組運行實體——進程族。當父進程遇到做業說明書中的「撤出做業」的語句時,將該做業從運行狀態改變爲完成狀態,將做業及相關結 果送入磁盤上的輸出井。做業終止進程負責將輸出井中的做業利用打印機輸出,回收做業所佔用的資源,刪除做業有關數據結構,刪除做業在磁盤輸出井中的信息, 等等。做業終止進程撤除一道做業後,可向做業調度進程請求進行新的做業調度。至此,一道進入系統運行的做業所有結束。blog
在分時系統中,做業的提交方法、組織形式均與批處理做業有很大差別。分時系統的用戶經過命令語言逐條地與系統應答式地輸入命令,提交做業步。每輸入一條 (或一組)命令,便直接在系統內部對應一個(或若干個)進程。在系統啓動時,系統爲每一個終端設備創建一個進程(稱爲終端進程),該進程執行命令解釋程序, 命令解釋程序從終端設備讀入命令解釋執行用戶輸入的每一條命令。對於每一條終端命令,能夠建立一個子進程去具體執行。若當前的終端命令是一條後臺命令,則 能夠和下一條終端命令並行處理。各子進程在運行過程當中徹底能夠根據須要建立子孫進程。終端命令所對應的進程結束後,命令的功能也相應處理完畢。用戶本次上 機完畢,用戶經過一條登出命令即結束上機過程。
分時系統的做業就是用戶的一次上機交互過程,能夠認爲終端進程的建立是一個交互做業的開始,登出命令運行結束表明用戶交互做業的終止。
命令解釋程序流程扮演着批處理系統中做業控制語言解釋程序的角色,只不過命令解釋程序是從用戶終端接收命令。生命週期
在同時支持交互和批處理的操做系統中,人們能夠用交互的方式準備好批做業的有關程序、數據及做業控制說明書。好比,可用交互式系統提供的全屏幕編輯命令編 輯好自編的一個天氣預報程序,用編譯及裝配命令將程序變成可執行文件,用調試命令進行程序調試。在調試成功後,用戶天天都要作以下工做:準備原始天氣數 據,運行天氣預報執行文件處理原始數據,把結果打印出來等。這時,用交互系統提供的全屏幕編輯命令編輯好將要提交的做業控制說明書文件,如Windows 系統的BAT文件和Linux系統的sh文件。而後用一條做業提交命令將做業提交給系統做業隊列中。系統有專門的做業調度進程負責從做業隊列中選擇做業, 爲被選取的做業建立一個父進程運行命令解釋程序,解釋執行做業控制說明書文件中的命令。