操作系統原理:進程 PV 操作如何計算?全網最全三種前驅圖計算類型總結

文章目錄

  • 前言
  • 一、PV 操作定義
    • 1.1、P 操作定義
    • 1.2、V 操作定義
  • 二、串聯進程(單線前驅圖)
    • 2.1、什么是單線前驅圖?
    • 2.2、如何計算單線前驅圖的 PV?
      • 2.2.1、計算前驅節點 PV
      • 2.2.2、計算中間節點 PV
      • 2.2.3、計算尾節點 PV
  • 三、并聯進程(多線前驅圖)
    • 3.1、什么是多線前驅圖?
    • 3.2、并聯進程趨于合并
      • 3.2.1、計算前驅節點 PV
      • 3.2.2、計算中間節點 PV
      • 3.2.3、計算尾節點 PV
    • 3.3、并聯進程趨于展開
      • 3.3.1、計算前驅節點 PV
      • 3.3.2、計算中間節點 PV
      • 3.3.3、計算尾節點 PV
  • 總結


前言

關于 PV 操作基本都是結合進程管理的前驅圖來進行考察,歷年以來,無論是軟考還是操作系統的單獨考試,占有很大的比重。今天我們總結兩種在考試中常考的類型。一種是單線前驅圖,即串聯進程,另一種是多線前驅圖,即并聯進程。并聯進程下又細分為兩類:一種逐漸向后合并(進程趨于合并),另一種是前驅圖逐漸向后展開。兩種類型你都掌握了應試也就毫無問題了。

在這里插入圖片描述


一、PV 操作定義

本文中的 S 為信號量。關于前驅圖以及信號量的基礎知識本篇不作詳細介紹。

1.1、P 操作定義

S:=S-1,若 S≥0,則執行 P 操作的進程繼續執行;若 S<0,則置該進程為阻塞狀態(因為無可用資源),并將其插入阻塞隊列。

定義這么長,我們只需要謹記:執行 P 操作的進程將進入等待隊列

1.2、V 操作定義

S:=S+1,若 S>0,則執行 V 操作的進程繼續執行;若 S≤0,則從阻塞狀態喚醒一個進程,并將其插入就緒隊列,然后執行 V 操作的進程繼續。

定義這么長,我們只需要謹記:執行 V 操作的進程將從阻塞隊列中喚醒一個進程

二、串聯進程(單線前驅圖)

在這里插入圖片描述

2.1、什么是單線前驅圖?

串聯進程(單線前驅圖)是計算 PV 操作中最為簡單的。那什么是單線前驅圖呢?舉例前驅圖如下:

在這里插入圖片描述

題干信息:使用 PV 操作控制進程 P1、P2、P3 執行的過程,設置 2 個信號量分別為 S1、S2 且初值均為零。分別列出 3 個進程的進程執行圖來計算每個進程的 PV 操作。

我們可以看到 P1、P2、P3 三個進程是串聯關系,一一執行,只有前面的進程執行了后面的才可以執行,我們將這類前驅圖歸類為單線前驅圖。

2.2、如何計算單線前驅圖的 PV?

那我們計算該進程的 PV 操作呢?我們將節點分為前驅節點(即首節點),中間節點,尾節點分別計算 PV。

2.2.1、計算前驅節點 PV

對于前驅的首結點 P1 進程,進程 P1 從初始狀態執行操作的結果就是從阻塞隊列中喚醒一個進程,即喚醒 P2,故其只有 V 操作,占用一個信號量 S1,進程 P1 執行 V(S1)操作。P1 進程執行圖如下圖所示:

在這里插入圖片描述

2.2.2、計算中間節點 PV

對于中間節點 P2 進程,只有在前驅進程 P1 完成之后才可以執行,如果進程 P1 阻塞 P2 就無法正常執行,處于等待狀態,故 P2 進程是從等待 S1 的信號量,運行本進程,結果就是喚醒另一個進程即 P3 進程,并占用一個信號量 S2。P2 進程執行圖如下圖所示:

在這里插入圖片描述

2.2.3、計算尾節點 PV

對于 P3 進程,同理,只有在前驅節點 P2 執行完成將信號量 S2 傳過來之后才可以執行,然后進程結束。P3 進程執行圖如下圖所示:

在這里插入圖片描述

三、并聯進程(多線前驅圖)

3.1、什么是多線前驅圖?

多線前驅圖即并聯進程,多個進程趨于合并或者單個進程展開為多個進程,類似于初中我們所學的串并聯電路知識。下面我們分別從并聯進程趨于合并并聯進程趨于展開兩個方向來討論不同情況如何計算 PV 操作。

3.2、并聯進程趨于合并

并聯進程趨于合并是并聯進程中較為簡單的,我在這里舉一例較為經典的例題。進程前驅圖如下:

在這里插入圖片描述

