程序通訊及處理器排程

2021-07-29 13:52:42 字數 4333 閱讀 2961

程序通訊及處理器排程

1、程序併發條件

在併發環境中程序執行方式與順序環境中的程序執行方式存在一些差異,主要表現在:

1.程序執行是簡短的。因為在多道程式中,處理器交替的為多個程序服務,程序執行中會出現間斷。對某個程式而言,其執行過程很可能失去原有的時序關係。

2.程式執行有可能失去其封閉性。程式的封閉性是指在同一段程式中一旦處置設定後,程式執行結果不應該受外界環境的影響。

3.程式執行有可能失去可再現性。在程式執行中由於其封閉性被打破,所以程式的再現性無法保證。也就是說,當程序兩次執行的環境發生變化是,程序執行的結果葉產生了變化,使得程式多次執行的結果不一致,無法復現上一次的執行狀態。

如果在併發環境中的程式失去了封閉性和可再現性,那麼程式執行將毫無意義。

條件:1.對程式p1的讀集合與對程式p2的寫集合的操作的交集為空

2.對程式p1的寫集合與對程式p2的讀集合的操作的交集為空

3.對程式p1的寫集合與對程式p2的寫集合的操作的交集為空

如果併發程式滿足以上條件,可以保證其執行結果滿足封閉性和可再現性。

2、程序互動方式

1.互動時程序間完全不知道對方的存在

2.互動時程序間接知道對方的存在

3.互動時程序直接知道對方的存在

3、程序互斥的實現

程序互斥基本原則:

1.程序對共享資源訪問必須採用強制的互斥方式

2.當某程序推出臨界區時,不能阻止其他程序進入臨界區

3.每個程序從申請進入臨界區到允許進入臨界區這個時間段應該是乙個有限值

4.當臨界區中沒有程序存在是,任何請求進入臨界區的程序都應該能夠立即進入

5.程序互斥對程序執行速度和使用處理器的個數應該沒有要求和限制

6.乙個程序駐留在臨界區的時間必須是有限的。

程序互斥機制的實現方式:

1>程序互斥軟體實現方法

在互斥實現中以用到一種演算法--dekker演算法,其主體思想就是在程式中設定一些標誌,讓這些標誌提醒程序是否可以進入臨界區工作;當臨界區中已有乙個程序時,調整標識的值給出警示,禁止另乙個程序在此時進入臨界區。

peterson演算法:

void p0()

boolean flag[2];

int turn;

void p0()}}

void p1()}}

2>支援程序互斥的硬體機制

1.中斷禁用

2.設計專用的機器指令

使用機器語言實現程序互斥的特點:

優點:1.適用於單處理器或共享主儲存器的多處理器系統中的多個程序互斥管理

2.構造互斥機制的方法比較簡單

3.可支援多臨界區的互斥管理,每個臨界區用自己的變數來定義

缺點:1.因為在設計中使用了忙等待,所以等待進入臨界區的程序也在消耗處理器時間

2.可能出現餓死狀態,因為若有多個程序等待進入臨界區,最後選誰進入沒有程序控制

3.可能出現死鎖情況。如:程序p2比p1優先順序高,p1被p2搶先,而p2又要使用p1已占用的資源,這時就出現了死鎖情況。

4、程序同步的含義

若存在直接制約關係的程序,又乙個簡單的管理方法,即讓程序間相互傳遞、接收具有執行條件的訊號,然後再開始工作,從而達到協同工作的目的。我們將一組併發程序中因直接制約而相互傳送訊息,協同工作的過程稱為程序間的同步。

5、生產者--消費者問題

該模型中存在同步問題,是:

1.當消費者需要使用緩衝區資料時,n個緩衝區中至少有乙個單元是被填寫過的

2.生產者程序需要填寫資料時,至少緩衝區中有乙個單元時空的

該模型中還存在互斥問題,時:

1.多個生產者程序生產資料後要填寫緩衝區時,因為要通過指標找到當前填寫的位置,這時指標變數就是臨界資源,所以它們要進行互斥操作

2,多個消費者程序需要使用資料時,因為消費指標變數時臨界資源,所以也要進行互斥操作

假設生產者程序用函式produce_item(data)填寫緩衝區,消費者程序用函式remove_item(data)使用緩衝區,設定以下訊號量:

mutex--公用訊號量,表示可用緩衝區個數,初值為1

empty--生產者私有訊號量,表示緩衝區中的空單元數,初值為n

full--消費者私有訊號量,表示緩衝區中的非零單元數,初值為0

設計方案:

#define n 100 /*定義緩衝區的緩衝單元個數*/

typedef int semaphore;/*semaphore是一種特殊的int型別*/

semaphore mutex = 1;/*控制臨界區訪問*/

semaphore empty = n;/*緩衝區空單元計數*/

semaphore full = 0;/*緩衝區已填充計數*/

void producer(void)

}void consumer(void)

}6、訊號量

訊號量是訊號處理中的特殊變數,訊號管理的基本思想就是通過簡單的訊號量,實現多個程序間的彼此合作,完成任務的併發排程。

通常對訊號量的操作有兩個:訊號傳送和訊號接收

