天天看點

Buffer和Cache的差別 DMA

buffer 與cache 操作的對象就不一樣。

buffer(緩沖)是為了提高記憶體和硬碟(或其他I/0 裝置)之間的資料交換的速度而設計

的。

cache(緩存)是為了提高cpu 和記憶體之間的資料交換速度而設計,也就是平常見到的

一級緩存、二級緩存、三級緩存等。

cpu 在執行程式所用的指令和讀資料都是針對記憶體的,也就是從記憶體中取得的。由于内

存讀寫速度慢,為了提高cpu 和記憶體之間資料交換的速度,在cpu 和記憶體之間增加了cache,

它的速度比記憶體快,但是造價高,又由于在cpu 内不能內建太多內建電路,是以一般cache

比較小,以後intel 等公司為了進一步提高速度,又增加了二級cache,甚至三級cache,它

是根據程式的局部性原理而設計的,就是cpu 執行的指令和通路的資料往往在集中的某一

塊,是以把這塊内容放入cache 後,cpu 就不用在通路記憶體了,這就提高了通路速度。當然

若cache 中沒有cpu 所需要的内容,還是要通路記憶體的。

緩沖(buffers)是根據磁盤的讀寫設計的,把分散的寫操作集中進行,減少磁盤碎片和

硬碟的反複尋道,進而提高系統性能。linux 有一個守護程序定期清空緩沖内容(即寫入磁

盤),也可以通過sync 指令手動清空緩沖。舉個例子吧:我這裡有一個ext2 的U 盤,我往

裡面copy 一個3M 的MP3,但U 盤的燈沒有跳動,過了一會兒(或者手動輸入sync)U 盤

的燈就跳動起來了。解除安裝裝置時會清空緩沖,是以有些時候解除安裝一個裝置時要等上幾秒鐘。

修改/etc/sysctl.conf 中的vm.swappiness 右邊的數字可以在下次開機時調節swap 使用策

略。該數字範圍是0~100,數字越大越傾向于使用swap。預設為60,可以改一下試試。--

兩者都是RAM 中的資料。

簡單來說,buffer 是即将要被寫入磁盤的,而cache 是被從磁盤中讀出來的。

buffer 是由各種程序配置設定的,被用在如輸入隊列等方面。一個簡單的例子如某個程序要

求有多個字段讀入,在所有字段被讀入完整之前,程序把先前讀入的字段放在buffer 中儲存。

cache 經常被用在磁盤的I/O 請求上,如果有多個程序都要通路某個檔案,于是該檔案

便被做成cache 以友善下次被通路,這樣可提高系統性能。

DMA(Direct Memory Access),即直接存儲器存取,是一種快速傳送資料的機制。資料傳遞

可以從适配卡到記憶體,從記憶體到适配卡或從一段記憶體到另一段記憶體。

利用它進行資料傳送時不需要CPU 的參與。每台電腦主機闆上都有DMA 控制器,通常

計算機對其程式設計,并用一個擴充卡上的ROM(如軟碟驅動控制器上的ROM)來儲存程式,這

些程式控制DMA 傳送資料。一旦控制器初始化完成,資料開始傳送,DMA 就可以脫離CPU,

獨立完成資料傳送。

在DMA 傳送開始的短暫時間内,基本上有兩個處理器為它工作,一個執行程式代碼,

一個傳送資料。利用DMA 傳送資料的另一個好處是,資料直接在源位址和目的位址之間傳

送,不需要中間媒介。如果通過CPU 把一個位元組從适配卡傳送至記憶體,需要兩步操作。首

先,CPU 把這個位元組從适配卡讀到内部寄存器中,然後再從寄存器傳送到記憶體的适當位址。

DMA 控制器将這些操作簡化為一步,它操作總線上的控制信号,使寫位元組一次完成。這樣

大大提高了計算機運作速度和工作效率。

計算機發展到今天,DMA 已不再用于記憶體到記憶體的資料傳送,因為CPU 速度非常快,

做這件事,比用DMA 控制還要快,但要在适配卡和記憶體之間傳送資料,仍然是非DMA 莫

屬。要從适配卡到記憶體傳送資料,DMA 同時觸發從适配卡讀資料總線(即I/O 讀操作)和向

記憶體寫資料的總線。激活I/O 讀操作就是讓适配卡把一個資料機關(通常是一個位元組或一個

字)放到PC 資料總線上,因為此時記憶體寫總線也被激活,資料就被同時從PC 總線上拷貝到

記憶體中。

直接記憶體通路(DMA)方式是一種完全由硬體執行I/O 交換的工作方式。DMA 控制器從CPU

完全接管對總線的控制。資料交換不經過CPU,而直接在記憶體和I/O 裝置之間進行。DMA

控制器采用以下三種方式:

①停止CPU 通路記憶體:當外設要求傳送一批資料時,由DMA 控制器發一個信号給CPU。

DMA 控制器獲得總線控制權後,開始進行資料傳送。一批資料傳送完畢後,DMA 控制器

通知CPU 可以使用記憶體,并把總線控制權交還給CPU。

②周期挪用:當I/O 裝置沒有DMA 請求時,CPU 按程式要求通路記憶體:一旦I/O 設

備有DMA 請求,則I/O 裝置挪用一個或幾個周期。

③DMA 與CPU 交替訪内:一個CPU 周期可分為2 個周期,一個專供DMA 控制器訪

内,另一個專供CPU 訪内。不需要總線使用權的申請、建立和歸還過程。

繼續閱讀