2.3_3 進程互斥的硬件實現方法

文章目錄

  • 2.3_3 進程互斥的硬件實現方法
    • (一)中斷屏蔽方法
    • (二)TestAndSet指令
    • (三)Swap指令
  • 總結
    • (四)互斥鎖

2.3_3 進程互斥的硬件實現方法

image-20240304030703149

學習提示:

1.理解各方法的原理

2.了解各方法的優缺點

(一)中斷屏蔽方法

??利用“開/關中斷指令”實現(與原語的實現思想相同,即在某進程開始訪問臨界區到結束訪問為止都不允許被中斷,也就不能發生進程切換,因此也不可能發生兩個同

時訪問臨界區的情況)

image-20240304121413039

??優點:簡單、高效。

??缺點:不適用于多處理機;只適用于操作系統內核進程,不適用于用戶進程(因為開/關中斷指令只能運行在內核態,這組指令如果能讓用戶隨意使用會很危險)

為什么“不適用于多處理機”——因為關中斷只對當前處理機有用。例如在處理機A上執行關中斷,那么處理機B仍然是正常狀態,處理機B上的進程仍然能夠訪問該臨界區。

(二)TestAndSet指令

??簡稱TS指令,也有地方稱為TestAndSetLock指令,或TSL指令。

??TSL指令是用硬件實現的,執行的過程不允許被中斷,只能一氣呵成。以下是用C語言描述的邏輯

image-20240304125307225

??若剛開始lock是false,則TSL返回的old值為false,while循環條件不滿足,直接跳過循環,進入臨界區。

??若剛開始lock是true,則執行TSL后old返回的值為true,while循環條件滿足,會一直循環,直到當前訪問臨界區的進程在退出區進行“解鎖”。

??相比軟件實現方法,TSL指令把“上鎖”和“檢查”操作用硬件的方式變成了一氣呵成的原子操作。

??優點:實現簡單,無需像軟件實現方法那樣嚴格檢查是否會有邏輯漏洞;適用于多處理機環境。

??缺點:不滿足“讓權等待”原則,暫時無法進入臨界區的進程會占用CPU并循環執行TSL指令,從而導致“忙等”。

(三)Swap指令

??有的地方叫Exchange指令,或簡稱XCHG指令。

??Swap指令是用硬件實現的,執行的過程不允許被中斷,只能一氣呵成。以下是用C語言描述的邏輯

image-20240304131627670

??邏輯上來看 Swap 和 TSL 并無太大區別,都是先記錄下此時臨界區是否已經被上鎖(記錄在 old 變 量上),再將上鎖標記 lock 設置為 true,最后檢查 old,如果 old 為 false 則說明之前沒有別的進程對臨界區上鎖,則可跳出循環,進入臨界區。

??所以,Swap指令的優點、缺點,和TSL大體上也是一樣的。

??優點:實現簡單,無需像軟件實現方法那樣嚴格檢查是否會有邏輯漏洞;適用于多處理機環境。

??缺點:不滿足“讓權等待”原則,暫時無法進入臨界區的進程會占用CPU并循環執行Swap指令,從而導致“忙等”。

總結

image-20240304132925679

(四)互斥鎖

??解決臨界區最簡單的工具就是互斥鎖(mutex lock)。一個進程在進入臨界區時應獲得鎖;在退出臨界區時釋放鎖。函數acquire()獲得鎖,而函數release()釋放鎖。

??每個互斥鎖有一個布爾變量available,表示鎖是否可用。如果鎖是可用的,調用acquire()會成功,且鎖不再可用。當一個進程試圖獲取不可用的鎖時,會被阻塞,直到鎖被釋放。

acquire() {		//獲得鎖while(!available);	//忙等待available = false;	//獲得鎖
}release() {		//釋放鎖available = true;	//釋放鎖
}

??acquire()release()的執行必須是原子操作,因此互斥鎖通常采用硬件機制來實現。

??互斥鎖的主要缺點是忙等待,當有一個進程在臨界區中,任何其他進程在進入臨界區時必須連續循環調用acquire()。當多個進程共享同一CPU時,就浪費了CPU周期。因此,互斥鎖通常用于多處理機系統,一個線程可以在一個處理機上等待,不影響其他線程的執行。

??需要連續循環忙等的互斥鎖,都可稱為自旋鎖(spin lock),如TSL指令、Swap指令、單標志法。

特性

??1.需忙等,進程時間片用完才下處理機,違反“讓權等待”。

??2.優點:等待期間不用切換進程上下文,多處理器系統中,若上鎖的時間短,則等待代價很低。

??3.常用于多處理器系統,一個核忙等,其他核照樣工作,并快速釋放臨界區。

??4.不太適用于單處理機系統,忙等的過程中不可能解鎖。

image-20240304134034138

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

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

相關文章

寶塔Linux面板遷移網站數據的詳細步驟是什么?

寶塔Linux面板遷移網站數據的詳細步驟是什么? 準備工作:確保寶塔面板處于最新版本并與服務器環境一致。如果需要遷移到其他機器,需要將遷入服務器的寶塔面板信息和API秘鑰填寫好。秘鑰的有效期為7天,建議在使用后手動關閉接口以保…

Python從0到100(二):Python語言介紹及第一個Pyhon程序

前言: 零基礎學Python:Python從0到100最新最全教程。 想做這件事情很久了,這次我更新了自己所寫過的所有博客,匯集成了Python從0到100,共一百節課,幫助大家一個月時間里從零基礎到學習Python基礎語法、Pyth…

springcloud:3.3測試重試機制

服務提供者【test-provider8001】 Openfeign遠程調用服務提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相關接口 測試遠程調用:http://localhost:8001/payment/index 服務消費者【test-consumer-resilience4j8004】 Openfeign遠程調用消費者搭建 文章地址http:/…

Vue 3 中如何使用全局 API?

Vue 3 中的全局 API 使用詳解 Vue 3 相較于 Vue 2 在全局 API 的使用上有了較大的變化。Vue 3 引入了新的全局 API 創建方式,并通過 createApp 方法替代了 Vue 2 中的 new Vue()。這種變化使得 Vue 3 在全局 API 的使用上更加靈活,也更好地支持了 tree-…

UNIapp實現局域網內在線升級

首先是UNIapp 生成apk 用Hbuilder 進行打包 可以從網站https://www.yunedit.com/reg?gotocert 使用自有證書,目測比直接使用云證書要快一些。 發布apk 網站 用IIS發布即可 注意事項中記錄如下內容 第一、需要在 iis 的MiMe 中添加apk 的格式,否則無法…

如何本地創建websocket服務端并發布到公網實現遠程訪問

文章目錄 1. Java 服務端demo環境2. 在pom文件引入第三包封裝的netty框架maven坐標3. 創建服務端,以接口模式調用,方便外部調用4. 啟動服務,出現以下信息表示啟動成功,暴露端口默認99995. 創建隧道映射內網端口6. 查看狀態->在線隧道,復制所創建隧道的公網地址加端口號7. 以…

如何實現飛書與金蝶無縫對接,提升業務效率與客戶滿意度?

一、客戶介紹 某貿易有限公司是一家專業從事進口葡萄酒和高端烈酒銷售的企業。在市場競爭日益激烈的今天,該公司始終堅持以客戶為中心,以市場為導向,不斷創新和進步。公司不僅注重傳統銷售渠道的拓展,還積極擁抱互聯網&#xff0…

processing繪制笑臉

笑臉效果圖: processing代碼: void setup(){size(1000,1000);//Canvas sizebackground(#ffcc33);//Canvas background color } void draw(){ strokeWeight(12);//face-width12px fill(#ffffcc);//face arc(500,500,200,200,0,TWO_PI);//face-size strok…

Python中的自然語言處理和文本挖掘

在Python中,自然語言處理(NLP)和文本挖掘通常涉及對文本數據進行清洗、轉換、分析和提取有用信息的過程。Python有許多庫和工具可以幫助我們完成這些任務,其中最常用的包括nltk(自然語言處理工具包)、spaCy…

統計C語言代碼行數的pyton代碼

首先是白嫖以下大神的代碼:統計python代碼行數小工具_linecount工具-CSDN博客 然后,讓ChatGPT幫我改為如下的完整代碼: import os from tkinter import Tk, Label, Button, filedialog def open_file(file_path, encoding): try: file op…

【推薦算法系列十八】:DSSM 召回算法

參考 推薦系統中 DSSM 雙塔模型匯總(二更) DSSM 和 YouTubeDNN 都是比較經典的 U2I 模型。 U2I 召回 U2I 召回也就是 User-to-Item 召回,它基于用戶的歷史行為以及用戶的一些個人信息,對系統中的候選物品進行篩選,挑…

備考2024年上海高考數學:歷年選擇題真題練一練(2014~2023)

今天距離2024年高考還有三個多月的時間,今天我們來看一下2014~2023年的上海高考數學的選擇題,從過去十年的真題中隨機抽取5道題,并且提供解析。 后附六分成長獨家制作的在線練習集,科學、高效地反復刷這些真題,吃透真題…

Dockerfile執行的時候沒有執行CMD

參考:https://blog.csdn.net/Zx13170918986/article/details/130831052 在dockerfile中編寫CMD后,發現如果執行docker run -itd這樣的指令,是沒法啟動CMD腳本的,例如以下的dockerfile FROM node:16 WORKDIR /home/ COPY start_…

Sora爆火,數字人IP如何借助AIGC視頻生成軟件制作短視頻營銷?

ChatGPT、Sora等大模型的出現,創新了短視頻內容創作生產方式。但目前Sora模型無法準確模擬復雜場景的物理特性,并且可能無法理解因果關系導致視頻失真。 廣州虛擬動力基于用戶使用需求,推出了AIGC數字人視頻生成平臺,企業、品牌可…

c++基礎學習第三天(指針,結構體)

c基礎學習第三天(指針,結構體) 文章目錄 1、指針1.1、指針的基本概念1.2、指針變量的定義和使用1.3、 指針所占內存空間1.4、空指針和野指針1.5、 const修飾指針1.5.1、const修飾指針-常量指針1.5.2、const修飾常量-指針常量1.5.3、const即修…

Android MediaCodec 簡明教程(五):使用 MediaCodec 編碼 ByteBuffer 數據,并保存為 MP4 文件

系列文章目錄 Android MediaCodec 簡明教程(一):使用 MediaCodecList 查詢 Codec 信息,并創建 MediaCodec 編解碼器Android MediaCodec 簡明教程(二):使用 MediaCodecInfo.CodecCapabilities 查…

php:實現字符串補零str_pad()

說明 str_pad($input_string, $total_length, $pad_string, $pad_type); $input_string 是要填充的原始字符串。$total_length 是填充后的字符串總長度,包括原始字符串的長度。$pad_string 是用于填充的字符,通常是零。$pad_type 是填充的位置&#xff0…

欲哭無淚,2024年軟考有變!中高項只考1次了

今天可能最重磅的消息是:2024年軟考工作安排及有關事項的通知文件在瘋傳,這份文件中提到了: 軟考高級方面: 信息系統項目管理師從2次改為了1年只考1次,放在了上半年考。 系統規劃與管理師依然保持1次,但是…

每日一練:LeeCode-707. 設計鏈表 【鏈表+虛擬頭結點+設計】

每日一練:LeeCode-707. 設計鏈表 【鏈表虛擬頭結點設計】 思路設置虛擬頭節點 本文是力扣 每日一練:LeeCode-707. 設計鏈表 【鏈表虛擬頭結點設計】 學習與理解過程,本文僅做學習之用,對本題感興趣的小伙伴可以出門左拐LeeCode-70…

0101二階與三階行列式-行列式-線性代數

一 引例 求解二元一次方程組 { a 11 x 1 a 12 x 2 b 1 a 21 x 1 a 22 x 2 b 2 \begin{cases} a_{11}x_1a_{12}x_2b_1\\ a_{21}x_1a_{22}x_2b_2\\ \end{cases} {a11?x1?a12?x2?b1?a21?x1?a22?x2?b2?? 解: 1 a 21 ? 2 a 11 ? x 2 a 11 b 2 ? a…