1. 程式人生 > >作業系統知識點總結(四)

作業系統知識點總結(四)

一)程序同步的基本概念:臨界資源、同步和互斥

在多道程式環境下,程序是併發執行的,不同程序之間存在著不同的相互制約關係。為了協調程序之間的相互制約關係,引入了程序同步的概念。

臨界資源

雖然多個程序可以共享系統中的各種資源,但其中許多資源一次只能為一個程序所使用,我們把一次僅允許一個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等。此外,還有許多變數、資料等都可以被若干程序共享,也屬於臨界資源。

對臨界資源的訪問,必須互斥地進行,在每個程序中,訪問臨界資源的那段程式碼稱為臨界區。為了保證臨界資源的正確使用,可以把臨界資源的訪問過程分成四個部分:

  • 進入區。為了進入臨界區使用臨界資源,在進入區要檢查可否進入臨界區,如果可以進入臨界區,則應設定正在訪問臨界區的標誌,以阻止其他程序同時進入臨界區。
  • 臨界區。程序中訪問臨界資源的那段程式碼,又稱臨界段。
  • 退出區。將正在訪問臨界區的標誌清除。
  • 剩餘區。程式碼中的其餘部分。
  1. do {
        entry section;  //進入區
        critical section;  //臨界區
        exit section;  //退出區
        remainder section;  //剩餘區
    } while (true)

同步

同步亦稱直接制約關係,它是指為完成某種任務而建立的兩個或多個程序,這些程序因為需要在某些位置上協調它們的工作次序而等待、傳遞資訊所產生的制約關係。程序間的直接制約關係就是源於它們之間的相互合作。

例如,輸入程序A通過單緩衝向程序B提供資料。當該緩衝區空時,程序B不能獲得所需資料而阻塞,一旦程序A將資料送入緩衝區,程序B被喚醒。反之,當緩衝區滿時,程序A被阻塞,僅當程序B取走緩衝資料時,才喚醒程序A。

互斥

互斥亦稱間接制約關係。當一個程序進入臨界區使用臨界資源時,另一個程序必須等待, 當佔用臨界資源的程序退出臨界區後,另一程序才允許去訪問此臨界資源。

例如,在僅有一臺印表機的系統中,有兩個程序A和程序B,如果程序A需要列印時, 系統已將印表機分配給程序B,則程序A必須阻塞。一旦程序B將印表機釋放,系統便將程序A喚醒,並將其由阻塞狀態變為就緒狀態。

為禁止兩個程序同時進入臨界區,同步機制應遵循以下準則:

  • 空閒讓進。臨界區空閒時,可以允許一個請求進入臨界區的程序立即進入臨界區。
  • 忙則等待。當已有程序進入臨界區時,其他試圖進入臨界區的程序必須等待。
  • 有限等待。對請求訪問的程序,應保證能在有限時間內進入臨界區。
  • 讓權等待。當程序不能進入臨界區時,應立即釋放處理器,防止程序忙等待。

二 )實現臨界區互斥的基本方法

軟體實現方法

在進入區設定和檢查一些標誌來標明是否有程序在臨界區中,如果已有程序在臨界區,則在進入區通過迴圈檢查進行等待,程序離開臨界區後則在退出區修改標誌。

1) 演算法一:單標誌法。

該演算法設定一個公用整型變數turn,用於指示被允許進入臨界區的程序編號,即若turn=0,則允許P0程序進入臨界區。該演算法可確保每次只允許一個程序進入臨界區。但兩個程序必須交替進入臨界區,如果某個程序不再進入臨界區了,那麼另一個程序也將進入臨界區(違背“空閒讓進”)這樣很容易造成資源利用的不充分。

// P0程序
while(turn!=0);
critical section;
turn=1;
remainder section;
// P1程序
while(turn!=1); // 進入區
critical section; // 臨界區
turn = 0; // 退出區
remainder section; // 剩餘區

2) 演算法二:雙標誌法先檢查。

該演算法的基本思想是在每一個程序訪問臨界區資源之前,先檢視一下臨界資源是否正被訪問,若正被訪問,該程序需等待;否則,程序才進入自己的臨界區。為此,設定了一個數據flag[i],如第i個元素值為FALSE,表示Pi程序未進入臨界區,值為TRUE,表示Pi程序進入臨界區。

// Pi 程序
while(flag[j]); // ①
flag[i]=TRUE; // ③
critical section;
flag[i] = FALSE;
remainder section;
// Pj 程序
while(flag[i]); // ② 進入區
flag[j] =TRUE; // ④ 進入區
critical section; // 臨界區
flag[j] = FALSE; // 退出區
remainder section; // 剩餘區
優點:不用交替進入,可連續使用;缺點:Pi和Pj可能同時進入臨界區。按序列①②③④ 執行時,會同時進入臨界區(違背“忙則等待”)。即在檢查對方flag之後和切換自己flag 之前有一段時間,結果都檢查通過。這裡的問題出在檢查和修改操作不能一次進行。

3) 演算法三:雙標誌法後檢查。

演算法二是先檢測對方程序狀態標誌後,再置自己標誌,由於在檢測和放置中可插入另一個程序到達時的檢測操作,會造成兩個程序在分別檢測後,同時進入臨界區。為此,演算法三釆用先設定自己標誌為TRUE後,再檢測對方狀態標誌,若對方標誌為TURE,則程序等待;否則進入臨界區。

  1. // Pi程序
  2. flag[i] =TRUE;
  3. while(flag[j]);
  4. critical section;
  5. flag[i] =FLASE;
  6. remainder section;
  1. // Pj程序
  2. flag[j] =TRUE; // 進入區
  3. while(flag[i]); // 進入區
  4. critical section; // 臨界區
  5. flag [j] =FLASE; // 退出區
  6. remainder section; // 剩餘區


當兩個程序幾乎同時都想進入臨界區時,它們分別將自己的標誌值flag設定為TRUE,並且同時檢測對方的狀態(執行while語句),發現對方也要進入臨界區,於是雙方互相謙讓,結果誰也進不了臨界區,從而導致“飢餓”現象。

4)演算法四:Peterson’s Algorithm。

為了防止兩個程序為進入臨界區而無限期等待,又設定變數turn,指示不允許進入臨界區的程序編號,每個程序在先設定自己標誌後再設定turn 標誌,不允許另一個程序進入。這時,再同時檢測另一個程序狀態標誌和不允許進入標誌,這樣可以保證當兩個程序同時要求進入臨界區,只允許一個程序進入臨界區。

  1. // Pi程序
  2. flag[i]=TURE; turn=j;
  3. while(flag[j]&&turn==j);
  4. critical section;
  5. flag[i]=FLASE;
  6. remainder section;
  1. // Pj程序
  2. flag[j] =TRUE;turn=i; // 進入區
  3. while(flag[i]&&turn==i); // 進入區
  4. critical section; // 臨界區
  5. flag[j]=FLASE; // 退出區
  6. remainder section; // 剩餘區


本演算法的基本思想是演算法一和演算法三的結合。利用flag解決臨界資源的互斥訪問,而利用turn解決“飢餓”現象。

硬體實現方法

本節對硬體實現的具體理解對後面的訊號量的學習很有幫助。計算機提供了特殊的硬體指令,允許對一個字中的內容進行檢測和修正,或者是對兩個字的內容進行交換等。通過硬體支援實現臨界段問題的低階方法或稱為元方法。

1) 中斷遮蔽方法

當一個程序正在使用處理機執行它的臨界區程式碼時,要防止其他程序再進入其臨界區訪問的最簡單方法是禁止一切中斷髮生,或稱之為遮蔽中斷、關中斷。因為CPU只在發生中斷時引起程序切換,這樣遮蔽中斷就能保證當前執行程序將臨界區程式碼順利地執行完,從而保證了互斥的正確實現,然後再執行開中斷。其典型模式為:

關中斷;
臨界區;
開中斷;


這種方法限制了處理機交替執行程式的能力,因此執行的效率將會明顯降低。對核心來說,當它執行更新變數或列表的幾條指令期間關中斷是很方便的,但將關中斷的權力交給使用者則很不明智,若一個程序關中斷之後不再開中斷,則系統可能會因此終止。

2) 硬體指令方法

TestAndSet指令:這條指令是原子操作,即執行該程式碼時不允許被中斷。其功能是讀出指定標誌後把該標誌設定為真。指令的功能描述如下:

  1. boolean TestAndSet(boolean *lock){
  2. boolean old;
  3. old = *lock;
  4. *lock=true;
  5. return old;
  6. }


