資訊保安系統設計與實現 第十二章學習筆記

2022-09-09 06:24:11 字數 3152 閱讀 9272

20191331 lyx

學習理解塊裝置i/o和緩衝區管理;理解塊裝置i/o的原理和i/o緩衝的優點;討論unix的緩衝區管理演算法;掌握pv演算法,通過程式設計專案更好的理解檔案系統中的i/o操作。

什麼是塊裝置:塊裝置是i/o裝置中的一類,是將資訊儲存在固定大小的塊中,每個塊都有自己的位址,還可以在裝置的任意位置讀取一定長度的資料,例如硬碟,u盤,sd卡等。

檔案系統使用一系列i/o緩衝區作為塊裝置的快取記憶體。當程序試圖讀取(dev,blk)標識的磁碟塊時。它首先在緩衝區快取中搜尋分配給磁碟塊的緩衝區。如果該緩衝區存在並且包含有效資料、那麼它只需從緩衝區中讀取資料、而無須再次從磁碟中讀取資料塊。如果該緩衝區不存在,它會為磁碟塊分配乙個緩衝區,將資料從磁碟讀人緩衝區,然後從緩衝區讀取資料。

當某個塊被讀入時、該緩衝區將被儲存在緩衝區快取中,以供任意程序對同乙個塊的下一次讀/寫請求使用。

當程序寫入磁碟塊時,它首先會獲取乙個分配給該塊的緩衝區。然後,它將資料寫入緩衝區,將緩衝區標記為臟,以延遲寫入,並將其釋放到緩衝區快取中。

typdef struct buf buffer;

buffer buf[nbuf], *freelist; // nbuf buffers and free buffer list

struct devtabdevtab[ndev];
使用訊號量的緩衝區管理演算法:假設有乙個單處理器核心(一次執行乙個程序)。使用計數訊號量上的p/v來設計滿足以下要求的新的緩衝區管理演算法∶

保證資料一致性。

良好的快取效果。

高效率∶沒有重試迴圈,沒有不必要的程序"喚醒"。

無死鎖和飢餓。

buffer *getb1k(dev,blk):

while(1)

if(bp dirty && free queue has waiter)

enter bp into(tail of) freelist;v(bp);v(free);

}

pv演算法的優越性:1.系統組織使用者介面:這是模擬系統的使用者介面部分。它會提示輸人命令、顯示命令執行、顯示系統狀態和執行結果等。在開發過程中,讀者可以手動輸入命令來執行任務。在最後測試過程中,任務應該有自己的輸入命令序列。例如,各任務可以讀取包含命令的輸入檔案。

2.多工處理系統

3.磁碟驅動程式

start io():維護裝置i/o佇列,並對i/o 佇列中的緩衝區執行 i/o操作。

中斷處理程式:在每次i/o操作結束時,磁碟控制器會中斷cpu。當接收到中斷後,中斷處理程式首先從 intstatus中讀取中斷狀態。

4.磁碟中斷

從磁碟控制器到cpu的中斷由 sigusr1(#10)訊號實現。在每次i/o操作結束時,磁碟控制器會發出kill(ppid,sigusr1)系統呼叫,向父程序傳送 sigusr1訊號,充當虛擬cpu中斷。

為防止競態條件,磁碟控制器必須要從cpu接收乙個中斷確認,才能再次中斷。

5.虛擬磁碟

使用linux系統呼叫lseek()、read()和 write(),我們可以支援虛擬磁碟上的任何塊i/o操作。

6.磁碟控制器

磁碟控制器是主程序的乙個子程序。因此,它與cpu 端獨立執行,除了它們之間的通訊通道,通訊通道是 cpu和磁碟控制器之間的介面。通訊通道由主程序和子程序之間的管道實現。

命令:從 cpu到磁碟控制器的i/o命令。

dataout:在寫操作中從 cpu 到磁碟控制器的資料輸出。

datain:在讀操作中從磁碟控制器到cpu 的資料。

intstatus:從磁碟控制器到cpu 的中斷狀態。

intack:從cpu到磁碟控制器的中斷確認。

緩衝區是記憶體與外設(如硬碟)進行資料互動的媒介。記憶體與硬碟最大的區別在於,硬碟的作用僅僅是對資料資訊以很低的成本做大量資料的斷電儲存,並不參與運算(因為 cpu 無法到硬碟上定址),而記憶體除了需要對資料進行儲存以外,更重要的是與 cpu、匯流排配合進行資料運算。緩衝區則介於兩者之間,它既對資料資訊進行儲存,也能夠參與一些像查詢、組織之類的間接、輔助性運算。有了緩衝區這個媒介後,對外設而言,它僅需要考慮與緩衝區進行資料互動是否符合要求,而不需要考慮記憶體如何使用這些互動的資料;對記憶體而言,它也僅需要考慮與緩衝區互動的條件是否成熟,而不需要關心此時外設對緩衝區的互動情況。兩者的組織、管理和協調將由作業系統統一操作。

緩衝區在記憶體中的位置示例

部分**截圖

**以託管:

編譯:

執行:

理解塊裝置 塊裝置/2413231

linux緩衝區管理 緩衝區管理 緩衝區從高位址端向低位址端劃分成乙個個 1024 位元組大小的,緩衝塊 ,與塊裝置上的邏輯塊大小相同(邏輯塊是由裝置驅動程式 拼接 而成的,而驅動程式為了拼接好這個邏輯塊,可能需要多次讀寫外設。

緩衝區作用

《Redis設計與實現》之第十二章 事件

redis伺服器是乙個事件驅動程式,伺服器需要處理兩類事件 檔案事件 檔案事件就是伺服器對套接字 socket 操作的抽象,伺服器和客戶端的通訊會產生檔案事件 時間事件 時間事件就是伺服器對定時操作 比如servercron函式 的抽象,redis伺服器中的一些操作需要在給定的時間點執行 一,檔案事...

《Redis設計與實現》之第十二章 事件

redis伺服器是乙個事件驅動程式,伺服器需要處理兩類事件 檔案事件 檔案事件就是伺服器對套接字 socket 操作的抽象,伺服器和客戶端的通訊會產生檔案事件 時間事件 時間事件就是伺服器對定時操作 比如servercron函式 的抽象,redis伺服器中的一些操作需要在給定的時間點執行 一,檔案事...

《Redis設計與實現》之第十二章 事件

redis伺服器是乙個事件驅動程式,伺服器需要處理兩類事件 檔案事件 檔案事件就是伺服器對套接字 socket 操作的抽象,伺服器和客戶端的通訊會產生檔案事件 時間事件 時間事件就是伺服器對定時操作 比如servercron函式 的抽象,redis伺服器中的一些操作需要在給定的時間點執行 一,檔案事...