作業系統 第6章併發程式設計

2022-06-10 20:57:07 字數 4378 閱讀 5266

1

併發程式設計

2定義:把乙個具體問題求解 設計成 若干個 可同時執行 的程式模組的方法。

3目的:充分利用cpu的每乙個核,以達到最高的處理效能。

4特性:

5 1.並行性:多個程序在多道程式系統中併發執行或者 在多處理器系統中並行執行,提高計算效率

6 2.共享性:多個程序共享軟體資源,輸入和計算共享乙個輸入緩衝區,計算和輸出共享乙個輸出緩衝區

7 3.交往性:多個程序併發執行存在制約89

10併發就是同時(巨集觀)應對 (dealing with)多件事情的能⼒,並⾏是同時(微觀)執⾏(doing)多件事情的 能⼒」。這句話⾮常透徹地闡述了併發和並⾏的區別,在於「應對」和「執 ⾏」。

1112

解釋1:並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔發生。

1314

解釋2:並行是在不同實體上的多個事件,併發是在同一實體上的多個事件。

1516

解釋3:並行是在一台處理器上「同時」處理多個任務,併發是在多台處理器上同時處理多個任務。如 hadoop 分布式集群。

1718

1920

21執行緒: 作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。

22特點:

23執行緒是獨立的,如果在乙個執行緒中發生異常,不會影響其他執行緒;乙個程序中的所有執行緒共享記憶體區域。

24一條執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。

2526

協程: 是一種使用者態的輕量級執行緒,協程的排程完全由使用者控制。

27協程擁有自己的暫存器上下文和棧。協程呼叫切換時,將暫存器上下文和棧儲存到其他地方,再切回來的時候,恢復先前儲存的暫存器上下文和棧,

28直接操作棧則 沒有核心切換的開銷,可以不加鎖的訪問全域性的變數,所以上下文切換非常快。

2930

程序: 乙個任務事件,比如python中乙個py檔案的執行就是乙個程序。 作業系統就會為每個程序分配乙個獨立的記憶體空間

3132

3334

多執行緒帶來的問題:因為是共享記憶體資源,資料被多個執行緒同時占用,執行緒競爭資料混亂不安全。

35解決辦法:

36互斥鎖

37 缺點:1.含鎖的**段只能是單執行緒執行,阻止了多執行緒的併發執行,效率降低。2.死鎖

3839

40併發程序之間的制約關係:

41程序互斥與程序同步

42程序互斥:併發程序間相互爭奪獨占性資源而產生的競爭制約關係

43程序同步:併發程序為協作完成某個任務而產生的協作制約關係。

4445

46臨界區:程序中的乙個程式段

4748 概念:程序中與訪問某個一次只能被乙個程序使用的資源(臨界資源---互斥共享變數)相關的程式段。

49形容那種競爭制約關係。

50如果兩個併發程序同時停留在相關的臨界區內,就會發生與時間相關的錯誤。

5152 因此,如果兩個程序的臨界區具有相同的臨界資源--互斥共享變數,就必須互斥進入。

53臨界區不相關,則無所謂。

5455

作業系統管理臨界區的三個基本要求:

56 1.乙個程序不能無休止的呆在臨界區

57 2.乙個程序不能無休止的等待進入臨界區

58 3.一次至多允許乙個程序停留在相關的臨界區內。

5960

臨界區的巢狀使用:

61死鎖:

62如果兩個程序都使用相同的兩個臨界區,比如

63程序1 :先進x臨界區,然後再進入y臨界區

64程序2 :先進y臨界區,然後再進入x臨界區

65 那麼當併發執行時,程序1進入x臨界區,程序2進入y臨界區,然後兩個程序都中斷,並等待。----此即死鎖。

6667

如何解決:

68規定程式申請進入低階臨界區,再進行申請高一級臨界區後,就不再允許繼續申請低階臨界區。換句話說,兩個程序都改成先進x臨界區,再進y臨界區。

6970

作業系統實現臨界區管理的嘗試:

71 鎖:乙個布林變數,表示當前是否有程序進入了臨界區,有--->true,無--->false

72 作業系統通過開關中斷的方式(但是不方便交給使用者程式使用)實現實現互斥資源的有效訪問。進臨界區---關中斷。

7374

中斷:程序將 控制權移交 系統核心,由 核心 重新分配控制權 給其他程序。

7576

77pv操作與程序互斥:

78定義乙個訊號量(作業系統是依賴這玩意實現程序同步與互斥):一種表示 等待進去臨界區的程序佇列 的資料結構

7980

pv操作與程序同步:

81緩衝區:首先看緩衝區有沒有資料,沒有就要程序掛起,進行等待 。

