OS_同步與互斥

2024-07-04:操作系統同步與互斥學習筆記

第9節 同步與互斥

  • 9.1 同步互斥的基本概念
    • 9.1.1 同步關系
    • 9.1.2 互斥關系
    • 9.1.3 臨界資源
    • 9.1.4 臨界區
    • 9.1.5 同步機制應遵循規則
  • 9.2 軟件同步機制
    • 9.2.1 單標志法
    • 9.2.2 雙標志先檢查法
    • 9.2.3 雙標志后檢查法
    • 9.2.4 peterson算法
  • 9.3 硬件同步機制
    • 9.3.1 關中斷
      • (1) 關中斷的定義
      • (2) 關中斷的缺點
    • 9.3.2 Test-and-Set 指令(TS指令)
    • 9.3.3 Swap指令
  • 9.4 信號量機制
    • 9.4.1 整型信號量
    • 9.4.2 記錄型信號量
      • (1) 利用信號量實現進程互斥
      • (2) 利用信號量實現進程同步


并發的進程或者程序在執行的時候會失去封閉性,也就是說如果有兩個程序分別地區使用一個共享的資源,可能會導致每一次運行的結果都不一樣
在這里插入圖片描述
原因就是我們沒有保護程序a和程序b都要去訪問的這個共享資源x


9.1 同步互斥的基本概念

9.1.1 同步關系

相互制約的關系就是同步,同步通俗一點理解就是它們進程之間執行的時候要有一個次序
在這里插入圖片描述


9.1.2 互斥關系

間接相互制約的關系就稱為互斥關系,eg.打印機
在這里插入圖片描述


9.1.3 臨界資源

  • 在一段時間內只允許一個進程訪問的資源,稱為臨界資源(或獨占資源)
  • 對于臨界資源的共享,各進程之間應該采用互斥方式

“生產者和消費者模型”
在這里插入圖片描述counter+ +

首先把變量放到寄存器里面
register1 = counter;
接下來對寄存器進行一個自增
register1 = register1 + 1;
再把結果返回到counter里
counter = register1;

counter- -

首先把變量放到寄存器里面
register2 = counter;
接下來對寄存器進行一個自減
register2 = register2 - 1;
再把結果返回到counter里
counter = register2;

在這里插入圖片描述

解決辦法:把counter當做臨界資源處理,令進程互斥地訪問變量counter(后面會學到同步機制)


9.1.4 臨界區

不管是硬件臨界資源還是軟件的臨界資源,多個進程必須互斥地訪問
在這里插入圖片描述
這些區本質都是代碼

  • 進入區
  • 臨界區
  • 退出區
  • 剩余區

9.1.5 同步機制應遵循規則

  • 空閑讓進

無進程處于臨界區時,表明臨界區資源空閑,應允許一個請求進入臨界區的進程立即進入自己的臨界區,有效利用資源。

  • 忙則等待

已有進程進入臨界區時,表明臨界資源正在被訪問,因而其他試圖進入臨界區的進程必須等待,以保證對臨界資源的互斥訪問

  • 有限等待

對要求訪問臨界資源的進程,應保證在有限時間內能進入自己的臨界區,避免陷入”等死“狀態

  • 讓權等待

進程不能進入自己的臨界區時,應立即釋放處理機(CPU),以免進程陷入”忙等“狀態


9.2 軟件同步機制

9.2.1 單標志法

  • 設置一公用整型變量來標明是否有進程在臨界中,如果已有進程在臨界區,則在進入區通過循環檢查進行等待,進程離開臨界區后則在退出區修改標志
  • 單標志法設置一個公用整型變量turn,指示允許進入臨界區的進程編號,turn=0時允許進程P0進入臨界區
  • turn=1時允許進程P1進入臨界區,退出臨界區將臨界區使用權賦予另一個進程(Pi推出臨界區時,令turn=j)

在這里插入圖片描述
在這里插入圖片描述
兩個進程必須交替進入臨界區,若一個進程不再進入臨界區,則另一個進程也無法進入臨界區,違背了“空閑讓進”準則


9.2.2 雙標志先檢查法