題干信息:使用 PV 操作控制進程 P1、P2、P3、P4 并發執行的過程,設置 4 個信號量分別為 S1、S2、S3、S4 且初值均為零。分別列出 5 個進程的進程執行圖來計算每個進程的 PV 操作。

3.2.1、計算前驅節點 PV

對于前驅的首結點,以 P1 進程為例,進程 P1 從初始狀態執行操作的結果就是從阻塞隊列中喚醒一個進程,即喚醒 P4,故其只有 V 操作,并占用一個信號量 S1,故進程 P1 執行 V(S1)操作。P1 進程執行圖如下圖所示:

在這里插入圖片描述
同理,P2、P3 進程與 P1 相同,三個進程分別各占三個信號量S1、S2、S3,進程執行圖如下圖所示:

在這里插入圖片描述

3.2.2、計算中間節點 PV

對于中間節點進程 P4,只有在前驅進程 P1、P2、P3 都已經完成之后才可以執行,而進程 P1、P2、P3 均有可能在阻塞隊列中,故進程 P4 需要先等待 P1、P2、P3 進程的執行(即 P 操作)接收信號量,然后執行 P4 自身進程喚醒 P5 操作(即 V 操作)占用一條信號量 S4。P4 進程執行圖如下圖所示:

在這里插入圖片描述

3.2.3、計算尾節點 PV

對于 P5 進程,同理,需要接收到 P4 進程的信號量才可以運行,然后進程結束。P5 進程執行圖如下圖所示:

在這里插入圖片描述

3.3、并聯進程趨于展開

并聯進程趨于展開是并聯進程中較為難的一種,但是理清了思緒還是得心應手的。舉例題如下:

在這里插入圖片描述

題干信息:使用 PV 操作控制進程 P1、P2、P3、P4、P5 執行的過程,設置 5 個信號量分別為 S1、S2、S3、S4、S5 且初值均為零。分別列出 5 個進程的進程執行圖來計算每個進程的 PV 操作。

分析:對于本前驅圖,我們應該注意 P2、P3、P4 進程,信號量的判別根據進程標識順序走

3.3.1、計算前驅節點 PV

前驅節點進程 P1跟之前我們講到的一樣,這里不再贅述。P1 進程執行圖如下圖所示:

在這里插入圖片描述

3.3.2、計算中間節點 PV

對于進程 P2,需要等到 P1 的信號量 S1,并喚醒 P3、P4 進程分別占用信號量 S1、S2。P2 進程執行圖如下圖所示:

在這里插入圖片描述
對于進程 P3,需要等到進程 P2 的信號量 S2 才可以執行,然后激活進行 P4,占用一個信號量 S4。P3 進程執行圖如下圖所示:

在這里插入圖片描述
對于進程 P4,需要等到進程 P2、P3 的信號量 S3、S4 才可以執行,然后激活進程 P5,并占用一個信號量 S5。P4 進程執行圖如下圖所示:

在這里插入圖片描述

3.3.3、計算尾節點 PV

對于尾節點進程 P5,需要等到進程 P4 的信號量 S5 才可以執行,直到進程結束。P5 進程執行圖如下圖所示:
在這里插入圖片描述


總結

本文給大家介紹了操作系統基本原理中的一個重要知識點,進程管理之 PV 操作。我們通過對不同的前驅圖進行分類,總結了兩大類最為常見的前驅圖類型,在不同的情境下設置不同的處理思路。循序漸進,從單進程到多進程,處理思路跟著題目給出的前驅圖表示順序走(跟著順序走你會發現都是單進程的計算方式)。相信本篇文章更能讓你在計算過程中起到事半功倍的效果。

在這里插入圖片描述


我是白鹿,一個不懈奮斗的程序猿。望本文能對你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補充可以留言在文章下方,感謝大家的支持!

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

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

相關文章

Spring 容器:三種方式解決 Resource leak: ‘applicationContext‘ is never closed 問題

文章目錄前言一、Spring 容器警告產生的場景二、Spring 容器未關閉后果分析2.1、肉眼可見的警告2.2、導致的內存泄漏2.2.1、什么是內存泄漏&#xff1f;2.2.2、如何判斷內存泄漏&#xff1f;2.2.3、Java 中的 GC&#xff08;垃圾回收&#xff09;2.2.4、Java 中會導致內存泄漏的…

SSM 整合 4:Spring IoC 容器基于的兩個重要接口 BeanFactory 和 ApplicationContext

文章目錄 前言一、BeanFactory 接口1.1、加載 Spring 配置文件創建 BeanFactory 接口實例1.2、開發中的運用以及使用說明二、ApplicationContext 接口2.1、ClassPathXmlApplicationContext 創建接口實例2.2、FileSystemXmlApplicationContext 創建接口實例2.3、通過 Web 服務器…

SRA 案例:關于華為開發者聯盟基礎服務文檔內容的改進建議(華為開發者聯盟文檔深度體驗官)

