資源衝突

資源衝突

在計算機中,由於系統要運行多道程式,而系統沒有足夠相應的資源如印表機、公共佇列使每個程式都有一個。當一個進程請求使用印表機時,印表機已經被其他進程所占有,這種現象可以稱之為資源衝突,是指一個對象請求使用一個資源,而該資源已經被其他對象所占有。引起資源衝突主要原因有:資源競爭和系統資源有限。

基本介紹

資源衝突簡單來說一個對象請求的資源已經被其他對象占有。例如流水線上的一個指令需要使用已經被另一個指令占據的資源。資源衝突主要是指計算機中硬體資源的衝突。一般把資源衝突分進程級資源衝突和指令級資源衝突。前者是引起死鎖的主要原因,後者影響流水線的加速比。

進程級

死鎖

死鎖(Deadlock),是指多個進程在運行過程中因爭奪資源而造成的一種僵局(DeadlyEmbrace),當進程處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。

產生死鎖的原因可歸結為如下兩點:

(1) 競爭資源。當系統中供多個進程共享的資源如印表機、公用佇列等,其數目不足以滿足諸進程的需要時,會引起諸進程對資源的競爭而產生死鎖。

(2) 進程間推進順序非法。進程在運行過程中,請求和釋放資源的順序不當,也同樣會導致產生進程死鎖。

資源分類

可剝奪非剝奪性資源

可把系統中的資源分成兩類,一類是可剝奪性資源,是指某進程在獲得這類資源後,該資源可以再被其他進程或系統剝奪。例如,優先權高的進程可以剝奪優先權低的進程的處理機。又如,記憶體區可由存儲器管理程式把一個進程從一個存儲區移到另一個存儲區,此即剝奪了該進程原來占有的存儲區。甚至可將一個進程從記憶體調出到外存上。可見,CPU和主存均屬於可剝奪性資源。另一類資源是不可剝奪性資源,當系統把這類資源分配給某進程後,再不能強行收回,只能在進程用完後自行釋放,如磁帶機、印表機等。

資源衝突方式

競爭非剝奪性資源

在系統中所配置的非剝奪性資源,由於它們的數量不能滿足諸進程運行的需要,會使進程在運行過程中,因爭奪這些資源而陷入僵局。例如,系統中只有一台印表機 R 1 和一台磁帶機 R 2 ,可供進程 P 1 和 P 2 共享。假定 P 1 已占用了印表機 R 1 ,P 2 已占用了磁帶機 R 2 。此時,若 P 2 繼續要求印表機,P 2 將阻塞;P 1 若又要求磁帶機,P 1 也將阻塞。於是,在 P 1 與P 2 之間便形成了僵局, 兩個進程都在等待對方釋放出自己所需的資源。 但它們又都因不能繼續獲得自己所需的資源而不能繼續推進, 從而也不能釋放出自己已占有的資源,以致進入死鎖狀態。

進程推進順序非法

是指進程推進順序不是正常運行順序,導致一個進程請求使用本已經釋放的資源,仍然沒有釋放,這導致了資源衝突。

指令級衝突

流水線

流水線,亦稱管線,是現代計算機處理器中必不可少的部分,是指將計算機指令處理過程拆分為多個步驟,並通過多個硬體處理單元並行執行來加快指令執行速度。其具體執行過程類似工廠中的流水線,並因此得名。

如果作出類比,則計算機指令就是流水線傳送帶上的產品,各個硬體處理單元就是流水線旁的工人。

在使用流水線的處理器中一個指令不是在處理器的一個定時器訊號中完成的,而是被分到多個訊號中去完成,但是與此同時多個指令的分任務被同時處理。由於這些分任務比整個指令要簡單,因此可以通過使用流水線提高定時器頻率。雖然每個指令需要多個訊號後才能完成,但是通過多個指令的並行運算每個訊號內一個指令可以完成,因此通過這個方法整個速度可以提高。

資源衝突

資源衝突 資源衝突

資源衝突是指當有多條指令進入流水線後在同一機器周期內爭用同一功能部件所發生的衝突。從圖中可以看出,在時鐘4時,第i條指令的MEM段和第i+3條指令的IF段都要訪問存儲器。通常,由於數據和指令存放在同一存儲器中,且只有一個訪問口,這樣便會發生這兩條指令爭用存儲器資源的相關衝突。解決衝突的方法,一是停頓一拍流水線,通常是將後一條指令停頓一拍後再發動,如圖所示;另一種方法是再重複設定一個存儲器,使指令和數據分別存放在不同的存儲器中。應該指出的是,圖中兩條指令同時訪存造成資源相關衝突是由於第6條指令是LOAD指令的緣故,若不是LOAD指令,則由於在MEM段不訪存就不會發生對存儲器的爭用。

相關詞條

熱門詞條

聯絡我們