0327 併發 互斥和同步

2021-10-07 16:05:10 字數 2629 閱讀 5655

多工

單核cpu執行多工:作業系統輪流讓各個任務交替執行,任務1執行0.01秒,切換到任務2,任務2執行0.01秒,再切換到任務3,執行0.01秒……這樣反覆執行下去。表面上看,每個任務都是交替執行的,但是,由於cpu的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。

並行執行多工只能在多核cpu上實現,但是,由於任務數量遠遠多於cpu的核心數量,所以,作業系統也會自動把很多任務輪流排程到每個核心上執行。

併發vs並行

併發:指的是任務數多餘cpu核數,通過作業系統的各種任務排程演算法,實現用多個任務「一起」執行(實際上總有一些任務不在執行,因為切換任務的速度相當快,看上去一起執行而已)

並行:指的是任務數小於等於cpu核數,即任務真的是一起執行的

名詞解釋

原子操作:乙個函式或動作由乙個或多個指令的系列實現,對外是不可見的,要麼一組指令一起執行,要麼不執行,沒有其他程序可以看到其中間狀態或中斷此操作。原子性保證了併發程序的隔離

死鎖dealock:每個程序都在等待其他程序做完某些事情而不能繼續執行的情況

活鎖:多個程序為了響應其他程序的變化而持續改變自己的狀態但不做有用工作的情況

臨界區critical section:一段**,在這段**中程序將訪問共享資源。

互斥mutual exclusion:乙個程序在臨界區訪問共享資源時其他程序不能進入該臨界區訪問任何共享資源

實現互斥的三種方法:禁用硬體中斷;基於軟體的方法;更高階抽象(原子操作指令)

競爭條件race condition:競爭條件發生在多個程序或執行緒同時對(共享)資料進行讀寫操作,因此(資料的)最終取值取決於程序指令(對共享資料的)操作順序

飢餓starvation:乙個可執行程序儘管能繼續執行,但被排程程式無限期地忽視,而不能被排程執行的情形

作業系統設計的核心問題是程序和管理:多道程式設計技術(單處理器),多處理器技術(多處理器),分布式處理器狀態【管理程序】

併發在以下三種不同的上下文出現:

多應用程式,結構化應用程式,作業系統結構

全域性資源共享充滿危險;作業系統很難對資源進行最優化分配;定位程式設計錯誤非常困難。

作業系統可以跟蹤程序狀態,一邊進行程序的排程和切換;能夠為各個程序分配資源;必須保護每個程序的資料和物理資源;乙個程序的功能和輸出結果必須和執行速度無關(本章主題)

程序之間完全不知道相互間的存在

程序間接【通過檔案共享,共享合作等】感知別的程序存在

程序直接感知【輸入輸出】其餘程序的存在

臨界區沒有程序使用時,其他程序立即沒有延遲地進入臨界區。每個程序在臨界區的時間是有限的。

兩個或多個程序執行同一段**或訪問同一資源的現爭稱為競爭(race)。

中斷關閉中斷,一直獨佔cpu。

缺點:交替和重疊無法實現,併發處理不能實現。系統效率降低,容易引發死鎖。只適用於單處理器系統。

特殊機器指令

原子性要求:指令週期內,特殊機器指令不會被中斷。

•實現過程中:如果有程序在訪問指令的記憶體單元,則其他程序不能訪問該指令所在的記憶體單元。

通過機器硬體進行設定

缺點:程式設計師負擔加大;會發生空轉,占用cpu資源;可能引發死鎖;當乙個程序離開臨界區時有超過乙個程序在等待,可能發生飢餓。

計數訊號量

訊號量是一種資料結構,它包含乙個整數和阻塞佇列。count>0時代表有可用臨界區資源;count<0時代表在阻塞佇列等待臨界資源的程序數量。

每當乙個程序試圖試問訊號量保護的臨界資源時,必須先執行semwait操作:

count--

if count <0, then the process executing the semwait is blocked in queue. (<0)

當乙個程序釋放或產生乙個臨界資源後,必須執行semsignal操作:

count++

if count <=0, then a process blocked by a semwait operation in queue, if any, is unblocked. ( <=0 )

二元訊號量

value=0,1 等於1表示有臨界區資源可用

訊號量術語:

binary semaphore 二元訊號量【只取0 /1的訊號量】

mutex互斥訊號量【類似於二元訊號量,關鍵區別在於為其加鎖的程序和為其解鎖的程序必須為同乙個新程序】s

counting semaphore 計數訊號量=general semaphore一般訊號量=訊號量【非二元訊號量】

weak semaphore弱訊號量【沒有規定程序從佇列移出順序的訊號量稱為弱訊號量】

strong semaphore強訊號量【被阻塞時間最久的程序最先從佇列釋放,採用這種fifo策略的是強訊號量】

併發性 互斥和同步 死鎖和飢餓

二 併發的原理 在單處理器多道程式設計系統中,程序被交替執行,表現出一種併發執行的外部特徵。即使不能實現真正的並行處理,並且在程序間來回切換也需要一定的開銷,交替執行在處理效率和程式結構上還是帶來了重要的好處。在多處理器系統中,不僅可以交替執行程序,而且可以重疊執行程序。三 程序的互動 我們可以根據...

互斥和同步

1.原子操作 乙個和多個指令的序列,對外是不可分的,即沒有程序可以干預此操作。2.臨界區 是段 在這段 中程序將訪問共享資源,將會產生競爭,所以只能在乙個程序中執行。3.死鎖 兩個或者兩個以上程序都在等待其他程序做完某事,此時都處於等待狀態,產生死鎖。4.活鎖 兩個或者兩個以上程序為響應其他程序中的...

同步和互斥

臨界資源 對多個程序或者執行緒都可見的資源,容易造成爭奪的資源,稱之為臨界資源。臨界資源可能會造成程式執行的混亂。臨界區 對臨界資源進行操作的 區域稱之為臨界區,指的是一段執行 解決資源爭奪問題 同步或者互斥 同步 同步是一種合作關係,為了完成某種任務而建立的多個程序或者執行緒之間的協調呼叫,次序等...