操作系統知識整理 - 進程管理(簡版)

主要內容

程序的概念

單道程序的順序執行

多道程序的併發執行

併發執行的影響

進程的定義

進程控制塊(PCB)

進程上下文(context)

進程上下文切換

進程空間與大小

創建進程

撤銷進程

阻塞進程

喚醒進程

爲什麼要引入線程?

線程的基本概念

線程的適用範圍


 

進程概念的引入

問題:採用一個什麼樣的概念來描述計算機程序的執行過程和作爲資源分配的基本單位,才能充分反映操作系統的執行併發資源共享用戶隨機的特點?

 

程序的概念

程序(program)描述計算機所要完成的具有獨立功能的,並在時間上按嚴格次序前後相繼的計算機操作序列集合,是一個靜態的概念。

 

單道程序的順序執行

我們把一個具有獨立功能的程序獨佔處理機直至最終結束的過程稱爲程序的順序執行。

特點:

(1)順序性:每執行一條指令,系統將從上一個執行狀態轉移到下一個執行狀態,且上一條指令的執行結束是下一條指令執行開始的充要條件。

(2)封閉性:程序執行得到的最終結果由給定的初始條件決定,不受外界因素的影響。

(3)可再現性:只要輸入相同的初始條件,無論何時重複執行該程序都能得到相同的結果。

 

多道程序的併發執行

實際上,計算機經常需要同時處理多個具有獨立功能的程序。上一篇簡單介紹過的批處理系統分時系統實時系統都是這樣的系統。

特點:

(1)獨立性:每道程序在邏輯上都是獨立的,不存在制約關係。

(2)隨機性:程序的執行和數據的輸入開始時間都是隨機的。

(3)資源共享性:資源包括硬件資源和軟件資源。資源共享將導致對進程執行速度的制約。

併發執行使爲了增強計算機系統的處理能力和提高資源利用率所採取的一種同時操作技術。

程序的併發執行可分爲兩種:

1)多道程序系統的程序執行環境變化所引起的多道程序的併發執行。(有點囉嗦...)

2)某道程序的幾個程序段包含着一部分可以同時執行或順序可以顛倒執行的代碼,即兩段沒有邏輯先後順序的代碼。

 

併發執行的影響

程序的併發執行充分利用了系統資源,從而提高了系統的處理能力,這是併發執行好的一方面。然而資源有限,程序的併發執行必然導致資源共享和競爭,從而改變程序的執行速度。當某一段代碼的執行速度受到影響,自然會產生一系列連鎖反應。

例如在棧的入棧和出棧操作中,若採用順序執行,要麼是先有數據入棧,再有數據出棧,要麼就是反過來,執行過程十分嚴謹。若採用併發執行,入棧和出棧就有可能出現問題。譬如出棧開始執行時,入棧也剛要開始執行,出棧操作佔用了處理機,入棧操作卻還未放入棧頂元素,出棧操作自然也無法順利進行。

 

爲了控制和協調各程序執行過程中的軟、硬件資源的共享和競爭,顯然需要一個描述各程序段執行過程和共享資源的基本單位。

由於程序的順序性、靜態性和獨立性,用程序段作爲描述其執行過程和共享資源的基本單位既增加操作系統設計和實現的複雜度,也無法反映操作系統所應該具有的程序段執行的併發性、隨機性以及資源共享等特性。(balbala長篇大論)

所以用程序來作基本單位是不合適的

 

進程的定義

進程是一個動態的、一個程序對某個數據集的執行過程,是併發執行的程序在執行過程中分配和管理資源的基本單位。

如果把程序比作菜譜,進程就是按照菜譜炒菜的過程。


 

進程的描述

系統中需要有描述進程存在和能夠反映其變化的物理實體,即進程的靜態描述。

進程的靜態描述由3部分組成:進程控制塊(PCB),有關程序段和該程序段操作的數據結構集。進程的PCB是系統感知進程的唯一實體,程序段以及數據結構集是進程完成所需功能的物質基礎。一個進程的PCB全部或部分常駐內存,而程序段和數據結構集存放在外存

 

進程控制塊(PCB)

PCB包含一個進程的描述信息控制信息資源信息,有些系統中還有進程調度等待所使用的現場保護區

PCB集中反映一個進程的動態特徵,創建一個進程時,應首先創建其PCB,然後根據PCB中的信息對進程實施有效的管理和控制。當一個進程完成其功能時,系統會通過釋放PCB來釋放進程所佔有的各種資源,進程也隨之消亡。

 

PCB的基本內容

(1)描述信息

1. 進程名或進程標識號。每個進程都有唯一的進程名或進程標識號,用於識別進程;

2. 用戶名或用戶標識號。每個進程都隸屬於某個用戶,有利於資源共享和保護;

3. 家族關係。表示進程之間的關係。

(2)控制信息

1. 進程當前狀態。進程在活動期間可分爲初始態(剛被創建就緒態(準備佔有處理機執行態(佔有處理機等待狀態(因其他原因暫時不能佔有處理機終止狀態(執行結束

2. 進程優先級。進程優先級是選取進程佔有處理機的重要依據;

3. 進程開始地址。規定該進程的程序以此地址開始執行;

4. 計時信息。進程佔有和利用資源的情況;

5. 通信信息。該進程在執行過程中與其他進程的信息交換情況。

(3)資源管理信息

PCB中包含最多的是資源管理信息,包括有關存儲器的信息、使用輸入輸出設備的信息和有關文件系統的信息等。

(4)CPU現場保護區

若進程因等待某個事件而進入等待狀態或因某個事件發生而被中止在處理機上的執行,爲了以後該進程能在被打斷出恢復執行,需要設置專門的CPU現場保護區,以存儲退出執行時的進程現場數據

 

由於PCB中包含較多信息,往往要佔據較大的存儲空間(一般佔幾百到幾千個字節),所以在某些系統中爲了減少PCB對內存的佔用量,只允許 PCB中最常用的部分保存在內存中,其他部分則存放於外存,待該進程將要執行時,與其他數據一起裝入內存。

 

 

進程上下文(context)

在瞭解進程上下文之前,需要先搞清楚一個概念——進程調度

無論是在批處理系統還是分時系統中,用戶進程數一般都多於處理機數、這將導致它們互相爭奪處理機。另外,系統進程也同樣需要使用處理機。這就要求進程調度程序按一定的策略,動態地把處理機分配給處於就緒隊列中的某一個進程,以使之執行。

 

進程上下文是一個抽象的概念。已執行過的進程指令數據在相關寄存器和堆棧中的內容稱爲上文正在執行的內容稱爲正文待執行的內容稱爲下文

 

進程上下文切換

在不發生進程調度時,進程上下文的改變是在同一進程內進行的,此時每條指令對進程上下文的改變較小。

進程上下文切換指的是不同進程之間的切換,切換過程一般包括3個部分,並涉及3個進程——

第一部分:保存被切換進程的正文部分至有關存儲區;

第二部分:執行有關程序調度和資源分配的程序,選取新的進程

第三部分:將被選進程的、原來被保存的正文部分,從有關存儲區取出,並送至有關寄存器和堆棧中,激活被選進程的執行。(超級拗口的說...)

 

進程上下文切換比較耗費CPU時間,爲了進一步提高執行效率,後來又提出了線程的概念。

 

進程空間與大小

任意進程都有自己的地址空間,該空間稱爲進程空間或虛空間。

進程空間的大小隻與處理機的位數有關。例如,一個16位長處理機的進程空間大小爲2的16次方,而32位長處理機的進程空間爲2的32次方。

程序的執行都在進程空間內進行。


 

進程狀態轉換

前面介紹的進程控制塊(PCB)中提到了進程的5種狀態:初始態、就緒態、執行態、等待狀態和終止狀態。

5種基本狀態間的轉換:

創建進程→初始態→得到除處理機以外的其他資源→就緒態→進程調度,得到處理機→執行態→時間片用盡→就緒態

執行態→等待某個事件(睡眠)→等待狀態→等待的事件發生(喚醒)→就緒態

執行態→進程結束→終止狀態

 

就緒態又可細分爲內存就緒態外存就緒態。處於內存就緒態的進程已經獲得除處理機以外的全部資源,經進程調度得到處理機後可立即投入執行;處於外存就緒態的進程還需要先獲得資源,成爲內存就緒態的進程。


 

進程控制

所謂進程控制,就是系統使用一些具有特定功能的程序段來創建撤銷進程以及完成進程各狀態間的轉換,從而達到多進程高效率併發執行和協調、實現資源共享的目的。

在操作系統中,這些用於進程控制的程序段被做成原語。原語又分爲創建原語撤銷原語阻塞原語喚醒原語等。

 

創建進程

創建進程有兩種方式:由系統程序模塊統一創建由父進程創建(形成家族關係)

無論是哪種創建方式,都必須調用創建原語來實現。創建原語掃描系統的PCB鏈表,在找到一定的PCB表後,填入調用者提供的各項參數,最後形成代表進程的PCB結構。參數包括進程名、進程優先級P0、進程正文段起始地址d0和資源清單R0等。

 

撤銷進程

撤銷進程的情況:

(1)進程已完成所要求的功能而正常終止;

(2)由於某種錯誤導致非正常終止;

(3)祖先進程要求撤銷某個子進程。(連祖先都出來了....= = |||)

撤銷原語首先檢查進程鏈表或進程家族是否存在要撤銷的進程,如果有,且該進程沒有子進程,則釋放該進程佔有的所有資源,並釋放PCB結構。

 

阻塞進程

阻塞原語實現進程從執行狀態到等待狀態的轉換,首先保存當前進程的CPU現場,然後將PCB塊中的進程狀態設置爲“等待狀態”,再將被阻塞進程放入等待隊列。舊進程(被阻塞進程)處置好後,就要轉進程調度,選擇新進程(就緒進程)投入運行。

 

喚醒進程

喚醒進程有兩種方式:由系統進程喚醒由事件發生進程喚醒

喚醒原語首先將被喚醒進程從相應的等待隊列摘下,然後將PCB塊中的進程狀態設置爲“就緒狀態”,並送入就緒隊列。之後喚醒源於既可以返回原調用程序,也可以轉進程調度。


 

死鎖問題

定義:死鎖是指各併發進程互相等待對方所擁有的資源,且這些併發進程在得到對方的資源之前不會釋放自己佔有的資源,從而造成了各併發進程不能繼續往前推進的狀態。

起因:系統提供的資源個數少於併發進程所要求的該類資源數。

顯然,由於資源的有限性,不可能爲所有進程無限制地提供資源。採用適當的資源分配算法,就可以達到消除死鎖的目的。因此需要先了解產生死鎖的必要條件。

必要條件:

(1)互斥條件。併發進程所要求佔有的資源不能同時被兩個以上進程使用,進程對它所需要的資源進行排他性控制

(2)不剝奪條件。進程佔有的資源只能由進程本身釋放,而不能被其他進程強行剝奪。

(3)部分分配。進程每次申請它所需要的一部分資源,在等待新資源的同時,繼續佔用已分配到的資源(即使已經使用完)。

(4)環路條件。存在一種進程循環鏈,鏈中的每一個進程已獲得的資源同時被下一個進程所請求。

只要使上述4個必要條件中的某一個不滿足,死鎖就能解除。

 

實際上,消除死鎖一般依靠檢測和恢復。

當進程進行資源請求時,死鎖檢測算法檢查併發進程是否出現環路,若出現,最簡單的方法是終止各鎖住進程,或按影響級別由低到高的順序中止進程序列,直至釋放的資源足夠完成剩餘進程。


 

線程的概念

 

爲什麼要引入線程?

進程是爲了提高CPU的執行效率,減少因爲程序等待帶來的CPU空轉以及其他計算機軟、硬件資源的浪費而提出來的,是爲了完成用戶任務所需要的程序的一次執行過程以及爲其分配資源的一個基本單位。

由前面介紹的內容可知,創建切換進程耗費較大的系統開銷和佔用較多的資源。開銷越大,服務器能支持和處理的用戶訪問請求就越少。

爲了減少創建進程和進程上下文切換的開銷,提高執行效率和節省資源,人們開始在操作系統中引入一個概念——線程

 

線程的基本概念

線程是進程的一部分因此線程有時會被稱爲輕量級進程(light weight process)

線程的改變只代表了CPU執行過程的改變,除了CPU外,計算機內的軟硬件資源的分配與線程無關,線程只能共享它所屬的進程的資源。

每個線程都有自己的線程控制塊(TCB),而TCB中保存的線程狀態信息要比PCB少得多。

 

線程的適用範圍

使用線程的最大好處是在有多個任務需要處理機處理時,減少處理機的切換時間;而且線程的創建和結束所需要的系統開銷也比進程小得多。

儘管線程可以提高系統的執行效率,但並不是所有的計算機系統都適用線程。任務單一卻設置線程反而會佔用更多的系統資源。

由此可以推出多處理機系統網絡系統分佈式系統更適合適用線程。

 

應用線程的例子:一個用戶主機通過網絡對兩臺遠程服務器進行遠程調用(RPC)以獲得相應結果的執行情況。

單線程:發送請求1後必須等待服務器1處理好並返回結果1後才能繼續發送請求2;

多線程:發送請求1後即可繼續發送請求2,不必等待結果1返回。


 

路過的圈毛君:“本篇很懶地省略了較多的,複雜的,暫時用不到的內容_(:з」∠)_”

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