知識點歸納總結:
本章討論了塊裝置i/o和緩衝區管理;解釋了塊裝置i/o的原理和i/o緩衝的優點;
論述了 unix的緩衝區管理演算法,並指出了其不足之處;還利用訊號量設計了新的緩衝區管理演算法,以提高i/o緩衝區的快取效率和效能;
表明了簡單的pv演算法易於實現,快取效果好,不存在死鎖和飢餓問題;
提出了乙個比較unix緩衝區管理演算法和pv演算法效能的程式設計方案。程式設計專案還可以幫助讀者更好地理解檔案系統中的i/o操作。其中讓我最有收穫的幾個部分如下:
unix演算法的缺點:
雖然unix演算法非常簡單和簡潔.但它也有以下缺點。
(1)效率低下:該演算法依賴於重試迴圈,例如,釋放緩衝區可能會喚醒兩組程序:需要釋放的緩衝區的程序,以及只需要空閒緩衝區的程序。由於只有乙個程序可以獲取釋放的緩衝區,所以,其他所有被喚醒的程序必須重新進入休眠狀態。從休眠狀態喚醒後,每個被喚醒的程序必須從頭開始重新執行演算法,因為所需的緩衝區可能已經存在。這會導致過多的程序切換。
(2)快取效果不可預知:在unix演算法中,每個釋放的緩衝區都可被獲取'如果緩衝區 由需要空閒緩衝區的程序獲取,那麼將會重新分配緩衝區,即使有些程序仍然需要當前的緩衝區。
(3)可能會出現飢餓:unix演算法基於「自由經濟」原則,即每個程序都有嘗試的機會,但不能保證成功,因此,可能會出現程序飢餓
(4)該演算法使用只適用於單處理器系統的休眠/喚醒操作訊號量的優點:
(1)計數訊號量可用來表示可用資源的數量,例如:空閒緩衝區的數量。模擬系統的組織結構:(2)當多個程序等待乙個資源時,訊號量上的v操作只會釋放乙個等待程序,該程序不必重試,因為它保證擁有資源。
pv演算法:
buffer *getblk(dev, blk)
v(free);
p(bp);
return bp;
}bp = frist buffer taken out of freelist;
p(bp);
if (bp dirty)
reassign bp to (dev,blk);
return bp;
} }brelse(buffer *bp)
if(bp dirty && free queue has waiter)
enter bp into (tail of) freelist; v(bp);v(free);
}
(1)緩衝區唯一性:在getblk()中,如果有空閒緩衝區,則程序不會在(1)處等待,而是會搜尋dev_listc如果所需的緩衝區已經存在,則程序不會重新建立同乙個緩衝區。如果所需的緩衝區不存在,則程序會使用乙個空閒緩衝區來建立所需的緩衝區。而這個空閒緩衝區保證是存在的,如果沒有空閒緩衝區,則需要同乙個緩衝區的幾個程序可能在(1)處阻塞。當在(10)處釋放出乙個空閒緩衝區時,它僅釋放乙個程序來建立所需的緩衝區。旦建立了緩衝區,它就會存在於dev_list中,這將防止其他程序再次建立同乙個緩衝區。因此,分配的每個緩衝區都是唯一的。
(2)無重試迴圈:程序重新執行while(l)迴圈的唯一位置是在(6)處,但這不是重試,因為程序正在不斷地執行。
(3)無不必要喚醒:在getblk()中,程序可以在(1)處等待空閒緩衝區,也可以在(4)處等待所需的緩衝區,在任意一種情況下,在有緩衝區之前,都不會喚醒程序重新執行。此外,當在(9)處有乙個髒緩衝區即將被釋放並且在(1)處有多個程序等待空閒緩衝區時,該緩衝區不會被釋放而是直接被寫入。這樣可以避免不必要的程序喚醒。
(4)快取效果:在unix演算法中,每個釋放的緩衝區都可被獲取。而在新的演算法中,始終保留含等待程式的緩衝區以供重用乙隻有緩衝區不含等待程式時,才會被釋放為空閒。這樣可以提高緩衝區的快取效果,
(5)無死鎖和飢餓:在getblk()中、訊號量鎖定順序始終是單向的,即p(free),然後是p(bp),但決不會反過來,因此不會發生死鎖:如果沒有空閒緩衝區,所有清求程序都將在(1)處阻塞,這意味著,雖然有程序在等待空閒緩衝區,但所有正在使用的緩衝區都不能接納任何新使用者。這保證了繁忙緩衝區最終將被釋放為空閒緩衝區。因此,不會發生空閒緩衝區飢餓的情況。pv演算法的改進:
pv演算法非常簡單,易於實現,但是它有以下兩個缺點。首先,它的快取效果可能並非最佳。這是因為一旦沒有空閒緩衝區,所有請求程序都將被阻塞在getblk()中的(1)處,即使它們所需的緩衝區可能已經存在於緩衝區快取中了。其次,當程序從空閒列表訊號量佇列中喚醒時,它可能會發現所需的緩衝區已經存在,但處於繁忙狀態,在這種情況下,它將在(4)處再次被阻塞。嚴格地說,程序被不必要地喚醒了,因為它被阻塞了兩次。
第十二章 檔案
文字檔案 文字檔案是一種由若干字元構成的檔案,可以用文字編輯器進行閱讀或編輯。以txt py html等為字尾的檔案都是文字檔案。2.二進位制檔案 二進位制檔案一般是指不能用文字編輯器閱讀或編輯的檔案。以 mp4 png等為字尾的檔案都是二進位制檔案,如果想要開啟或修改這些檔案,必須通過特定軟體進行...
第十二章 dp
動態規劃策略 將原始問題拆分為多個子問題,將子問題結果記錄,方便復用子問題的解 遞迴 記憶化 遞推 是動態規劃的一體兩面,本質都是一樣的 遞推減少了呼叫次數,空間上還能優化,一般選擇遞推方式 遞迴 記憶化 int memo maxn 將o 2 n o n intfibonacci int n 遞推 ...
第十二章 異常
一 異常的概念 錯誤 編譯器 異常 執行期,程式沒有正常按照期望執行 異常產生時,在對應位置產生異常型別物件,程式 暫停 如果上下文有異常處理程式,對應處理 沒有則 異常向上傳播 報錯退出 異常向上傳播 如果異常在函式中產生,會傳播給函式的呼叫者 如果異常在模組的頂級位置,會傳播給引用該模組的模組 ...