1. 程式人生 > >作業系統原理讀書筆記之程序互斥

作業系統原理讀書筆記之程序互斥

臨界資源:表示該資源一次只允許一個程序使用,也叫互斥資源或共享變數

臨界區(互斥區):各個程序對某個臨界資源實施操作的程式片段

解決程序互斥的方法

軟體方案:

1、加鎖(對free加鎖)

...
//封裝成原語lock()
while(free);
free = true;
//lock end
//臨界區
//解鎖
free = false;
...

2、DEKKER演算法

程序p1:

pturn = true;
while(qturn) {
   if(turn == 2){
      pturn = false;
      while(turn == 2);
      pturn = true;
   }
}
//臨界區
turn = 2;
pturn = false;

程序p2:
qturn = true;
while(pturn) {
    if(turn == 1){//turn==1表示讓程序p1進入臨界區
        qturn = false;
        while(turn == 1);
        qturn = true;
    }
}
//臨界區
turn = 1;
qturn = false;

缺點:浪費cpu資源,忙等待

3、PETERSON演算法

...
enter_region[i];
//臨界區
leave_region[i];
...

#define FALSE 0
#define TRUE 1
#define N 2 //只有兩個程序
int turn; //輪到哪個程序號
int interested[N]; //表明程序是否有意願進入臨界區,初始值為{0, 0}

void enter_region(int process){//process程序號表示0或1
    int other;//另外一個程序的程序號
    other = 1 - process;
    interested[process] = TRUE;
    turn = process;
    while(turn == process && interested[other] == TRUE);
}

void leave_region(int process) {
    interested[process] = FALSE;
}


硬體解決方案

1、中斷遮蔽

互斥這種問題實質是由於多個程序不斷的中斷、上時間片造成的,因此最直接的辦法是:

在進入臨界區之前關閉中斷指令,出臨界區後開啟中斷,目的在於進入臨界區時不允許中斷,從而避免多個程序同時進入一個臨界區

優點:簡單高效

缺點:限制併發能力;不適用於多處理器;由於這種操作屬於特權指令,僅適用於作業系統本身,不適用於使用者程序

2、“測試並加鎖”指令

enter_region:
    TSL REGISTER,LOCK ;複製鎖到暫存器、並將鎖置1
    CMP REGISTER,#0 ;判斷暫存器的值是否為0
    JNE enter_region ;若不是0,跳轉到enter_region
   RET ;是0則返回,進入臨界區


leave_region:
    MOVE LOCK,#0 ;將鎖置0
    RET

可以看出,這也是一種忙等待

3、交換指令

原理與2相似

在單處理情況下,忙等待必然不是一個好方法,但是在多核處理器的環境下,可以讓程序一直在某個cpu上執行而不中斷切換,這時候忙等待的開銷足以抵過程序上下文切換帶來的開銷,因此忙等待的思路又被重新提出且人們給他起了一個高大上的名字叫自旋鎖(spin lock)

相關推薦

作業系統原理讀書筆記程序互斥

臨界資源:表示該資源一次只允許一個程序使用,也叫互斥資源或共享變數 臨界區(互斥區):各個程序對某個臨界資源實施操作的程式片段 解決程序互斥的方法 軟體方案: 1、加鎖(對free加鎖) ... /

作業系統原理讀書筆記程序同步

程序同步(synchronization):指系統中多個程序中發生的事件存在某種時序關係,需要相互合作,共同完成一項任務。形象的說。一個程序執行到某一點時,要求另一夥伴程序為它提供訊息,在未獲得訊息之前,該程序進入阻塞態,獲得訊息後被喚醒進入就緒態。 程序同步機制 一、

作業系統原理讀書筆記虛擬儲存技術

虛擬儲存技術 是指:當程序執行時,先將其中一部分裝入記憶體,另一部分暫留在磁碟,當要執行的指令或訪問的資料不在記憶體時,由作業系統自動完成將他們從磁碟調入記憶體的工作 虛存與儲存體系的關係 虛存構建在儲存體系之上,把記憶體和磁碟有機的結合起來使用,從而得到一個容量很大的記

作業系統原理讀書筆記檔案系統

磁碟空間管理 有三種管理方式,對應三種資料結構 點陣圖,每一位對應一個物理塊,未使用上0,被使用是1,分配的時候需要遍歷點陣圖找到不為1的位然後分配空閒塊表,將所有空閒塊記錄在一個表中,每個表項紀錄起始塊號和空閒的塊數,有點類似於記憶體空間管理策略裡的不等長劃分。這種方式

讀書筆記面向對象的程序設計-1理解對象

-i chrom conf 理解 cnblogs object ftw 不能 pro ECMA-262把對象定義為:“無序屬性的集合,其屬性可以包含基本值、對象或者函數。” 創建自定義對象的最簡單方式就是創建一個Object的實例 eg:先創建一個名為person的對象,

第四周讀書筆記——《程序員修煉道——從小工到專家》

本周 post align 課程 tex 如何實現 知識 我想 分享 本周我讀的書是美國Andrew Hunt與David Thomas所著的《程序員修煉之道——從小工到專家》。翻開第一頁,我就可以看到無數來自其他專業人士對這本書的褒獎。俗話說,贊美總是不嫌多,我大概瀏覽了

讀書筆記ZLBOG如何選擇ASP和PHP程序以及數據庫版本?

