Chinaunix

标题: 线性地址与逻辑地址 [打印本页]

作者: diandianlianyi    时间: 2010-11-20 16:25
标题: 线性地址与逻辑地址
系统RAM所有页框描述符都存在mem_map数组中,指针mem_map指针是该数组的线性地址还是物理地址?virt_to_page(addr)宏返回的是页框描述符的线性地址还是物理地址?
ULK说,如果页框不在高端内存区,可以通过计算页框下标,然后将其转换为物理地址,在根据物理地址得到相应页框的线性地址,代码如下:__va((unsigned long) (page - mem_map) << 12),page-mem_map可以得到该页框在数组mem_map的偏移,但是再左移12位是什么意思呢?
作者: 瀚海书香    时间: 2010-11-20 16:47
本帖最后由 瀚海书香 于 2010-11-20 16:59 编辑
系统RAM所有页框描述符都存在mem_map数组中,指针mem_map指针是该数组的线性地址还是物理地址?virt_to_pag ...
diandianlianyi 发表于 2010-11-20 16:25


mem_map是线性地址,virt_to_page返回的也是线性地址。
page-mem_map可以得到该页框在数组mem_map的偏移,而偏移的单位就是每个页框的大小,也就是4K。所以需要再左移12位。
作者: diandianlianyi    时间: 2010-11-20 23:33
本帖最后由 diandianlianyi 于 2010-11-21 15:58 编辑

回复 2# 瀚海书香


    page-mem_map就可以得到偏移了?好像有问题吧?我觉得应该再除以32,因为mem_map数组每个元素的大小是32字节。类似的如永久内核映射的pkmap_count数组,要想根据一个4KB线性地址区的起始地址page得到该区域在该数组的偏移,做法是,page-PKMAP_BASE>>PAGE-SHIFT! 在这里从PKMAP开始的一个个4KB的大小的线性地址区不就相当于一个元素大小为4KB的数组吗?求解释~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2