8283 使用者程式開發方面,如何實現程序同步與互斥:------>管程:對相關併發程序對共享變數的訪問進行抽象,提供乙個友善的併發程式設計開發環境。程序必須互斥的呼叫管程中的過程。

84管程執行中的signal處理問題:乙個等待佇列,兩種管程程序,其中一種優先順序高用來再正在執行的管程結束後釋放乙個等待佇列中的管程前,掛起結束的管程。

85霍爾管程:基於pv操作原語實現

8687

以上為程序通訊的低階方式!

8889

程序通訊:

90 1.直接通訊 send(p,信件)把信件發給程序p; receive(q,信件) 從程序q接收信件

91 2.程序間通訊:通過乙個中間信箱進行,信箱有唯一識別符號。

92send(a,信件):傳送到信箱a

93receive(a,信件)從信箱a接收信件

9495

信箱的資料結構:包括信箱特徵(如容量,指標,信件格式等)和信箱體(存放信件)

9697

98 3.高階通訊規約:

99 3.1基於流的程序通訊:

100多個程序使用乙個共享的訊息緩衝區(稱為管道、多路轉接器或套接字)

101一些程序往訊息緩衝區寫入字元流

102一些程序從訊息緩衝區讀出字元流。

103104 3.2基於rpc/xdr的客戶/伺服器計算模式的高階通訊規約

105106

阻塞和掛起的區別:

107 掛起是主動的,阻塞是被動的,阻塞其實就是暫停狀態/等待狀態。

108阻塞:正在執行的程序由於發生某事件而暫時無法繼續執行,放棄處理機制而處於暫停狀態。

109110

111死鎖:

112定義:一組程序處於死鎖狀態是指 :每乙個程序都在等待被另乙個程序占有的、不能搶占的資源。

113死鎖與系統擁有的資源數量有關,與資源分配測了有關,與程序對資源的使用要求以及併發程序的推進順序有關。

114115

產生的4個必要條件:

116 1.互斥條件:任一時刻資源僅為乙個程序獨佔

117 2.占有和等待條件:程序請求資源得不到滿足,會一直等待

118 3.不剝奪條件:無法從其他程序搶資源

119 4.迴圈等待條件:存在乙個等待鏈,每個程序分別等待它前乙個程序持有的資源。

120121

解決方法:

122 1.防止:

123靜態資源分配(預分配):程序執行前分配好一起額所需資源。長期占用,資源使用效率低

124層次分配:好一點,但使用效率也低。

125 2.避免:

126在分配資源前,先測試系統狀態是不是會發生死鎖,再決定受否分配資源。

127 銀行家思維:本程序分配了資源後,其他程序是不是能夠正常歸還所有資源。----本質就是乙個迴圈測試解決。

128129

130檢測和恢復

131檢測方法:等待資源表 和 占有資源表 根據等待占有關係 形成乙個矩陣表。 wallshall的傳遞閉包演算法檢測

132133

解決方法:

134 3.1回退一步,重新執行程序(作業系統的併發程式執行過程中產生死鎖是小概率事件)

135 3.2中止捲入死鎖的乙個程序,再重執行。

136137

cpu任務可以分為:計算密集型和讀寫密集型

138139 i/o密集型:cpu佔用率很低,大部分時間在等待i/o操作,比如涉及到網路、硬碟軟盤相關任務。讀寫階段就容易出現執行緒堵塞,適合多執行緒程式設計。

140141 python的cpython版本由於gis全域性解釋鎖的存在,每個程序只有乙個執行緒在執行。

併發程式設計 作業系統

一 作業系統的發展史 1.手工操作 穿孔卡片 對應於程式和資料的已穿孔的紙帶 或卡片 裝入輸入機 啟動輸入機 把程式和資料輸入計算機記憶體 通過控制台開關啟動程式針對資料執行 計算完畢 印表機輸出計算結果 使用者取走結果並卸下紙帶 或卡片 缺點 使用者獨佔全機。不會出現因cpu資源已被其他使用者占用...

併發程式設計 作業系統 併發 簡介

1,作業系統介紹 現代的作業系統中有 分時技術 多道技術 實時技術.多道技術 可以在計算機中同時存在多個程式,當乙個程式在進行io操作的時候,另外乙個程式可以使用cpu 分時技術 在多道技術的基礎上 反而降低了cpu的利用率,但是提高了使用者體驗 特點 多路性.若干個使用者同時使用一台計算機.圍觀上...

第6章 作業系統考察點

linux常考命令 介紹 為什麼要學習linux?如何查詢linux命令用法 man的替代工具tldr,pip install tldr 檔案 目錄操作命令 常見的檔案操作工具 檔案檢視 檔案或者日誌檢視工具 程序操作命令 掌握常見的程序操作工具 記憶體操作命令 掌握常見的記憶體操作工具 排查記憶體...