文章目錄前言一、文檔中心的外鏈跳轉問題1.1、問題描述1.2、造成的問題1.3、改進建議二、圖片失真和無法放大查看問題2.1、問題描述2.2、造成的問題2.3、改進建議三、個別 SDK 詞匯缺少必要的說明3.1、問題描述3.2、造成的問題3.3、改進建議四、郵箱信息的優化4.1、問題描述4.2…

騰訊位置服務:有何優勢?如何使用平臺創建應用和服務調用的 Key?

文章目錄前言一、騰訊位置服務的優勢1.1、提供豐富的地圖產品1.2、提供行業解決方案1.3、提供其他生態維度的支持1.4、海量的數據基礎1.5、豐富的開發文檔二、初識騰訊位置服務2.1、用戶的注冊與登錄&#xff08;附專屬邀請碼&#xff09;2.2、開發者信息的完善三、創建服務平臺…

畢業生當頭一棒?憶本科四年,高校畢業生與就業單位基本要求差多少?工作還是考研?

文章目錄前言一、大學本科前兩年的生活1.1、庸庸碌碌、中規中矩1.2、收獲了愛情二、大三的改變2.1、學會自律2.2、學會自我總結2.3、眼光要具有前瞻性三、畢業答辯3.1、個人設計答辯3.2、團隊設計答辯四、南京之行4.1、銘記歷史&#xff0c;感恩先輩4.2、加強自我認知與提升五、…

Gitee 答疑:為什么從 Gitee 平臺 Pull 代碼到 STS/Eclipse 后文件亂碼?逐步排查

文章目錄前言一、產生亂碼場景1.1、錯誤描述1.2、解決思路二、解決方式2.1、檢查 Git 平臺上的源碼2.2、Git 的運行原理2.3、修改 IDE 的文本編碼格式2.4、重新打開目的文件問題解決2.5、仍存在問題看這里&#xff08;重新拉區合并&#xff09;總結前言 我們從 Gitee 平臺 Pull…

flash 異常修復:QQ 的 flash 圖標顯示異常?QQ 秀、表情加載異常?一招解決

文章目錄前言一、產生錯誤場景1.1、flash 圖標顯示異常1.2、解決思路二、安裝合適版本的 Flash Player2.1、選擇合適版本的 Flash Player2.2、安裝 Flash Player三、重啟 QQ 客戶端四、flash 動畫加載異常4.1、動畫加載異常原因分析4.2、下載安裝 flash 修復工具4.3、使用 Flas…

電腦廣告多?Windows 自帶惡意軟件刪除工具還不會使用?有必要安裝殺毒軟件嗎?

文章目錄前言一、啟動惡意軟件刪除工具二、掃描類型的選擇三、啟動軟件掃描四、惡意軟件刪除工具的說明五、對于惡意軟件處理的建議總結前言 可能有些小伙伴發現&#xff0c;哎&#xff1f;為什么我的電腦彈窗廣告這么多&#xff1f;難不成小視頻看多了&#xff1f;電腦中毒了&…

《軟件項目管理(第二版)》第 8 章——項目團隊與干系人 重點部分總結

文章目錄 前言一、簡答題二、論述題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 8 章——項目…

《軟件項目管理(第二版)》第 7 章——項目風險管理 重點部分總結

文章目錄 前言一、單選題二、填空題三、簡答題四、論述題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二…

《軟件項目管理(第二版)》第 6 章——項目質量管理 重點部分總結

文章目錄 前言一、單選題二、判斷題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 6…

《軟件項目管理(第二版)》第 5 章——項目進度和成本管理 重點部分總結

文章目錄 前言一、填空題二、簡答題三、論述題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 5…

《軟件項目管理(第二版)》第 1 章——概述 重點部分總結

文章目錄 前言一、填空題二、判斷題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 1…

《軟件項目管理(第二版)》第 2 章——項目準備和啟動 重點部分總結

文章目錄 前言一、單選題二、判斷題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 2…

《軟件項目管理(第二版)》第 3 章——項目計劃 重點部分總結

文章目錄 前言一、單選題二、填空題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 3…

《軟件項目管理(第二版)》第 4 章——項目估算 重點部分總結

文章目錄 前言一、單選題二、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 4 章——項目…

《軟件需求分析(第二版)》第 1 章——軟件需求基礎知識 重點部分總結

文章目錄 前言一、單選題二、填空題三、判斷題四、簡答題總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整…

《軟件需求分析(第二版)》第 2 章——客戶眼中的需求 重點部分總結

文章目錄 前言一、簡答題總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整、準確、清晰、具體的要求。本文…

《軟件需求分析(第二版)》第 3 章——需求工程的推薦方法 重點部分總結

文章目錄 前言一、單選題二、填空題總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整、準確、清晰、具體的…

《軟件需求分析(第二版)》第 4 章——需求分析員的職責 重點部分總結

文章目錄 前言一、簡答題總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整、準確、清晰、具體的要求。本文…