Adi*_*i s 1 memory-management linux-kernel
我们可以通过struct page结构访问内存吗?
注意:该页属于高端内存,尚未映射到内核逻辑地址空间。
是的,我们可以通过 struct page 的虚拟字段访问属于 highmem 的页面。但是在您的情况下,您无法访问,因为您提到 highmem 页面未映射到内核虚拟内存中。
要访问它,您需要创建永久或临时映射。通过kmap创建永久地图地图页面。
void *kmap(struct page *page)
Run Code Online (Sandbox Code Playgroud)
此函数适用于高内存或低内存。如果页面结构属于低内存中的页面,则简单地返回该页面的虚拟地址。如果页面驻留在高端内存中,则会创建一个永久映射并返回地址。该函数可能会休眠,因此 kmap() 仅在进程上下文中工作。因为永久映射的数量是有限的(如果不是,我们就不会陷入这种混乱,只能永久映射所有内存),当不再需要高内存时应该取消映射。这是通过以下函数完成的,它取消映射给定的页:
void kunmap(struct page *page)
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式创建临时映射:
void *kmap_atomic(struct page *page, enum km_type type)
Run Code Online (Sandbox Code Playgroud)
这是一个原子函数,所以你不能睡觉,可以在中断上下文中调用。它被称为临时的,因为对 kmap_atomic 的下一次调用将覆盖之前的映射。
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |