[英]Share memory from a Linux kernel module for a userspace process to access
我有一個Linux內核模塊,在初始化過程中,該例程將大小為4KB的結構寫入內核內存。 我想要做的是共享此內存,以便單個用戶空間進程可以對該結構具有只讀訪問權限。
有人告訴我避免使用IOCTLS,因為它們不是執行此操作的最佳方法,因此從我的理解中,最好的方法是使用功能mmap
,但是我有點對如何在C中實現我所需的內容感到困惑
我確實看過使用功能shmget
,但似乎這是為需要IPC功能的用戶空間應用程序設計的。
任何建議,甚至更好的簡單示例,將不勝感激。
謝謝!
您無法使用像mmap這樣的直接訪問機制來安全地執行此操作,因為這樣任何人都可以使用它。
在Linux中, 用戶內存和內核內存是獨立的,並在單獨的地址空間中實現。 地址空間是虛擬化的,這意味着地址是從物理內存中抽象出來的。 由於地址空間是虛擬化的,因此可以存在許多地址空間。 實際上,內核本身位於一個地址空間,而每個進程都位於其自己的地址空間。 這些地址空間由虛擬內存地址組成,從而允許許多具有獨立地址空間的進程引用一個相當小的物理地址空間(計算機中的物理內存)。 這不僅方便,而且也很安全,因為每個地址空間都是獨立且獨立的,因此很安全。
但是,與此安全相關的成本很高。 由於每個進程(和內核)可以具有引用物理內存不同區域的相同地址,因此不可能立即共享內存。 ( 來源 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.