SQLSERVER2012 數據庫 ZBLOG PHP 最近一直在研究和解決ZBLOG數據庫的事情,因為早期的博客一般都采用小型數據庫,但時至今日,數據了逐漸增大,ACCESS這樣的微軟桌面級數據庫已經不能夠處理當前的數據量了,就算是建立個博客,數據超過2萬條也壓力山大,生成一次數據要很長時間

從Paxos到Zookeeper分散式一致性原理與實踐 讀書筆記(一) 分散式架構

1.1 從集中式到分散式  1 集中式特點  結構簡單,無需考慮對多個節點的部署和節點之間的協作。  2  分散式特點 分不性:在時間可空間上隨意分佈,機器的分佈情況隨時變動 對等性:計算機之間沒有主從之分,所有計算機之間是對等的。副本是分散式系統對資料

讀書筆記《Linux作業系統奧祕》

Linux作業系統之奧祕 邱世華 著 電子工業出版社   市面上大部分關於Linux的書都著重探討Server管理,X Window操作上,缺乏Linux根基;也有些書以對Kernel的解析為主,把Linux的應用切除在外。本書試圖在這兩個極端之間

《現代作業系統讀書筆記程序和執行緒

一、程序和執行緒 什麼是程序 程序是程式執行的一個過程,程式指的是我們通常意義上的程式碼,一個程式可以被執行多次,也就產生了多個程序。程序是作業系統資源分配和排程的基本單位,是作業系統結構的基礎。每個程序都有屬於自己的地址空間。 作業系統中的程序一般由三部分組

《金子塔原理讀書筆記解決問題的邏輯

界定問題 判斷問題的是否存在,通常要看經過努力得到的結果(現狀),與希望得到的結果(目標)之間是否有差距。由某一特定背景導致的某一特定結果,稱為非期望結果(R1,即現狀,Undesired Result) 問題是指你不喜歡某一結果(比如銷售額降低),想得到其他結果(比

計算機作業系統讀書筆記___程序狀態的討論

推薦閱讀程序的引入。馬克思指出原因與結果是唯物辯證法的一對基本範疇。  為什麼會有這些狀態而不是其他狀態?換句話說,作業系統設計者提出這些狀態的用意是什麼?一句話:把CPU(處理機資源)的每一滴潛能都壓榨乾淨。I/O裝置可以閒置,記憶體在系統中程序比較少的時候也會閒置

Javascript高級程序設計--讀書筆記面向對象(一)

friend 自定義 包括 類型 有一個 問題 相同 elb 模式 哈哈哈萬物皆對象,終於到了js的面向對象篇。 一、屬性類型 (1)數據屬性 數據屬性包含一個數據值的位置,在這個位置可以寫入和讀取數值,數據屬性有四個描述器行為的特性 [[Configurable]]:表

讀書筆記《Windows核心原理與實現》

原文地址 近學習《Windows核心原理與實現》發現其博大精深,粗略過了一遍,很多東西比較茫然,看書之餘把書中涉及的函式,結構,全域性變數的所在頁數總結出來,便於以後查閱。 由於半自動半手工,難免有寫錯的地方,如有發現還請留言通知,謝謝。 函式 函式名稱 所在頁

讀書筆記應用程式與作業系統之間的關係——《作業系統真相還原》

這個知識點很好的解釋了為什麼一些程式不能跨平臺使用,比如windows與linux之間的應用程式一般不能通用,底層庫不同,可執行程式的格式也不同,後面章節中作者也點明瞭這個問題。此問題可見知乎上的討論:主要的原因是格式不同和API不同,前者更重要一些。http://www.

《大型網站技術架構核心原理與案例分析》讀書筆記RAID技術

        RAID(廉價磁碟冗餘陣列)技術主要是為了改善磁碟的訪問延遲,增強磁碟的可用性和容錯能力。目前伺服器級別的計算機都支援插入多塊磁碟(8塊或者更多),通過使用RAID技術,實現資料在多塊磁碟上的併發讀寫和資料備份。        假設伺服器有N塊磁碟。     

Javascript高級程序設計--讀書筆記面向對象(二)

原型鏈 func pro 原型對象 ets span gre {} javascrip 前面講了面向對象的封裝,這章我們就來說一說繼承 1.原型鏈 實現原型鏈有一種基本模式,其代碼大概如下 <script> function Super

《大型網站技術架構》讀書筆記六:永無止境網站的伸縮性架構

映射 應對 方法 訂閱 知識 位置 n+1 轉換 bsp 此篇已收錄至《大型網站技術架構》讀書筆記系列目錄貼,點擊訪問該目錄可獲取更多內容。 首先,所謂網站的伸縮性,指不需要改變網站的軟硬件設計,僅僅通過改變部署的服務器數量就可以擴大或者縮小網站的服務處理能力。在整個互聯

《C#圖解教程》讀書筆記四:類和繼承

intern html pan 類中訪問 ted obj 小寫 his new 本篇已收錄至《C#圖解教程》讀書筆記目錄貼,點擊訪問該目錄可獲取更多內容。 一、萬物之宗:Object   (1)除了特殊的Object類,其他所有類都是派生類,即使他們沒有顯示基類定義。   

《Pro Android Graphics》讀書筆記第二節

media data- sta power dev supported tin dsm ins Android Digital Video: Formats, Concepts and Optimization Android Digital Video Fo