首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ioremap_wc()是否创建了一个由页面和许多PTE组成的结构?

ioremap_wc()是否创建了一个由页面和许多PTE组成的结构?
EN

Stack Overflow用户
提问于 2015-01-06 11:21:07
回答 1查看 1.5K关注 0票数 0

众所周知,MMIO空间被映射(例如,通过/dev/mem,通过调用remap_pfn_range()作为单个PTE来映射,这样就没有struct页面了。

在使用ioremap_wc()时也是这样吗,还是ioremap_wc()创建了一个由页面和许多PTE组成的结构?

操作系统: Linux x86_64

EN

回答 1

Stack Overflow用户

发布于 2015-01-06 15:48:02

你的问题表达得有点令人困惑,但我想我可以回答。

首先,要明确的是,mmap /dev/mem (使用remap_pfn_range)并不保证只使用一个PTE。如果要映射的区域位于单个页面内,则只使用一个页面;否则,它将使用所需的多个页面。( PTE是一个页面表条目,因此它精确地映射了一个物理页面。当然,页面大小(或大小)与体系结构有关。

"struct页“用于管理实际内存--即:系统RAM /非MMIO空间。( RAM和MMIO空间都是物理页,因为它们占用物理地址空间并具有地址,但struct页仅用于通用内存,程序和任意数据可以放在其中。)

正确的是,ioremap_wc和所有其他ioremap变体很像mmap通过/dev/mem对MMIO空间的映射,只是它们只供内核使用。在最低级别,他们最终使用相同的代码来创建PTE(除了那些PTE引用内核虚拟地址空间而不是用户虚拟地址空间)。ioremap调用分配一个"vm_struct“来跟踪虚拟到物理映射,然后设置PTE将虚拟地址实际映射到物理。

因此,主要区别在于它们是如何被跟踪/管理的。内核代码被期望干净地释放/释放它自己的VM区域和PTE。OTOH,不信任用户进程执行此操作。因此,/dev/mem的mmap设置了与进程相关联的VM结构,以便如果进程退出,内核可以找到并释放任何映射,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27797560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档