可以為每個臨界資源設定一個共享布林變數lock,表示資源的兩種狀態:true表示正被佔用,初值為false。在程序訪問臨界資源之前,利用TestAndSet檢查和修改標誌lock;若有程序在臨界區,則重複檢查,直到程序退出。利用該指令實現程序互斥的演算法描述如下:

  1. while TestAndSet (& 1 ock);
  2. // 程序的臨界區程式碼段;
  3. lock=false;
  4. // 程序的其他程式碼


Swap指令:該指令的功能是交換兩個位元組的內容。其功能描述如下。

  1. Swap(boolean *a, boolean *b){
  2. boolean temp;
  3. Temp=*a;
  4. *a = *b;
  5. *b = temp;
  6. }


注意:以上對TestAndSet和Swap指令的描述僅僅是功能實現,並非軟體實現定義,事實上它們是由硬體邏輯直接實現的,不會被中斷。

應為每個臨界資源設定了一個共享布林變數lock,初值為false;在每個程序中再設定一個區域性布林變數key,用於與lock交換資訊。在進入臨界區之前先利用Swap指令交換lock 與key的內容,然後檢查key的狀態;有程序在臨界區時,重複交換和檢查過程,直到程序退出。利用Swap指令實現程序互斥的演算法描述如下:

  1. key=true;
  2. while(key!=false)
  3. Swap(&lock, &key);
  4. // 程序的臨界區程式碼段;
  5. lock=false;
  6. // 程序的其他程式碼;


硬體方法的優點:適用於任意數目的程序,不管是單處理機還是多處理機;簡單、容易驗證其正確性。可以支援程序內有多個臨界區,只需為每個臨界區設立一個布林變數。
硬體方法的缺點:程序等待進入臨界區時要耗費處理機時間,不能實現讓權等待。從等待程序中隨機選擇一個進入臨界區,有的程序可能一直選不上,從而導致“飢餓”現象。

整理不易,多謝支援:

相關推薦

作業系統知識點總結

一)程序同步的基本概念:臨界資源、同步和互斥 在多道程式環境下,程序是併發執行的,不同程序之間存在著不同的相互制約關係。為了協調程序之間的相互制約關係,引入了程序同步的概念。 臨界資源 雖然多個程序可以共享系統中的各種資源,但其中許多資源一次只能為一個程序所使用,我們把

作業系統知識點總結十三共享檔案硬連結和軟連結

檔案共享使多個使用者(程序)共享同一份檔案,系統中只需保留該檔案的一份副本。如果系統不能提供共享功能,那麼每個需要該檔案的使用者都要有各自的副本,會造成對儲存空間的極大浪費。隨著計算機技術的發展,檔案共享的範圍已由單機系統發展到多機系統,進而通過網路擴充套件到全球。這些檔案的分享是通過分散式檔案

Java SE基礎知識點總結

構造方法一般用於初始化物件,為正在建立的成員變數賦初值。 建立物件時一定會呼叫一個構造方法,如果沒有寫構造方法則編譯器會為類加上一個預設的構造方法。 構造方法中的this:訪問物件屬性、訪問例項方法、呼叫過載的其他的構造方法(只能位於第一行,不會觸發新物件的建

作業系統知識點總結作業系統概述

《作業系統概述》 作業系統結構圖: (1)作業系統的基本概念:作業系統(Operating System, OS)是指控制和管理整個計算機系統的硬體和軟體資源,併合理地組織 排程計算機的工作和資源的分配,以提供給使用者和其他軟體方便的介面和環境的程式集合。 (

Java知識點總結泛型和集合

GenericStack<Integer> intStack = new GenericStack<>();泛型方法(靜態方法定義): public static <E extends GeometricObject> boolean equalArea(E object

作業系統知識點總結檔案保護:檔案訪問型別和訪問控制

為了防止檔案共享可能會導致檔案被破壞或未經核準的使用者修改檔案,檔案系統必須控制使用者對檔案的存取,即解決對檔案的讀、寫、執行的許可問題。為此,必須在檔案系統中建立相應的檔案保護機制。 檔案保護通過口令保護、加密保護和訪問控制等方式實現。其中,口令保護和加密保護是為了防止使用者檔案被他人存取或竊

軟考總結---作業系統知識

前言:下面和大家分享一下第四章的知識點,希望對大家有幫助。 (一)作業系統概述 1.【作業系統定義】 能有效地組織和管理系統中的各種軟/硬體資源,合理地組織計算機系統工作流程,控制程式的執行,並且向用戶提供一個良好的工作環境和友好的介面。 2.【作用】 通過對資源管理

作業系統知識點總結十八作業系統輸入/輸出(I/O)管理

(一)IO分類 I/O裝置管理是作業系統設計中最凌亂也最具挑戰性的部分。由於它包含了很多領域的不同裝置以及與裝置相關的應用程式,因此很難有一個通用且一致的設計方案。所以在理解裝置管理之前,應該先了解具體的I/O裝置型別。 計算機系統中的I/O裝置按使用特性可分為以下型別: 1) 人機互動類外

作業系統知識點總結十七檔案系統知識點總結

磁碟結構 引導控制塊(Boot Control Block)包括系統從該分割槽引導作業系統所需要的資訊。如果 磁碟沒有作業系統,那麼這塊的內容為空。它通常為分割槽的第一塊。UFS稱之為引導塊(Boot Block); NTFS 稱之為分割槽引導扇區(Partition B

作業系統知識點總結十六磁碟的結構,磁碟排程演算法

(一)磁碟結構 磁碟(Disk)是由表面塗有磁性物質的金屬或塑料構成的圓形碟片,通過一個稱為磁頭 的導體線圈從磁碟中存取資料。在讀/寫操作期間,磁頭固定,磁碟在下面高速旋轉。如圖 4-23所示,磁碟的盤面上的資料儲存在一組同心圓中,稱為磁軌。每個磁軌與磁頭一樣寬, 一個盤面有上千個磁軌。磁軌

作業系統知識點總結十五檔案層次結構,目錄實現和檔案實現

(一)檔案層次結構 現代作業系統有多種檔案系統型別(如FAT32、NTFS、 ext2、ext3、ext4等),因此檔案系統的層次結構也不盡相同。圖4-11是一種合理的層次結構。   圖4-11檔案系統層次結構 1) 使用者呼叫介面 檔案系統為使用者提供與檔案及目錄有

計算機作業系統知識點總結前3章

第一章 作業系統引論1、作業系統是什麼?作業系統為使用者完成所有“硬體相關,應用無關“的工作,以給使用者方便、高效、安全的使用環境1.1、定義:   作業系統是一個大型的程式系統,它負責計算機的全部軟、硬體資源的分配、排程工作,控制並協調多個任務的活動,實現資訊的存取和保護。

salesforce零基礎學習九十六專案中的零碎知識點總結

本篇參考: https://developer.salesforce.com/docs/atlas.en-us.216.0.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm https://developer.salesforce.com/doc

react native 知識點總結

修改 ltp 組件 改變 set 覆蓋 sta 一個 個數 一、關於react native 版本的升級 參照文檔:http://reactnative.cn/docs/0.45/upgrading.html react-native -v

xml布局內容總結--Android

odi utf lns data- state 常常 使用 查看 andro (1)對於xml編寫界面較復雜的情況下,使用include會使得編寫和查看更清楚 <LinearLayout android:layout_width=&

權限項目總結 shiro 授權

oge als 註解 沒有 概述 當前 http ade ava 概述 Authorization(授權):不難理解,授權就是用來控制當前訪問用戶在訪問系統資源權限。 這個詞也做證書的解釋,從證書這個角度來講,推斷是否擁有對資源訪問的權限時。當前用戶

I/O操做總結

zab 方法 字符 add i/o spa 我們 ppr bsp 前面已經把java io的主要操作講完了 這一節我們來說說關於java io的其他內容 Serializable序列化 實例1:對象的序列化 1 2 3 4 5 6 7 8 9 10 11

前端筆記----jquery入門知識點總結

outer 尺寸 對象 層級 ani 入門 fontsize fun click http://www.cnblogs.com/cwp-bg/p/7633623.html 一、jquery的加載方法 $(document).ready(function(){js代碼});

JAVA學習總結

服務 共同點 運行 blog 重要 程序員 ride 處理 mob 1.接口 interface 1.1語法:   修飾符 interface 接口名{     常量     都是抽象方法  } 修飾符:默認 | public接口名:自定義,規則與類名相同,一般I字母打頭:

linux基礎知識總結

基礎知識第四周學習總結 目錄 一.知識脈絡圖二.軟件包管理三.磁盤管理 一.知識脈絡圖 二.軟件包管理 1.軟件組成 二進制應用程序的組成部分: 二進制文件,庫文件,配置文件,幫助文件 庫文件: 庫文件是一個很特殊的存在,他對於很多程序起著支持作用,如果不小心