快取記憶體與緩衝區

2021-07-07 10:33:53 字數 2651 閱讀 3816

**:

作業系統中使用磁碟快取記憶體技術來提高磁碟的i/o速度,對快取記憶體複製的訪問要比原始資料訪問更為高效。例如,正在執行的程序的指令既儲存在磁碟上,也儲存在物理記憶體上,也被複製到cpu的二級和一級快取記憶體中。

不過,磁碟快取記憶體技術不同於通常意義下的介於cpu與記憶體之間的小容量高速儲存器,而是指利用記憶體中的儲存空間來暫存從磁碟中讀出的一系列盤塊中的資訊。因此,磁碟快取記憶體在邏輯上屬於磁碟,物理上則是駐留在記憶體中的盤塊。

快取記憶體在記憶體中分為兩種形式:一種是在記憶體中開闢乙個單獨的儲存空間作為磁速快取,大小固定;另一種是把未利用的記憶體空間作為乙個緩衝池,供請求分頁系統和磁碟i/o時共享。在裝置管理子系統中,引入緩衝區的目的主要有:

其實現方法有:

根據系統設定緩衝器的個數,緩衝技術可以分為:

1) 單緩衝

在裝置和處理機之間設定乙個緩衝區。裝置和處理機交換資料時,先把被交換資料寫入緩衝區,然後需要資料的裝置或處理機從緩衝區取走資料。

如圖5-5所示,在塊裝置輸入時,假定從磁碟把一塊資料輸入到緩衝區的時間為t,作業系統將該緩衝區中的資料傳送到使用者區的時間為m,而cpu對這一塊資料處理的時間為 c。由於t和c是可以並行的,當t>c時,系統對每一塊資料的處理時間為m十t,反之則為m+c,故可把系統對每一塊資料的處理時間表示為max(c, t)+m。

圖5-5  單緩衝工作示意圖

2) 雙緩衝

根據單緩衝的特點,cpu在傳送時間m內處於空閒狀態,由此引入雙緩衝。 i/o裝置輸入資料時先裝填到緩衝區1,在緩衝區1填滿後才開始裝填緩衝區2,與此同時處理機可以從緩衝區1中取出資料放入使用者程序處理,當緩衝區1中的資料處理完後,若緩衝區2已填滿,則處理機又從緩衝區2中取出資料放入使用者程序處理,而i/o裝置又可以裝填緩衝區1。雙緩衝機制提高了處理機和輸入裝置的並行操作的程度。

如圖5-6所示,系統處理一塊資料的時間可以粗略地認為是mac(c, t)。如果ct,則可使cpu不必等待裝置輸入。對於字元裝置,若釆用行輸入方式,則釆用雙緩衝可使使用者在輸入完第一行之後,在cpu執行第一行中的命令的同時,使用者可繼續向第二緩衝區輸入下一行資料。而單緩衝情況下則必須等待一行資料被提取完畢才可輸入下一行的資料。

圖5-6  雙緩衝工作示意圖

如果兩台機器之間通訊僅配置了單緩衝,如圖5-7(a)所示。那麼,它們在任一時刻都只能實現單方向的資料傳輸。例如,只允許把資料從a機傳送到b機,或者從b機傳送到a 機,而絕不允許雙方同時向對方傳送資料。為了實現雙向資料傳輸,必須在兩台機器中都設定兩個緩衝區,乙個用做傳送緩衝區,另乙個用做接收緩衝區,如圖5-7(b)所示。

圖5-7  雙機通訊時緩衝區的設定

3) 迴圈緩衝

包含多個大小相等的緩衝區,每個緩衝區中有乙個鏈結指標指向下乙個緩衝區,最後乙個緩衝區指標指向第乙個緩衝區,多個緩衝區構成乙個環形。

迴圈緩衝用於輸入/輸出時,還需要有兩個指標in和out。對輸入而言,首先要從裝置接收資料到緩衝區中,in指標指向可以輸入資料的第乙個空緩衝區;當執行程序需要資料時,從迴圈緩衝區中取乙個裝滿資料的緩衝區,並從此緩衝區中提取資料,out指標指向可以提取資料的第乙個滿緩衝區。輸出則正好相反。

4) 緩衝池

由多個系統公用的緩衝區組成,緩衝區按其使用狀況可以形成三個佇列:空緩衝佇列、裝滿輸入資料的緩衝佇列(輸入佇列)和裝滿輸出資料的緩衝佇列(輸出佇列)。還應具有四種緩衝區:用於收容輸入資料的工作緩衝區、用於提取輸入資料的工作緩衝區、 用於收容輸出資料的工作緩衝區及用於提取輸出資料的工作緩衝區,如圖5-8所示。

圖5-8  緩衝區的工作方式

當輸入程序需要輸入資料時,便從空緩衝佇列的隊首摘下乙個空緩衝區,把它作為收容輸入工作緩衝區,然後把輸入資料輸入其中,裝滿後再將它掛到輸入佇列隊尾。當計算程序需要輸入資料時,便從輸入佇列取得乙個緩衝區作為提取輸入工作緩衝區,計算程序從中提取資料,資料用完後再將它掛到空緩衝佇列尾。當計算程序需要輸出資料時,便從空緩衝佇列的隊首取得乙個空緩衝區,作為收容輸出工作緩衝區,當其中裝滿輸出資料後,再將它掛到輸出佇列隊尾。當要輸出時,由輸出程序從輸出佇列中取得乙個裝滿輸出資料的緩衝區,作為提取輸出工作緩衝區,當資料提取完後,再將它掛到空緩衝佇列的隊尾。快取記憶體是可以儲存資料拷貝的高速儲存器,訪問快取記憶體比訪問原始資料更高效速度更快。其對比見表5-1。

表5-1 快取記憶體和緩衝區的對比

快取記憶體

緩衝區相同點

都是介於高速裝置和低速裝置之間

區別存放資料

存放的是低速裝置上的某些資料的複製資料,也就是快取記憶體上有的低速裝置上面必然有

存放的是低速裝置傳遞給高速裝置的資料(或者是高速裝置傳送給低速裝置的資料),而這些資料在低速裝置(或者高速裝置)卻不一定有備份,這些資料在從快取區傳送到髙速裝置(或者低速裝置)

目的快取記憶體存放的是高速裝置經常要訪問的資料,如果高速裝置要訪問的資料不在快取記憶體中,高速裝置就需要訪問低速裝置

高速裝置和低速裝置的通訊都要經過快取區,高速裝置永遠不會直接去訪問低速裝置

13 6 繞過緩衝區快取記憶體 直接I O

13.6 繞過緩衝區快取記憶體 直接i o 始於核心2.4,linux允許應用程式在執行磁碟i o時繞過緩衝區快取記憶體,從使用者空間直接將資料傳遞到檔案或磁碟裝置。有時也稱此為直接i o direct i o 或者裸i o raw i o 此處的描述細節為linux所特有,susv3並未對其進行規...

緩衝區 快取

快取 cache 所以兩個的區別 緩衝區是記憶體空間的一部分 用來緩衝輸入和輸出的資料 緩衝區具有一部分大小 緩衝區根據對應的是輸入裝置還是輸出裝置分為輸入緩衝區,輸出緩衝區 buffer的核心作用是用來緩衝,緩和衝擊。比如你每秒要寫100次硬碟,對系統衝擊很大,浪費了大量時間在忙著處理開始寫和結束...

緩衝區(1) 為什麼會有緩衝區(快取)?

緩衝區是為了讓低速的輸入輸出裝置和高速的使用者程式能夠協調工作,並降低輸入輸出裝置的讀寫次數。使用者程式的執行速度可以看做 cpu 的執行速度,如果沒有各種硬體的阻礙,理論上它們是同步的。例如,我們都知道硬碟的速度要遠低於 cpu,它們之間有好幾個數量級的差距,當向硬碟寫入資料時,程式需要等待,不能...