1.傳送訊號s採用函式是signal(s)。對訊號量做signal操作時,會增加訊號量的值,如果訊號量的值不是正整數,就解除由於wait操作而阻塞的乙個程序

2.接收訊號s採用的函式是wait(s)。對訊號量做wait操作時,會減少訊號量的值。如果數值變成了負數,那麼執行wait操作的程序會被阻塞

缺陷:1.對訊號量的控制分布在整個程式中,其爭取行難以保證

2.設計中很難保證程序互斥訪問臨界區完全正確

3.使用訊號量實現程序互斥和同步的程式易讀性差

4.程式不利於修改和維護。由於模組間耦合力度大,任何一組變數或一段**的修改都可能影響到全域性。

7、管程

管程時併發管理中的乙個特殊概念,它的出現主要時因為在解決並行管理的實際問題中發現,用訊號量實現程序間同步存在著一些很難克服的弊端。

管程時一種設計語言結構,每乙個管程時乙個基本程式單位,可以被單獨編譯。管程所構成的軟體模組其內部時由乙個或多個過程、乙個初始化序列和全域性陣列構成的。

進入管程的程序管理

1.當進入管程的程序執行等待操作時,需要設防管程中的互斥權,這時就允許新的程序進入管程,原來的程序進入睡眠態。在管程內有一套程序控制機制,當程序執行喚醒操作時,從巨集**,管程中存在兩個同時處於活動狀態的程序

2.假設管程中有程序p,q,那麼它們的喚醒切換約定如下:

p等待,q繼續,知道q等待或退出

q等待,p繼續,知道p等待或退出

規定喚醒是管程中最後乙個可執行的操作。

8、經典ipc問題:讀者--寫者問題

當乙個共享資料區為多個程序提供讀寫服務時,存在一些唯讀程序(reader)和一些只寫程序(writer)。

1.任意時刻寫程序只能有1個

2.有多個讀程序請求訪問共享區時,可以同時訪問

3.若有乙個寫程序正在對共享區訪問,則將禁止所有其他讀寫程序的訪問

typedef int semaphore;/*定義整型的訊號量*/

semaphore mutex = 1;/*為控制對全域性量rc的訪問而設定的訊號量*/

semaphore db = 1;/*為控制對資料庫的訪問而設定的訊號量*/

int rc = 0; /*rc是正在讀或者等待讀的程序數,初值為0*/

void reader(void)

}void writer(void)

}9、處理器排程演算法

1>先來先服務(first come first service,fcfs)

主體思想是按照程序的某種順序進行排序,然後按照這個排序進行排程

特點:1.有利於長程序的執行,不利於短程序的進行,尤其不利於排在長程序後的短程序的執行。

2.有利於cpu繁忙型程序,不利於i/o繁忙型程序。因為對於cpu繁忙型,一旦分配了處理器就可以全力執行而不會有其他打擾;而對於i/o繁忙型程序,崗占用處理器時間步長就會碰到i/o操作,這時就會放棄處理器,效率低

2>短程序優先(shortest process next,spn)

是對fcfs的改進,目的是減少程序排程中的平均周轉時間。主體思想是對預計執行時間短的程序優先分配處理器,同時規定後來進來的短程序不搶先正在執行的程序。

優點:改善了fcfs的平均周轉時間和平均帶權周轉時間,縮短了程序等待時間,提高整體吞吐量

缺點:對長作業不利,甚至會導致長作業長時間無法得到關注而使得整體執行效能下降;另外,由於難以準確估計程序的執行時間,從而影響排程效能。

3>時間片輪轉

將程序按fcfs原則拍成乙個佇列,每次排程是將處理器分派給對首程序。當程序執行乙個時間片後,無論是否完成都將處理器讓出。

4>多級佇列演算法

排程中引入了多個就緒佇列,每個就緒佇列與某類程序特性項對應,在排程時區別對待不同的就緒佇列,以達到高效的綜合排程目標。

5>優先順序演算法

排程時按多級佇列的不同優先順序排程

處理器程序排程演算法

周轉時間用於比較同一作業流排程效能,而加權周轉時間用於比較不同作業流排程效能 簡介 根據作業新增到就緒佇列的順序進行排程。此演算法為非剝奪式,即乙個作業執行完畢,另乙個作業才會被排程到處理器。分析 作業名 作業一28 作業二9 作業三3 按此執行順序,平均周轉時間 28 28 9 28 9 3 3 ...

處理器管理與程序排程

1.理解程序狀態轉換的三態模型與七態模型 在記憶體中有三道程序並按abc的順序執行,其計算與io操作時間如下圖所示,如果每次進行程序切換時間為1ms,畫出各程序狀態轉換的時間關係圖。2.安裝python環境,用psutil庫檢視系統資訊 1 安裝 官網python pycharm jupyter n...

處理器排程

1 cpu排程的相關概念 a.cpu排程 其任務是控制 協調程序對cpu的競爭 即按一定的排程演算法從就緒佇列中選擇乙個程序,把cpu的使用權交給被選中的程序 如果沒有就緒程序,系統會安排乙個系統空閒程序或idle程序 b.cpu要解決的三個問題 cpu排程的時機 就緒佇列的改變引發了重新排程 事件...