雙標志先檢查法設置一個布爾型數組flag[2],用來標記各個進程想進入臨界區的意愿,flag[i]=true,表示Pi想進入臨界區。

  • Pi進入臨界區前,先檢查對方是否進入臨界區,若想,則等待
  • 否則,將flag[i]設置為true后,再進入臨界區
  • 當Pi退出臨界區時,將flag[i]設置為false

在這里插入圖片描述

在這里插入圖片描述

  • while循環相當于紅綠燈機制
  • 設置對方的flag相當于改對方的紅綠燈
  • 但由于兩個進程都是先檢查flag[先看紅綠燈],初始時均為false[均為綠燈],所以可能兩個進程同時通過紅綠燈,一起進入臨界區

9.2.3 雙標志后檢查法

雙標志后檢查法會檢查對方的標志再設置自己的,這倆操作無法一氣呵成,于是兩個進程可能同時進入臨界區;所以想出了后檢查法,先設置自己的標志,再檢查對方的標志,若對方標志位true則等待;否則進入臨界區

在這里插入圖片描述
在這里插入圖片描述


9.2.4 peterson算法

peterson算法結合了單標志法雙標志后檢查法的思想,利用flag[]解決互斥訪問問題,在利用turn解決饑餓問題。

若雙方都爭著進入臨界區,則可讓進程將進入臨界區的機會讓給對方。
每個進程進入臨界區之前,設置自己的flag標志,在設置允許進入turn標志,之后,再同時檢測對方的flag和turn,以保證雙方同時要求進?臨界區時,只允許?個進程進入
在這里插入圖片描述
沒有做到讓權等待
在這里插入圖片描述


9.3 硬件同步機制

軟件解決各個進程互斥進入臨界區的問題有難度,而且有很大的局限性,所以計算機提供一些特殊的硬件指令來解決問題

9.3.1 關中斷

(1) 關中斷的定義

  • 關中斷在計算機組成原理里面接觸過,它指的是去修改CPU中PSW這個寄存器里面的一位,這一位會去控制現在CPU會不會去相應中斷,這個中斷只能擋住可屏蔽中斷,不可屏蔽中斷擋不住
  • 操作系統里面進程的調度都是依賴中斷去實現的,比如時鐘中斷
  • 有進程再臨界區執行期間,計算機系統關中斷,從而不會引發調度,也就不會有進程或線程切換

(2) 關中斷的缺點

  • 濫用終端會導致嚴重后果
  • 關中斷時間過長,會影響系統效率
  • 關中斷方法不適用于多CPU系統,在一個處理器上關中斷不能防止進程在其他處理器上執行相同臨界代碼

9.3.2 Test-and-Set 指令(TS指令)

在這里插入圖片描述

TS指令可以看作一個執行過程不可分割的函數過程(原語)

  • lock有兩種狀態:
    • *lock=FALSE表示資源空閑
    • *lock=TRUE表示資源正被使用

使用TS管理臨界區,要為每個臨界資源設置一個lock

  • 初值為FALSE,表示臨界資源空閑
  • 進程進入臨界區之前,先用TS測試lock,如果是FALSE,則可以進入,并將TRUE值賦給lock,關閉了臨界資源

9.3.3 Swap指令

在這里插入圖片描述
稱為對換指令,用于交換兩個字的內容

  • 為每個臨界資源設置一個全局布爾變量lock,初值FALSE
  • 利用上面的硬件指令完成進程互斥
  • 但是這種方法也會造成訪問進程不斷進行測試,處于“忙等”狀態,不符合“讓權等待”原則

9.4 信號量機制

9.4.1 整型信號量

被定義為一個用于表示資源數目的整型量S,對于這個整型信號量的操作只有三種:初始化(賦初值)、wait(自減)、signal(自增)
在這里插入圖片描述

  • wait和signal均為原子操作,執行時不可中斷
  • 當一個進程在修改某信號量時,沒有其他進程可以同時對該信號量進行修改

9.4.2 記錄型信號量

不存在“忙等”現象的進程同步機制

  • 除了一個用于代表資源數目的整型變量value外
  • 還需要增加一個進程鏈表L,用于鏈接所有等待該資源的進程

