作業系統的基本控制原理都是圍繞程序展開的。但是,程序控制的複雜性是由作業系統的併發機制引起的。
在支援多道程式環境的通用作業系統中 ,允許乙個或若十個程序在系統中併發執行, 但由於系統硬體資源的有限性, 使得併發執行的若干程序之間會出現競爭系統有限軟硬體資源的現象。 這些資源包括處理器、 記憶體、i/0裝置以及資料庫等, 這就需要作業系統來協調和優化分配系統共享資源。 特別是在單處理器系統中,任一時刻 cpu 只能執行乙個程序, 而其他程序只能是等待 cpu 或其他資源。為了公平合理地對待所有程序, 核心為每個程序分配一小段時間一小段時間被稱為時間片。 一旦正在被執行程序的時間片用完, cpu 就立即被切換去執行另乙個等待執行的就緒程序。由於 cpu 的執行速度很快, 造成若干個程序同時在執行的一 種虛擬假像。 這就是多道程式的併發控制。
併發是指在同一時間間隔內對資源的共享。即記憶體中的多個程序分時共享cpu、記憶體以及 i/o裝置。顯然,併發機制可以高效地使用cpu,協調高速cpu與慢速外設的矛盾。但是處理併發並不容易。在記憶體中同時駐留多個程序需要特殊的硬體以及軟體的配合對其進行保護,以免各個程序的資訊被竊取並遭到攻擊。因此,現代作業系統的乙個重要內容就是管理計算機的併發操作。
作業系統要實現併發控制的設計目標,離不開硬體平台的支援。因為核心必須使用中斷機制和硬體上下文切換機制,才能實現多道程式的分時共享,否則cpu無法知道某個程序的時間片已經耗盡,需要呼叫另乙個程序執行。另外,還要考慮cpu執行程序切換的時間開銷要盡可能的小,如果cpu執行程序切換的時間開銷太大,則多道程式設計將失去意義。
作業系統中的許多迫切需要解決與研究的問題都是由併發機制而引起的。例如:圍繞若 「競爭條件」而引入了臨界區、原子操作、同步與互斥、鎖變數,等等。因此,併發控制向程式設計人員提出了新的重要的學習目標。因為併發程式並不總是按照預期的結果執行。因此除錯併發程式是一件棘手的事,而且併發程式典型的不易解決的毛病是,乙個併發程式編譯執行後,大多數情況下執行結果都很好,但是極少數的情況下它會莫名其妙地失敗,而且無法找到原因。
為了實現分時共享,核心必須將時間片已經耗盡的當前程序掛起,然後從就緒佇列中選擇,乙個具有較高優先權的程序投入執行這個過程稱為程序切換,或叫任務切換、上下文切換。
在多執行緒程式設計中,作業系統引入了鎖機制。通過鎖機制,能夠保證在多核多執行緒環境中,在某乙個時間點上,只能有乙個執行緒進入臨界區**,從而保證臨界區中運算元據的一致性。
所謂的鎖,可以理解為記憶體中的乙個整型數,擁有兩種狀態:空閒狀態和上鎖狀態。加鎖時,判斷鎖是否空閒,如果空閒,修改為上鎖狀態,返回成功;如果已經上鎖,則返回失敗。解鎖時,則把鎖狀態修改為空閒狀態。
加鎖過程用如下偽碼表示:
1、read lock;
2、判斷lock狀態;
3、if 已加鎖,失敗返回;
4、if 未加鎖,把鎖狀態設定為上鎖,返回成功。
雖然每一步是原子性的,但是每一步之間卻是可以中斷的。比如程序a在執行完2後發生中斷,中斷中程序b也執行了加鎖過程,返回中斷後就會發生兩個程序都會加鎖。
對於這個問題,計算機已經解決,方法是採用原子級彙編指令test and set 和swap。
死鎖: 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.
此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序.
主要原因:(1) 因為系統資源不足。(2) 程序執行推進的順序不合適,保證有先後順序。(3) 資源分配不當等。
(1)互斥條件:乙個資源每次只能被乙個程序使用。
(2)請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不剝奪條件: 程序已獲得的資源,在末使用完之前,不能強行剝奪。
(4)迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。
資源一次性分配:(破壞請求和保持條件)
可剝奪資源:即當某程序新的資源未滿足時,釋放已占有的資源(破壞不可剝奪條件)
資源有序分配法:系統給每類資源賦予乙個編號,每乙個程序按編號遞增的順序請求資源,釋放則相反(破壞環路等待條件)
預防死鎖的幾種策略,會嚴重地損害系統效能。因此在避免死鎖時,要施加較弱的限制,從而獲得較滿意的系統效能。由於在避免死鎖的策略中,允許程序動態地申請資源。因而,系統在進行資源分配之前預先計算資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程序;否則,程序等待。其中最具有代表性的避免死鎖演算法是銀行家演算法。
當發現有程序死鎖後,便應立即把它從死鎖狀態中解脫出來,常採用的方法有:
剝奪資源:從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態;
撤消程序:可以直接撤消死鎖程序或撤消代價最小的程序,直至有足夠的資源可用,死鎖狀態.消除為止;所謂代價是指優先順序、執行代價、程序的重要性和價值等。
《作業系統》併發
相關術語 程序的互動 根據程序相互之間知道對方的程度分類為如下幾個等級。互斥的要求 互斥的硬體支援 中斷禁用 專用機器指令 比較和交換指令,交換指令 互斥的軟體支援 訊號量看成乙個值為整數的變數。主要有三個操作 訊號量可以初始化為非負數 semwait操作使訊號量減一,若值為負數,則阻塞執行semw...
作業系統之高併發
高併發 high concurrency 是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。高併發相關常用的一些指標有響應時間 response time 吞吐量 throughput 每秒查詢率qps query per second 併發使用...
併發程式設計 作業系統
一 作業系統的發展史 1.手工操作 穿孔卡片 對應於程式和資料的已穿孔的紙帶 或卡片 裝入輸入機 啟動輸入機 把程式和資料輸入計算機記憶體 通過控制台開關啟動程式針對資料執行 計算完畢 印表機輸出計算結果 使用者取走結果並卸下紙帶 或卡片 缺點 使用者獨佔全機。不會出現因cpu資源已被其他使用者占用...