在本科學習過《作業系統》的同志們都知道,現代作業系統提供了乙個併發控制環境,即系統中同時活動著的多個不同的程序,這些程序共享同乙個cpu、記憶體或 i/o裝置。特別是對於linux這種世界上最先進的作業系統來說,其多工、多使用者、分時實時混合的性質決定了多個程序在某種程度上彼此依賴或相互制約的關係,這些關係我們叫「併發關係」,按其性質可以分為同步(synchronization)和互斥(mutual exclusion)兩類。
本篇博文,我們就對同步和互斥的一些基本概念進行一下梳理,以便在以後的工作中能由乙個明確的概念。
臨界資源:系統中同時存在有許多程序,它們共享各種資源,然而有許多資源在某一時刻只能允許乙個程序使用。例如印表機、磁帶機等硬體裝置和變數、佇列等資料結構,如果有多個程序同時去使用這類資源就會造成混亂。因此必須保護這些資源,避免兩個或多個程序同時訪問這類資源。我們把某段時間內只能允許乙個程序使用的資源稱為臨界資源。
互斥:程序間相互排斥的使用臨界資源的現象,就叫互斥,很簡單。
同步:對比前面的互斥概念,還有一種併發關係叫做同步,即程序之間的關係不是相互排斥臨界資源的關係,而是相互依賴的關係。進一步的說明:就是前乙個程序的輸出作為後乙個程序的輸入,當第乙個程序沒有輸出時第二個程序必須等待。
臨界區:幾個程序若共享同一臨界資源,它們必須以互相排斥的方式使用這個臨界資源,即當乙個程序正在使用某個臨界資源且尚未使用完畢時,其它程序必須延遲對該資源的操作,當使用該資源的程序釋放該資源時,其它程序才可使用該資源,任何程序不能從中插進去使用這個臨界資源,否則將會造成資訊混亂和操作出錯。我們把訪問臨界資源的**段稱為臨界區。
併發環境有偽併發(單處理器)和真併發(多處理器)之分,但是都會造成競爭條件。使用者空間之所以需要同步,是因為使用者程式會被排程程式搶占和重新排程。在linux中,造成併發執行的原因大致有如下幾條:
1. 中斷
2. 軟中斷和tasklet
3. 核心搶占——任務的優先順序
4. 睡眠及使用者空間的同步
5. smp —— 多處理器
其中,1、2、3、4條屬於偽併發,第5條屬於真併發。
不管是真併發,還是偽併發,其本質都是系統中存在了獨佔資源,處理而併發程序控制其實是很困難的,有以下三座大山需要解決:
1、併發程序在爭用有限的全域性共享資源時容易引起衝突。
2、由於程序被排程執行的順序是動態的和隨機的,所以作業系統很難最佳的管理資源分配。
3、程式的執行結果和系統執行速度有關。
下面,我們就來看看linux是怎麼解決上述三大問題的。
首先,第乙個問題,linux是通過程序控制塊解決的,整個解決方法是圍繞乙個核心資料結構—— task_struct,給所有程序規定一些狀態,並建立一系列的演算法。我們會在程序控制專題中詳細討論。
第二個問題,關於資源的分配管理,主要有處理器分配、記憶體分配、檔案系統訪問和i/o裝置的使用。對於linux來說,是通過程序排程、虛擬記憶體管理、檔案管理和i/o裝置管理模組來解決的。我們也會在相應的專題來重點討論。
最後乙個問題,其實你好好的分析一下,可以看出,這個問題其實是解決前兩個問題後所帶來的乙個新問題,即linux必須解決程式的結果與程序的執行速度及先後次序無關的問題。這,也是我們本專題重點討論的問題。
最後乙個問題我們再進一步分析一下,我們要解決同步與互斥,其實本質上是要解決兩個問題:死鎖和飢餓。
死鎖的問題大家很熟悉了,這裡不再贅述,我重點談談飢餓。飢餓是多程序對臨界資源互斥訪問的另一種問題,如果某種資源分配演算法表面上看似很合理,但可能在一段時間內或無限期地使系統中的某些程序得不到服務,或者說這些程序訪問資源時被無限期地拒絕,我們就稱這種現象叫做「飢餓」
綜上所述,在併發程式中為了防止競爭條件,除了要做到互斥和同步外,還得保證併發程序不會出現「死鎖」、「飢餓」現象。所以,linux提出了一下四種原則來保障併發程式的可執行性:
1、每次只允許乙個程序進入臨界區
2、如果某個程序進入臨界區,其他試圖進入該臨界區的程序必須等待
3、當多個程序申請進入同一臨界區時,在有限時間內讓其中之一進入臨界區
4、位於臨界區的程序只能逗留有限時間,時間一到立即讓出
好了,關於同步與互斥最基本的概念就介紹到這裡。雖然文章不長,但內容十分重要,本專題後面將具體講解linux核心中使用的同步與互斥機制的各種實現方式,希望大家在分析每種方式的時候,都不要忘了回頭來看看這篇文章,做到實際聯絡理論,感性聯絡理性。
同步與互斥基本原理
現代作業系統提供了乙個併發控制環境,即系統中同時活動著的多個不同的程序,這些程序共享同乙個cpu 記憶體或 i o裝置。特別是對於linux這種世界上最先進的作業系統來說,其多工 多使用者 分時實時混合的性質決定了多個程序在某種程度上彼此依賴或相互制約的關係,這些關係我們叫 併發關係 按其性質可以分...
mysql的基本原理 Mysql 基本原理
mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...
pwm控制的基本原理 PWM控制的基本原理
pwm pulse width modulation 控制 脈衝寬度調製技術,通過對一系列脈衝的寬度進行調製,來等效地獲得所需要波形 含形狀和幅值 pwm控制技術在逆變電路中應用最廣,應用的逆變電路絕大部分是pwm型,pwm控制技術正是有賴於在逆 變電路中的應用,才確定了它在電力電子技術中的重要地位...