在這里插入圖片描述

  • wait操作等價于P操作
  • signal操作等價于V操作
  • 只是兩種不同的稱呼,功能完全一致
  • wait(A) = P(A)
  • signal(B) = V(A)

(1) 利用信號量實現進程互斥

設置一個互斥信號量mutex=1,然后把各進程訪問臨界資源的臨界區放在wait(mutex)和signal(mutex)之間
在這里插入圖片描述


(2) 利用信號量實現進程同步

設置一個同步信號量S=0,讓需要先執行的語句signal(S),后執行的wait(S)
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45127.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BP神經網絡與反向傳播算法在深度學習中的應用

BP神經網絡與反向傳播算法在深度學習中的應用 在神經網絡的發展歷史中,BP神經網絡(Backpropagation Neural Network)占有重要地位。BP神經網絡通過反向傳播算法進行訓練,這種算法在神經網絡中引入了一種高效的學習方式。隨著深度…

jstat命令介紹

jstat:查看JVM統計信息 一 基本情況二 基本語法2.1 option參數1. 類裝載相關的:2. 垃圾回收相關的-gc:顯示與GC相關的堆信息。包括Eden區、兩個Survivor區、老年代、永久代等的容量、已用空間、GC時間合計等信息。-gccapacity:顯示…

【C++】C++-機房收費管理系統(源碼+注釋)【獨一無二】

👉博__主👈:米碼收割機 👉技__能👈:C/Python語言 👉公眾號👈:測試開發自動化【獲取源碼商業合作】 👉榮__譽👈:阿里云博客專家博主、5…

LeetCode之最長回文子串

1.題目鏈接 5. 最長回文子串 - 力扣(LeetCode)https://leetcode.cn/problems/longest-palindromic-substring/description/ 2.題目解析 對于這道題目我們可以使用動態規劃的思路來求解,具體思路是,對于一個長度大于2的子串&…

生成式信息檢索(問答系統與信息檢索的進步)

文章目錄 什么是問答系統(Question Answering Systems)檢索系統的演變經典檢索系統“Term” 文檔搜素的最小單位倒排索引詞嵌入的出現預訓練語言模型 用于問答的語言模型設計方案選擇:封閉式與開放式問答系統對比方案A:封閉式生成…

【干貨】一文帶你看懂什么是渠道分銷?如何管理渠道分銷

在當今競爭激烈的市場環境中,企業想要擴大市場份額、提高產品或服務的可見度,有效的渠道分銷策略是關鍵。 什么是渠道分銷? 渠道分銷,簡而言之,是指企業利用中間商(如經銷商、代理商、零售商等&#xff0…

springboot解壓文件流zip壓縮包

springboot解壓文件流zip壓縮包 原始文件存儲的地方&#xff1a; 需要在當前目錄下解壓該文件&#xff0c;如下圖&#xff1a; 代碼示例&#xff1a; private Result<String> getLocationGuideLayerName(YbYstbtqTaskResolveParam params, String fishnetLayerName)…

華為od100問持續分享-1

我是一名軟件開發培訓機構老師&#xff0c;我的學生已經有上百人通過了華為OD機試&#xff0c;學生們每次考完試&#xff0c;會把題目拿出來一起交流分享。 重要&#xff1a;2024年5月份開始&#xff0c;考的都是OD統一考試&#xff08;D卷&#xff09;&#xff0c;題庫已經整…

入門PHP就來我這(高級)24 ~ Session判斷用戶登錄

有膽量你就來跟著路老師卷起來&#xff01; -- 純干貨&#xff0c;技術知識分享 路老師給大家分享PHP語言的知識了&#xff0c;旨在想讓大家入門PHP&#xff0c;并深入了解PHP語言。 上一篇我們介紹了Session管理部分的概念&#xff0c;本文通過session來改寫一些用戶登錄&…

一致性Hash問題及解決方案

Hash算法的應用場景 請求的負載均衡 Nginx的ip_hash策略可以在客戶端ip不發生變化的情況下&#xff0c;將其發出的請求始終路由到同一個目標服務器上&#xff0c;實現會話粘滯&#xff0c;避免處理session共享問題。 如果沒有ip_hash策略&#xff0c;可以通過維護一張映射表的…

常用包管理工具(apk、apt、yum)常用命令

apk 包管理工具apk是Alpine Linux中使用廣泛的一個工具&#xff0c;用于管理軟件包的安裝、更新、卸載等操作。以下是一些常用的apk命令及其解釋&#xff1a; 1.更新 apk update&#xff1a;從遠程鏡像源更新本地倉庫中的所有軟件包索引apk upgrade&#xff1a;升級本地已安裝…

ts實現將相同類型的數據通過排序放在一起

看下效果&#xff0c;可以將相同表名稱的字段放在一起 排序適用于中英文、數字 // 排序 function sortByType(items: any) {// 先按照類型進行排序items.sort((a: any, b: any) > {if (a.label < b.label) return -1;if (a.label > b.label) return 1;return 0;});r…

鴻蒙語言基礎類庫:【@ohos.application.testRunner (TestRunner)】 測試

TestRunner TestRunner模塊提供了框架測試的能力。包括準備單元測試環境、運行測試用例。 如果您想實現自己的單元測試框架&#xff0c;您必須繼承這個類并覆蓋它的所有方法。 說明&#xff1a; 開發前請熟悉鴻蒙開發指導文檔&#xff1a;gitee.com/li-shizhen-skin/harmony-…

編程語言與數據結構的關系:深度解析與探索

編程語言與數據結構的關系&#xff1a;深度解析與探索 在編程的世界中&#xff0c;編程語言和數據結構是兩個不可或缺的元素。它們之間既相互依存&#xff0c;又各自獨立&#xff0c;共同構成了編程的核心。本文將深入探索編程語言與數據結構之間的復雜關系&#xff0c;從四個…

[氮化鎵]Kevin J. Chen組新作—肖特基p-GaN HEMTs正柵ESD機理研究

這篇文章是發表在《IEEE Electron Device Letters》上的一篇關于Schottky型p-GaN柵極高電子遷移率晶體管&#xff08;HEMTs&#xff09;的正向柵極靜電放電&#xff08;ESD&#xff09;機理研究的論文。文章由Jiahui Sun等人撰寫&#xff0c;使用了基于碳化硅&#xff08;SiC&a…

8626 原子量計數

分析&#xff1a; 1. **讀取輸入**&#xff1a;首先&#xff0c;我們需要讀取輸入中的第一行&#xff0c;了解有多少個化學式需要處理。之后&#xff0c;對于每個化學式&#xff0c;我們逐行讀取并進行處理。 2. **解析化學式**&#xff1a;對于每個化學式&#xff0c;我們需要…

8627 數獨

為了判斷數獨解是否合法&#xff0c;我們需要遵循以下步驟&#xff1a; 1. **檢查每一行**&#xff1a;確保1到9每個數字在每一行中只出現一次。 2. **檢查每一列**&#xff1a;確保1到9每個數字在每一列中只出現一次。 3. **檢查每個3x3的宮**&#xff1a;確保1到9每個數字在…

細胞通訊之cellchat的流程

愿武藝晴小朋友一定得每天都開心 在細胞通訊的領域內有cellphoneDB、cellchat、iTALK等多種cell-cell communication的工具; 其中cellchat,我覺得它比較的親民和好看吧^_^ cellchat <- createCellChat(Matrix(health@assays$RNA$data,sparse = T), #用于seurat.v5對象 …

文件類:如何將excel文件轉為csv文件(且保留時間格式)?

最近有個場景&#xff0c;在ftp服務器上&#xff0c;讀取csv文件并入庫&#xff0c;但是客戶提供的一部分文件卻是xls文件&#xff0c;就得搞個將excel轉為csv文件的方法&#xff0c;話不多說直接開干。 方法 public static void convertExcelToCSV(String excelFilePath, Str…

掌握axios與Vue 3:構建高效HTTP請求的終極指南

引言 axios作為一個廣泛使用的JavaScript庫&#xff0c;因其簡潔的API、強大的功能和良好的瀏覽器兼容性&#xff0c;成為了許多前端開發者在Vue 3項目中的首選。 axios簡介 axios是什么&#xff1f; axios是一個基于Promise的HTTP客戶端&#xff0c;用于瀏覽器和node.js環境…