一、處理器管理的概念
在現代操作系統中,處理器的分配和運行都是以進程為基本單位的,因而對處理器的管理也可以視為對進程的管理。進程是程序的一次執行過程。
處理器管理包括以下功能。
1.1. 進程控制
進程控制的主要任務就是為程序創建進程,撤銷已結束的進程,以及控制進程在運行過程中的狀態轉換。在操作系統中,通常是利用若干條進程控制原語或系統調用,來實現進程的控制。所謂“原語”是指用以完成特定功能的、具有“原子性”的一個過程。
1.2. 進程同步
進程同步的主要任務是對眾多的進程運行進行協調。
協調方式有兩種:
(1)進程互斥方式
進程在對臨界資源訪問時,應采用互斥方式,也就是當一個進程訪問臨界資源時,另一個要訪問該臨界資源的進程必須等待;當獲取臨界資源的進程釋放臨界資源后,其他進程才能獲取臨界資源。這種進程之間的相互制約關系稱為互斥。
對於進程互斥,最簡單的實現方式就是設置鎖,通過加鎖、解鎖實現互斥。
(2)進程同步方式
相互合作的進程,由同步機構對它們的執行次序加以協調。也就是前一個進程結束,后一個進程才能開始;前一個進程沒有結束,后一個進程就不能開始。這種進程之間的相互合作關系稱為同步。
在系統中,進程的同步可以有多種實現方法,其中,最常用的方法是信號量機制。
1.3. 進程通信
進程通信的任務就是用來實現相互合作進程之間的信息交換。
(1)直接通信方式
當相互合作的進程處於同一台計算機系統時,通常采用直接通信方式。由源進程利用發送命令直接將消息發送到目標進程的消息隊列上,然后由目標進程利用接收命令從其消息隊列中取出消息。
(2)間接通信方式
當相互合作的進程處於不同計算機系統時,通常采用間接通信方式。由源進程利用發送命令將信息發送到一個專門存放消息的中間實體中,然后由目標進程利用接收命令從中間實體中取出消息。這個中間實體通常稱為“郵箱”,相應的通信系統稱為電子郵件系統。
1.4. 處理器調度
一個批處理作業從進入系統並駐留在外存的后備隊列上開始,直至作業運行完畢,可能要經歷下述三級調度。
(1)高級調度
它又稱為作業調度、長程調度或宏觀調度,它的功能是按照某種原則把外存上處於后備隊列中的那些作業調入內存,並為它們創建進程、分配必要的資源,然后再將新創建的進程排在就緒隊列上,准備執行。
在批處理系統中有高級調度,而在分時系統中一般無高級調度。
(2)低級調度
它通常又稱進程調度、短程調度或微觀調度,它的功能是按照某種原則決定就緒隊列中的哪個進程應獲得處理機,再由分配程序執行處理機分配給該進程的具體動作。
進程調度是操作系統中最基本的調度,在批處理系統和分時系統中都必須配置它。
(3)中級調度
中級調度又稱中程調度或交換調度。它負責內外存之間的進程對換,以解決內存緊張的問題,提高內存利用率和系統吞吐量。
上述三級調度的關系如下圖所示。
二、程序執行
程序執行是指程序在計算機中的運行過程。程序的執行可以用前趨圖表示,程序的執行方式有順序執行和並發執行兩種。
1. 前趨圖
前趨圖是一個有向無循環圖。圖中的每個節點可用於表示一條語句、一個程序段等;節點間的有向邊表示在兩個節點之間存在的前趨關系。如Pi→Pj,稱Pi是Pj的前趨,而Pj是Pi的后繼。在前趨圖中,沒有前趨的節點稱為初始節點,沒有后繼的節點稱為終止節點。應當注意的是,前趨圖中不能存在循環。
在上圖所示的前趨圖中存在下述前趨關系:
P1→P2,P1→P3,P2→P4,P3→P4,P4→P5。
具有九個結點的前趨圖
上圖存在前趨關系:
Ii→Ci→Pi
p1→p2, p1→p3, p1→p4, p2→p5, p3→p5, p4→p6, p4→p7, p5→p8, p6→p8, p7→p9, p8→p9
也可以表示為:
P={P1,P2,P3,P4,P5,P6,P7,P8,P9}
2. 程序的順序執行
(1)程序順序執行的概念
一個程序通常可分為多個程序段,它們必須按照某種先后次序執行,僅當前一操作執行完后,才能執行后繼操作。這里,我們用結點(Node)代表各程序段的操作,用I代表輸入操作,C為計算操作,P為打印操作,用箭頭表示其操作順序
(2)程序順序執行的特征
①順序性。嚴格按照程序所規定的順序執行。
②封閉性。程序在封閉的環境下執行,其執行結果不受外界因素的影響。
③確定性。程序執行的結果與它的執行速度無關,不會影響到最終結果。
④可再現性。只要程序執行的環境和初始條件相同,都將獲得相同的結果。
3. 程序的並發執行
(1)程序並發執行的概念
在處理一批程序時,它們之間有時並不存在嚴格的執行次序,可以並發執行。
程序並發執行時的前趨圖,如下圖所示。
I2、C1可以並發執行
I3、C2、P1可以並發執行。
對於具有下述四條語句的程序段:
S1: a :=x十2
S2:b:=y十4
S3:c:=a十b
S4:d:=c+b
四條語句的前趨圖:
(2)程序並發執行的特征
①間斷性。在程序並發執行時,它們之間共享資源或相互合作,形成了相互制約的關系,表現為“執行—暫停執行—執行”的間斷性活動規律。
②失去封閉性。程序並發執行時,多個程序共享系統中的各種資源,致使程序的運行失去了封閉性。這樣,一個程序在執行時,必然會受到其他程序的影響。
③不可再現性。即使並發程序執行的環境和初始條件相同,程序多次執行或以不同的方式執行都可能獲得不相同的結果。
④資源共享性。系統中的硬件資源(CPU、內存和I/O設備等)和軟件資源(系統程序和數據集等)為多個用戶或作業共同使用。
⑤程序和計算不再一一對應。
例如:購買飛機票問題。
假定一個飛機訂票系統有兩個終端,分別運行兩個程序段P1和P2,該系統公共數據庫中一些單元Aj(j=1,2,…)分別存放某月某日某次航班的余票數,而x1與x2表示P1和P2執行時所用的工作單元。飛機售票程序如下:
Process Pi(i=1,2)
Var xi:integer;
{
按旅客訂票要求找到Aj
xi =Aj
if xi>=1
{ xi = xi-1;
Aj = xi;
輸出一張票;
}
Else
{ 輸出信息“票已售完!”;
}
}
由於P1、P2是兩個可同時執行的並發程序,在該系統中,它們共享一批票數資源,因此,可能出現如下所示的運行情況:
P1:x1 =Aj
P2:x2 =Aj
P2:x2 =x2-1,Aj = x2 輸出一張票
P1:x1 =x1-1,Aj = x1 輸出一張票
顯然,此時出現了把同一張票賣給兩個旅客的情況,兩個旅客各得一張票,但Aj的值實際上只減去1,造成余票數的不正確,這是不能允許的。為此,操作系統中必須對並發程序加以協調和控制,無論並發程序以怎樣的速度向前推進,出現何種交叉情形,其程序的運行結果應當是唯一的、正確的。
4.並發與順序的比較