《背景》
記憶體會以分頁方式組織記憶體,而且每頁大小和計算機體系結構有關係,linux中每個頁都有對應的struct page{}
與之對應。
《分配連續的記憶體》
a:void *kmalloc(int count,int flags)函式用於從zone_normal區域返回連續記憶體的分配的位址。
引數分析:
count:分配記憶體的大小
flags:分配記憶體的方式
gpf_kernel:程序上下文用來分配記憶體,記憶體不夠時會導致程序睡眠。
gpf_atomic:中斷上下文用來分配記憶體,不會導致程序睡眠,記憶體不足時候會返回錯誤。
注意:kmalloc()函式分配的記憶體空間會保留原來的資料,所以在記憶體分配成功後必須進行相應的清零操作,否則會導致意想不到的問題。
b:void *vmalloc(unsigned long count)
引數分析:
count:分配記憶體的大小
注意:vmalloc()常用來分配較大的記憶體空間,但是消耗的時間更長,並且不能再中斷上下文中使用。用該函式分配的記憶體返回的虛擬位址是連續,但是實際的實體地址不是連續的,因此不能用來分配dm空間。
Linux裝置驅動之記憶體對映
linux裝置驅動之記憶體對映 日期 2011 04 11 1.記憶體對映 所謂的記憶體對映就是把物理記憶體對映到程序的位址空間之內,這些應用程式就可以直接使用輸入輸出的位址空間,從而提高讀寫的效率。linux提供了mmap 函式,用來對映物理記憶體。在驅動程式中,應用程式以裝置檔案為物件,呼叫mm...
linux字元裝置驅動開發之記憶體對映
linux驅動最終都死通過配置暫存器完成,linux驅動開發需要滿足linux的驅動框架.所以存在乙個記憶體管理單元 mmu 實現虛擬位址與實體地址的對映,記憶體保護和虛擬位址快取功能.通過記憶體對映,只需要對虛擬位址進行操作,就可以實現相應的驅動開發.記憶體對映 對映函式 記憶體對映 void i...
Linux塊裝置驅動之記憶體模擬塊裝置
用記憶體代替塊裝置的總結,相對來簡單得多,對記憶體操作想必大家都很熟悉,直接分配一塊記憶體就可以直接讀寫操作了 參考 drivers block xd.c drivers block z2ram.c define ramblock size 1024 1024 乙個扇區是512位元組 static ...