使用dma緩衝區的主要問題是:當大於一頁時,它們必須佔據連續的物理頁,這是因為裝置使用isa或者pci系統匯流排傳輸資料,而這兩種方式使用的都是實體地址。
雖然既可以在系統啟動時,也可以在執行時分配dma緩衝區,但是模組只能在執行時刻分配它們的緩衝區。驅動程式作者必須謹慎地為dma操作分配正確的記憶體型別,因為並不是所有記憶體區間都適合dma操作。在實際操作中,一些裝置和一些系統中高階記憶體不能用於dma,這是因為外圍裝置不能使用高階記憶體的位址。
在現代匯流排上的大多數裝置能夠處理32位位址,這意味著常用的記憶體分配機制能很好地工作。一些pci裝置沒能實現全部的pci標準,因此不能使用32位位址,而一些isa裝置還侷限在使用24位位址的階段。
對於有這些限制的裝置,應使用gfp_dma標誌呼叫kmalloc或者get_free_pages從dma區間分配記憶體。當設定了該標誌時,只有使用24位定址方式的記憶體才能被分配。另外還可以使用dma層來分配緩衝區,這樣也能滿足對裝置限制的需求。
輸入緩衝區與輸出緩衝區
本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...
使用者程序緩衝區和核心緩衝區
常常聽到有程式設計師會跟你討論 我們在讀寫檔案的時候,系統是有快取的 但實際上有一部分人把使用者程序緩衝區和系統空間的緩衝區的概念混淆了,包括這兩種緩衝區的用法和所要解決的問題,還有其它類似的概念。本文就來區分一下不同的緩衝區概念 主要針對類unix平台 使用者程序和作業系統的關係 首先我用一張圖來...
php 緩衝區,PHP的輸出緩衝區
1 什麼是緩衝區?緩衝區的作用是把輸入或者輸出的內容先放進記憶體,而不顯示或者讀取,最本質的作用就是協調高速cpu和相對緩慢的io裝置 磁碟等 的運作。2 php在執行的時候,在什麼地方有用到緩衝區?當執行php的時候,如果碰到了echo print r之類的會輸出資料的 php就會將要輸出的資料放...