簡體   English   中英

linux內核中的mmap()訪問未映射的內存

[英]mmap() in linux kernel to access unmapped memory

我正在嘗試使用linux-kernel中提供的mamp()功能。 當我們在用戶空間中調用mmap()時,我們嘗試將用戶空間進程的虛擬內存區域映射到內核空間中的內存。

內核中mamp()的定義是在我的內核模塊中完成的,該模塊嘗試在頁面中分配一些內存並在mmap系統調用期間將其映射。 該內核空間存儲器的存儲器內容可由該模塊填充。

我想問的問題是,在進行內存映射后,用戶空間進程可以直接訪問映射的內存,而不會引起任何額外的內核過載,因此不會有類似read()的系統調用, 但是如果內存(分配在內核內部)空間並映射到內核空間中)包含指向分配給內核空間內其他內存(未映射)的指針,則用戶空間進程可以借助映射內存的內容(即指針)來訪問此未映射的內存到此未映射的內存。

不,用戶空間無法在映射內存中追蹤指向未映射內核內存的指針。

沒有任何用戶空間進程不能訪問未映射的內存。 內核將不允許您訪問該內存。 您只能訪問通過mmap映射的那部分內存。 我認為使用可以顯式使用remap_pfn_range函數來重新映射區域。

Linux mmap手冊頁

未指定在與文件的已添加或已刪除區域相對應的頁面上更改映射基礎文件大小的影響。

不,你不能。

但是,如果您的目的是即時更改映射區域,則可以使用以下選項:

答:在用戶空間中,您可以使用mremap來擴展(或收縮)現有的內存映射。

B.在內核空間中,在驅動程序中,您需要實現nopage()方法或remap_pfn_range,但是remap_pfn_range有其局限性,即Linux僅提供保留頁,您甚至無法重映射正常地址,例如由get_free_page()分配的地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM