2.2處理機管理
處理機管理也稱為程序管理,其核心是如何合理地配置設定處理機的時間,提高系統的效率。
1. 程式執行時的特征
這是單道程式設計技術
(1) 順序性。程式和各程式段嚴格按照規定的順序執行
(2) 封閉性。程式運作時系統内的資源隻受該程式控制而改變
(3) 可再現性:隻要程式執行環境和初始條件相同,程式多冷執行的結果相同
采用多道程式設計技術
程式并發時執行時的主要特征如下 :
(1) 失去了程式的封閉性
(2) 程式和機器執行程式的活動不再一一對應
(3) 并發程式間具有互相制約性
2. 程序的組成:
程序是程式的一次執行,通常由程式、資料和程序控制塊(pcb)組成
程序控制塊是程序存在的唯一标志
1. 程序的狀态及其狀态間的切換
1) 三态模型(線程的基本狀态):運作、就緒和阻塞
說明:程序5态模型是3态模型的更新,優化
建立态:程序剛剛被建立且沒有被送出的狀态,并等待系統完成建立程序的所有必要作息,
有了建立态,作業系統就可以根據系統的性能和記憶體容量的限制推遲建立态程序的送出
2.2..2程序控制
主要功能:建立一個新的新程序,撤銷一個已經運作完的程序,改變程序的狀态,實作程序音的通信,程序控制是由作業系統核心(kemel)中的原碼實作的
原語(primitive)是指由若幹條機器指令組成的、用于完成特定功能的程式段。
特點:是一個事務,要不做,要麼都做
主要有:程序控制原語、程序撤銷原語、程序扶起原語、程序激活原語、程序阻塞原語等
2.2.3程序通信
程序通信是指各個程序交換資訊的過程
1. 同步與互斥
1) 程序間的同步
例:程序a完成了向緩沖區送資料的操作,程序b從緩沖區取資料加工,當程序b取資料加工時,必須是程序a完成了向緩沖區送資料的操作,否則程序b必須停下來等待程序a的操作結束。
程序間的同步是指程序間完成一項任務時直接發生互相作用的關系
2) 程序間的互斥
在多道程式系統環境中,各程序可以共享各類資源 ,但有些資源 一次隻能 供一個程序 使用,稱為臨界資源,如列印機、共享變量。
程序間的互斥是指系統中各個程序互斥使用臨界資源
3) 臨界區管理的原則
有空即進
無空則等
有限等待
讓權等待
2. *信号量機制
信号量機制是一種有效的程序同步互斥工具。目前信用量機制有了很多的發展,主要有整形信号量、記錄型信号量和信号量集機制。
1) 整形信号量與pv操作
信号量是一個整形變量,分為如下兩類
公用信号量。實作程序間的互斥,初值為1或資源的數目
私用信号量。實作程序間的同步。初值為0或某個正整數
信号量的實體意義:若s>=0;表示某資源的可用數
若s<0,則其絕對值表示阻塞隊列中等待該資源的程序數
pv操作是實作程序同步與互斥的常用方法,p操作和v操作是低級通信原語。在執行期間不可分割。其中,p操作表示申請一個資源,v操作表示釋放一個資源。
p操作的定義:s=s-1,若s>=0; 則執行p操作的程序繼續執行;
若s<0;則置該程序為阻塞狀态(因為無可用資源)并為其插入阻塞隊列中。
p操作可用如下過程表示 ,其中semaphore表示所定義的變量是信号量
procedurep(var s:semaphore);
begin
s:=s-1;
if s<0then w(s){
執行p操作的程序插入等待隊列
}
end;
v操作的定義:s:=s+1; 若s>0; 則執行v操作的程序繼續執行
若s<=0;則從阻塞狀态喚醒一個程序,并将其插入就緒隊列,
然後執行v操作的程序繼續。
v操作可用 如下過程表示
procedurev(var s:semaphore):
begin ;
s=s+1;
if s<=0then r(s){
從阻塞隊列中喚醒一個程序
2)利用pv操作實作程序的互斥
令信号量mutex的初值為1;進入臨界區執行p操作,退出臨界區時執行v操作。這
樣,進入臨界區的代碼如下
p(mutex)
臨界區
v(mutex)
例兩個并發執行的程式完成交通流量的統計,其中 觀察者 p1識别 通過的車輛數,
報告都 p2定時将觀察都的計數值清 0;
用pv操作實作的交通流量統計程式如下:
p1
l1:if 有車通過 then
p(mutex)
count ++;
v(coutex)
end
goto l1;
p2
l2:begin
p(mutex);
print count;
count:=0;
v(mutex);
goto l2;
3)利用pv操作實作程序的同步
程序的同步是由于程序間的合作而引起的互相制約問題,實作程序同步的一種方法是将
一個信号量與消息相聯系,當信号量的值為0時表示希望的消息未産生,否則表示希望
的消息已經來到,假定用信号量s表示某條消息,程序可能通過調用p操作測試消息是
否到達,調用v操作通知消息憶準備好,典型的應用是單緩沖區的生産者和消費者同
步問題!
例:生産者程序p1不斷地生産産品送入緩沖區,消費者程序p2不斷地從緩沖區中取
出産品消費。為了實作程序p1與p2之間的同步問題,需要設定一個信号量s1,表示緩
沖區是否空閑,初值為1;表示可以将産品送入緩沖區,設定另一個信号量s2,表示緩
沖區有無産品,初值為0;
假設有一個生産者和一個消費者,緩沖區可存放 n件産品,生産者不斷地生産産品,
消費者不斷地消費産品,可以設定三個信号量
1. 進階通信
程序通信的方式分為低級方式和進階方式,
pv操作屬于低級通信方式,若用pv操作實作程序間的通信,則存在如下問題:
(1)。程式設計難度大
(2)效率低
是以引入進階通信方式
主要分為共享存儲模式,消息傳遞模式,管道通信
(1)。共享存儲模式:互相通信的程序共享某些資料結構,實作程序之間的通信
(2)。消息傳遞模式:程序間的資料交換以消息為機關,程式員直接利用系統提供的一組通信指令(原語),來實作通信
(2) 管道通信。管道是用于連接配接一個讀程序和一個寫程序。
4.。直接和間接通信
直接通信是将消息直接發送給指定程序。是以,send 和receive原語中應指出程序名字。
其調用格式如下:
send(who, meessage) 發送消息給指定程序或一組程序
receive(who ,message) 從約定程序接收消息
間接通信是以信箱為媒體來實作通信的,接收信件的程序隻需要設立一個信箱,若幹個程序都可以向同一個程序發送信件,
send (n,m)将信件m發送到信箱n中
receive(n,x)從信箱n中取一封信存入x
2.2.4程序排程
程序排程方式是指當有更高優先級的程序到來時如何配置設定cpu。
分為:可剝奪和不可剝奪兩種。
1. 三級排程
在某些作業系統中,一個作業從送出到完成需要經曆 高、中、低 三級排程
(1) 進階排程,又稱為長排程、作業排程、接納排程,它決定處于輸入池中的
哪個後備作業可以調入主系統做好運作的準備,成為一個或一組就緒程序。
系統中一個作業隻需經過一次進階排程。
(2) 中級排程。又稱為 中程排程 或 對換排程,它決定處于交換區中的就緒程序哪個可以調入記憶體,以便直接參與對cpu的競争,在記憶體資源緊張時,為了将程序調入記憶體,必須将記憶體中處于阻塞狀态的程序調出至交換區,以便為調入程序騰出空間,這相當于使處于記憶體的程序和處于盤交換區的程序交換了位置。
(3) 低級排程,又稱 短程排程 或 程序 排程 ,它決定處于記憶體中就緒程序哪個可以占用cpu,是作業系統 中最活躍、最重要的高度程式,對系統的影響很大。
2. 常用的程序高度算法有先來先服務、時間片輪轉、優先數排程和多級扤排程算法
1),先來先服務(first come first served,fcfs)
fcfs有利于長作業,有利用cpu繁忙的作業,而不利于i/o繁忙的作業。
1) 時間片輪轉
時間片輪轉算法主要用于微觀高度,其設計目标是提高資源使用率。通過時間片輪轉
,提高程序并發性和響應時間特性。方法一般有如下兩種
(1) 固定時間片。
(2) 可變時間片
2) 優先級排程
優先級排程算法是讓每一個程序都擁有一個優先數,數值大的表示優先級高,系統在
排程時總選擇優先級高的占用cpu,分為靜态優先級和動态優先級
(1)。靜态優先級:程序的優先級在建立時确定,直到程序終止都不會改變。
(2)。動态優先級:在建立一個程序時賦予一個優先級,在程序運作過程中還可以改變。
4)多級回報排程
多級後饋隊列算法是時間片輪轉和優先級算法的綜合與發展,其優點是照顧短程序以提高系統吞吐量,縮短了平均周轉時間,照顧i/o型程序以獲得較好的i/o裝置使用率和縮短響應時間,不必估計程序的執行時間,動态調節優先級。
2.2.5死鎖
在計算機系統中有各種互斥資源(如錄音帶機、列印機和繪圖儀等)和軟體資源等,若兩個程序互相要求對方已占用的資源,或同時進入臨界區則會出現問題,所謂死鎖,是指兩個以上的程序互相要求使用對方已經占有的資源而導緻無法斷續運作的現象。
常見死鎖:
(1)
程序推進順序不當引起死鎖
(2)
同類資源配置設定不當
(3)
pv操作使用不當
3. 産生死鎖的原因及條件
可以看出,産生死鎖的原因是競争資源或非法的裡程推進順序,當系統中有多個程序共享的資源不足以同時滿足它們的需求時,引起這些程序對資源的競争導緻死鎖。
産生死鎖的4個必要條件為 互斥條件、請求保持條件、不可剝奪條件和環路條件
(1) 互斥條件。程序對其所要求的資源進行排他性控制,即一次隻允許一個程序使用
(2) 請求保持條件。零星的請求資源,即已獲得部分資源又請求資源被阻塞。
(3) 不可剝奪條件。程序已獲得的資源在未使用完之前不能被剝奪,隻能在使用完成時自己釋放。
(4) 環路條件。當發生死鎖時,在程序資源有向圖中必然構成環路,其中每個程序占有了下一個程序申請的一個或多個資源,如圖2-8所示。方框表示資源,圓圈表示程序,
2.2.6線程
傳統的程序有兩個基本屬性:
可擁有資源的獨立機關
可獨立排程和配置設定的基本機關
由于在程序的建立、撤銷和切換中,系統必須為之付出較大的時間開銷,是以在系統中設定的程序數目不多、程序切換的頻率不宜過高,這就限制了并發程度的提高。引入線程後,将傳統程序的兩個基本屬性分開,線程作為排程和配置設定資源的基本機關,程序作為獨立配置設定資源的機關。使用者可以通過建立線程來完成任務,以減少程式并發執行時付出的時空開銷。
特點說明:
線程是程序中的一個實體,是被系統獨立配置設定和排程的基本機關,線程基本上不擁有資源,隻擁有一點運作中必不可少的資源(如程式計數器、一組寄存器和棧)。它可與同屬一個程序的其他線程共享程序擁有的全部資源。由于線程具有許多傳統程序所具有的特性,故稱為
輕型程序,傳統程序稱為重型程序。