免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3685 | 回复: 3
打印 上一主题 下一主题

[内存管理] linux内核function page_address() [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-23 03:40 |只看该作者 |倒序浏览

void * page_address(struct page *page) 返回指针void*:

(1) "convert a given page to its logical address" 根据 "Linux Kerenl developement 3rd edition"
(2) "returns the linear address associated with the page frame" 根据 "understanding the linux kernel"
(3) "returns the physical address of the page" 根据 "understanding the linux virtual memory manager"

这个返回指针,三本书三个不同说法: 逻辑地址,物理地址,线性地址。

比如说是 (1): 逻辑地址的话,那么这个传进这个函数的指针变量struct page* page又是什么呢? 难道不正是struct page所代表的page frame所对应的page的逻辑地址吗?还需要转换什么呢?谢谢。

论坛徽章:
0
2 [报告]
发表于 2012-07-23 09:59 |只看该作者
No,这个page是位于内核态的一个数据结构,用于描述一个物理页而已。

三本书说的是同一个东西。这个函数要解决的问题是:我怎么知道一个物理页被映射到哪一个地址去了?

脱离地址空间谈地址是没有意义的,这个函数的背景是:得到供内核使用的物理页的线性地址。不然,就得给定地址空间,遍历页表,查到物理页对应的线性地址了。

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
3 [报告]
发表于 2012-07-23 12:45 |只看该作者
楼上说得对,是同一个东西。你可以简单地理解为有Page这个结构体的指针算出来对应的物理页的地址。
至于 ”逻辑地址,物理地址,线性地址“都是相对而言的,在每个具体的语境下都是OK的。

论坛徽章:
0
4 [报告]
发表于 2012-07-27 12:40 |只看该作者
谢楼上两位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP