電腦操作系統鎖機制.

来源:https://www.cnblogs.com/otakus/archive/2019/11/14/11855246.html
-Advertisement-
Play Games

電腦操作系統鎖機制. 在多線程編程中,操作系統引入了鎖機制。通過鎖機制,能夠保證在多核多線程環境中,在某一個時間點上,只能有一個線程進入臨界區代碼,從而保證臨界區中操作數據的一致性。 所謂的鎖,可以理解為記憶體中的一個整型數,擁有兩種狀態:空閑狀態和上鎖狀態。加鎖時,判斷鎖是否空閑,如果空閑,修改為 ...


電腦操作系統鎖機制.

在多線程編程中,操作系統引入了鎖機制。通過鎖機制,能夠保證在多核多線程環境中,在某一個時間點上,只能有一個線程進入臨界區代碼,從而保證臨界區中操作數據的一致性。

所謂的鎖,可以理解為記憶體中的一個整型數,擁有兩種狀態:空閑狀態和上鎖狀態。加鎖時,判斷鎖是否空閑,如果空閑,修改為上鎖狀態,返回成功;如果已經上鎖,則返回失敗。解鎖時,則把鎖狀態修改為空閑狀態。
加鎖過程用如下偽碼表示:
1、read lock;
2、判斷lock狀態;
3、如果已經加鎖,失敗返回;
4、把鎖狀態設置為上鎖;
5、返回成功。
雖然每一步是原子性的,但是每一步之間卻是可以中斷的。比如進程A在執行完2後發生中斷,中斷中進程B也執行了加鎖過程,返回中斷後就會發生兩個進程都會加鎖。
對於這個問題,電腦已經解決,方法是採用原子級彙編指令test and set 和swap。

死鎖的概念.

死鎖: 是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程.
比如 兩隻羊過獨木橋。進程比作羊,資源比作橋。若兩隻羊互不相讓,爭著過橋,就產生死鎖。

死鎖的原因.

主要原因(1) 因為系統資源不足。(2) 進程運行推進的順序不合適,保證有先後順序。(3) 資源分配不當等。

死鎖的必要條件.

產生死鎖的四個必要條件:
(1) 互斥條件:一個資源每次只能被一個進程使用。
(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件: 進程已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 迴圈等待條件:若幹進程之間形成一種頭尾相接的迴圈等待資源關係。存在一個進程等待序列{P1,P2,…,Pn},其中P1等待P2所占有的某一資源,P2等待P3所占有的某一 源,……,而Pn等待P1所占有的的某一資源,形成一個進程迴圈等待環。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

解決死鎖的四個方式.
1)忽略該問題。例如鴕鳥演算法,該演算法可以應用在極少發生死鎖的的情況下。為什麼叫鴕鳥演算法呢,(鴕鳥策略)
2)檢測死鎖並且恢復。(檢測與解除策略)
3)仔細地對資源進行動態分配,以避免死鎖。(避免策略)
4)通過破除死鎖四個必要條件之一,來防止死鎖產生。(預防策略)

C++多線程開發中,容易出現死鎖導致程式掛起的現象。
解決步驟分為三步:
1、檢測死鎖線程。
2、列印線程信息。
3、修改死鎖程式。

進程(Process)和線程(Thread).

  進程是具有一定獨立功能的程式關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。擁有獨立的記憶體單元。線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。但是不能獨立運行,必須依存在應用程式中,由應用程式提供多個線程執行控制。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程式計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共用進程所擁有的全部資源。一個線程可以創建和撤銷另一個線程,同一個進程中的多個線程之間可以併發執行。
  進程與應用程式的區別在於應用程式作為一個靜態文件存儲在電腦系統的硬碟等存儲空間中,而進程則是處於動態條件下由操作系統維護的系統資源管理實體。

進程的狀態轉換圖,及導致轉換的事件.
三個狀態:
1)就緒狀態  進程已獲得除處理機外的所需資源,等待分配處理機資源,只要分配到CPU就可執行。在某一時刻,可能有若幹個進程處於該狀態。   
2)運行狀態 占用處理機資源運行,處於此狀態的進程的數目小於等於CPU的數目。   
3)阻塞狀態  由於進程等待某種條件(如I/O操作或進程同步),在條件滿足之前無法繼續執行。該事件發生前即使把處理機分配給該進程,也無法運行。



原文鏈接:https://blog.csdn.net/lz20120808/article/details/51707247


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 上篇我們實現了ModBusTcp協議的客戶端讀寫,可是在很多時候編寫業務代碼之前是沒有現場環境的。總不能在客戶現場去寫代碼,或是蒙著眼睛寫然後求神拜佛不出錯,又或是在辦公室部署一套硬體環境。怎麼說都感覺不太合適,如果我們能用軟體模擬模擬硬體那不就完美了,以後有各種不同的硬體協議介面都模擬出來, ...
  • 要在linux上搭建支持PHP的web伺服器,開始使用了Apache+php方式,無奈配置太繁瑣了,沒有搭建成功, 轉而使用xampp伺服器組件,但是xampp預設的安裝位置是/opt目錄下,且沒有可以修改預設安裝位置的地方, 而我用的環境中該目錄下只有20M空間了, 在無法進行磁碟擴容的情況下應該 ...
  • 環境:centos7 一、 ssh連接超時設置 (1)客戶端設置 連接工具:SecureCRT 1、SecureCRT客戶端->Options(選項)->Session Options(會話設置) 2、Terminal(終端)-> 設置每60秒發送NOOP命令到伺服器保持連接 (2)服務端配置 1. ...
  • 一 前置準備1.1 前置條件相應的充足資源的Linux伺服器;設置相應的主機名,參考命令: 1 hostnamectl set-hostname k8smaster Mac及UUID唯一;若未關閉防火牆則建議放通相應埠,如下:Master節點—— 規則方向埠範圍作用使用者TCPInbound64 ...
  • 在無模擬器情況下設置: 調試模擬,點擊view菜單下registers 軟體模擬時計算兩斷點CYCLECOUNTER(在CPU registers中)的差值,乘以指令周期(MCLK)便是執行時間 ...
  • ip配置: vim /etc/network/interfaces auto eth0 iface eth0 inet static >靜態 iface eth0 inet dhcp >動態 address 192.168.0.133 netmask 255.255.255.0 gateway 19 ...
  • 字元串的MD5值 下麵這個例子是字元串 hello 的MD5值 命令解析 echo 預設是帶換行符做結尾的 echo n 可以去掉換行符 md5sum 列印或檢查MD5(128位)校驗和 文件的MD5值 下麵這個例子是文件 a.txt 的MD5值 命令解析 md5sum 列印或檢查MD5(128位) ...
  • Linux關鍵的根文件介紹 /etc:配置文件 /home:用戶的家目錄。每一個用戶的家目錄通常預設為/home/用戶名 /root:管理員的家目錄 /lib:庫文件 靜態庫:.a 動態庫:.dll .so /lib/modules:內核模塊文件 /media:掛載點目錄(常應用於移動設備) /mn ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...