日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[OS复习]进程互斥与同步1

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [OS复习]进程互斥与同步1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
進程互斥與同步

1.引言:多道程序設計存在的問題?

采用多道程序設計技術的操作系統,允許多個進程同時駐留內存并發執行。思考: A.如何協調多個進程對系統資源,如內存空間、外部設備等的競爭和共享? B.如何解決多個進程因為競爭資源而出現執行結果異常,甚至導致系統不穩定、失效等問題? 例如,多個進程同時申請文件打印,如何有效分配打印機??

1.1 臨界資源訪問實例1:

銀行的聯網儲蓄業務允許儲戶同時用儲蓄卡和存折對同一帳戶進行存取款操作,如果某儲戶同時(在ATM機和營業柜臺)辦理兩筆存款業務(假設分別為1000和2000元),思考:余額是如何進行修改的?
從系統的角度看,有兩個進程【服務器上感知到的】將同時對儲戶余額等數據進行修改【銀行數據管理中心-計算中心數據庫】。如果兩個進程同時讀出原余額(假設為5000元),兩個進程分別將最新余額修改為6000 (5000+1000) 和7000 (5000+2000),顯然都不正確。
原因:兩個進程同時修改同一數據,而沒有進行有效控制。
正確的方法:如果有多個進程需要同時修改某一數據,系統必須控制,一次僅允許一個進程完成讀數據,并修改數據兩件事以后,才允許別的進程對同一數據的讀和修改操作。【互斥:A進程先修改,B進程阻塞;同步:A進程完成任務后,負責喚醒B進程】

1.2 臨界資源訪問實例2:

假設1:系統中有3個進程P1、P2、P3,其中P1和P2是計算進程,P3是打印進程,每當P1或P2計算出一個結果以后,將計算結果送到緩存區中,以便P3進程從中取出數據打印。
假設2:緩沖區被劃分為0、1、2...n-1共n個單元。
有兩個指針:in指針用于計算進程存放數據,指向緩沖區中下一個空閑的單元,out指針用于打印進程取數據,指向緩沖區中下一個將取走數據的單元。
解答: 假設某時刻,0到3號單元空閑,4到6號單元被占用,這時候P1、P2進程都準備將數據送入緩沖區 ,如圖所示:
可能發生的情況: 1.?進程P1需要向緩沖區存儲數據,并知道in指針當前指向7號空閑緩沖單元。若這時進程P1的時間片用完,被中斷,調度程序調度進程P2執行。 2.?P2正好也需要向緩沖區存放數據,首先獲取in指針位置,同樣也是7,于是,P2將數據送入7號單元,并將in指針移動一格,指向8號單元,然后繼續執行其他操作。? 3.當進程P1再次被調度執行時,將從上次的斷點繼續執行,即將數據送入7號單元(覆蓋進程P2的數據),并移動in指針指向8號單元,然后繼續執行其他操作 4.進程P3不會發現上述錯誤【打印進程無法發覺數據覆蓋錯誤】,繼續從緩沖區取數據,進行打印。顯然,進程P2的相應計算結果不會被打印輸出。?
問題分析: 由于進程P1和P2共享緩沖區和位置指針,而未對這種共享進行有效控制,導致打印數據的丟失。如果控制進程P1、P2互斥地訪問緩沖區和修改位置指針,將避免這種因為并發執行而導致的程序執行結果的不確定性。

結論: 通過上述兩個例子可見,采用多道程序并發設計技術的操作系統對諸進程的并發控制是非常重要和必需的。?

2.并發控制

2.1 競爭資源

當并發進程競爭使用同一資源時,它們之間就會發生沖突。如果操作系統將資源分配給其中的某一個進程使用,另一個進程就必須等待,直到申請的資源可用時,由操作系統分配給它。如果競爭某資源的進程太多,這些進程還必須等待在一個隊列中,如就緒隊列,阻塞隊列等。一種極端的情況是,被阻塞進程永久得不到申請的資源,而死鎖【多個進程之間的僵持現象】。?
進程競爭資源首先必須解決“互斥”問題。某些資源必須互斥使用,如打印機、共享變量、表格、文件等。這類資源又稱為臨界資源【一次僅允許一個進程使用的資源】,訪問臨界資源的那段代碼稱為臨界區。任何時刻,只允許一個進程進入臨界區,以此實現進程對臨界資源的互斥訪問。


當進程需要使用臨界資源時,通過獲得臨界區的使用權實現的。
首先,在“進入區”判斷是否可以進入臨界區,如果可以進入,則必須設置臨界區使用標志,阻止其它后來的進程進入臨界區。后來的進程通過查看臨界區使用標志,知道自己不能進入臨界區,就進入阻塞隊列,將自己阻塞。
當臨界區內的進程使用完畢,退出臨界區時,即在“退出區”修改臨界區使用標志,并負責喚醒阻塞隊列中的一個進程,讓其進入臨界區。

2.2 如何保證互斥地訪問?

由于同一個臨界資源在多個共享它的進程中將對應多個臨界區,怎樣才能保證諸進程間互斥地執行臨界區呢?
這就必須保證“臨界區使用標志”是可被系統中所有進程共享的全局變量,而且諸進程對該標志的修改操作必須互斥進行。?

2.3 臨界區使用條件(互斥條件)

1. 每次只允許一個進程處于 臨界區(忙則等待);
2. 進程只能在臨界區內逗留有限時間,不得使其它進程在臨界外無限期等待(有限等待)
3. 如果臨界區空閑,則只要有進程申請就立即讓其進入(空閑讓進);
4. 進入臨界區的進程,不能在臨界區內長時間阻塞等待某事件,必須在一定期限內退出臨界區(讓權等待)
5. 不能限制進程的執行進度及處理機的數量

2.4 共同協作

多個進程常常需要共同修改某些共享變量、表格、文件數據庫等,協作完成一些功能。
必須確保它們對共享變量的修改是正確的,保證數據的完整性。
共享協作同樣涉及到互斥、死鎖和饑餓問題,但更強調對數據的寫操作必須互斥地進行。?只有該進程退出臨界區以后,才允許別的進程進入臨界區進行數據修改,以保證數據的一致性。

2.5 通信協作

當進程進行通信合作時,各個進程之間需要建立連接,進程通信需要同步和協調。進程通信的方式很多,包括消息傳遞、管道、共享存儲區等。通過消息傳遞實現進程通信時,由于沒有共享資源,故無須互斥,但仍可能出現死鎖和饑餓。
例如:3個進程P1、P2、P3,其中P1不斷嘗試與P2或P3通信,P2和P3又不斷嘗試與P1通信,如果P1與P2總能成功建立連接進行通信,而P3一直阻塞等待P1,這樣P3被長時間饑餓。?

3.競爭資源引起的死鎖與饑餓現象

2.1 競爭引起的死鎖

例如,兩個進程P1、P2,競爭資源R1、R2。
假設 ,現在P1已經占用了R1,且P2占用了R2,如果此時P1申請R2,且P2申請R1。會怎么樣呢?
結果是P1、P2雙方都占用對方申請的資源而阻塞,誰也不讓步地永久等待,這就是死鎖,如圖所示:


2.2 競爭引起的饑餓

假設有3個進程P1、P2、P3,每個進程都需要周期性的使用資源R。如果當前P1正在使用臨界資源R,P2和P3因為等待R而阻塞。
Case:當P1退出臨界區時,P2立即進入臨界區執行,若P2還未退出臨界區時,P1又申請使用臨界資源R。
:假設P2退出臨界區后,系統將R分給了P1,然后,當R空閑時,又將其分給P2,如此反復。【此時,P3就處于饑餓狀態】【該情況對P3是不公平的,應該避免】

總結

以上是生活随笔為你收集整理的[OS复习]进程互斥与同步1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。