x64系统中的kmap和page_address有什么区别?

x64系统中的kmap和page_address有什么区别?

kmap()允许您将页面映射到内核或模块中的函数可以访问的某个地址。同时page_address()还允许您检索访问该页面的地址。

它说这kmap()是用来处理 highmem 问题,但作为问题已解释,highmem 在 x64 系统中不再是问题。

*p我已经尝试过,如果您从进程(即用户空间页面)获取页面结构,则使用kmap(p)page_address(p)执行几乎相同的操作。

他们之间有什么区别?

答案1

在 x86-64 上,没有实际差异;当给定一个非 highmem 页面时,kmap代表page_address

    if (!PageHighMem(page))
        addr = page_address(page);

然而,这两个函数确实有两个不同的目的:page_address返回页面的地址,如果有一个;kmap确保页面在返回其地址之前被映射,并且应该通过调用来平衡kunmap

相关内容