码迷,mamicode.com
首页 > 其他好文 > 详细

地址映射 —— 输出虚拟地址所对应的物理地址

时间:2019-12-02 00:43:16      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:通过   计算   大致   映射   物理地址   fse   inux   数据   src   

/proc

Linux内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。 /proc 是个伪文件系统,它只存在于内存中,不占用磁盘空间。它以文件系统的方式为外部访问内核数据的操作提供接口。
/proc 下还有一些以数字命名的目录,它们是进程目录。系统当前运行的每一个进程都在 /proc 有一个相对应的目录,以该进程的 pid 命名,是读取进程信息的接口,而 self 目录是读取进程本身信息的 link。
/proc/self 中有一个名为 pagemap 的文件,用来记录当前进程的物理页面的信息;通过 pagemap 可以查看当前进程虚拟页面所映射的物理页的信息。
?
Linux内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。 /proc 是个伪文件系统,它只存在于内存中,不占用磁盘空间。它以文件系统的方式为外部访问内核数据的操作提供接口。
?
/proc 下还有一些以数字命名的目录,它们是进程目录。系统当前运行的每一个进程都在 /proc 有一个相对应的目录,以该进程的 pid 命名,是读取进程信息的接口,而 self 目录是读取进程本身信息的 link。
/proc/self 中有一个名为 pagemap 的文件,用来记录当前进程的物理页面的信息;通过 pagemap 可以查看当前进程虚拟页面所映射的物理页的信息。
pagemap 中的每一项都是一个64位的值,信息如下:
技术图片
所以只要找到虚拟页在 pagemap 中的对应项,通过 bit 63 判断是否在内存中,计算对应项的物理页号加上偏移量,就能得到虚拟地址所映射的物理地址。

大致流程

  • 通过虚拟地址计算出该地址相对于起始地址的页号
page index = virtual address / page size
  • 计算该地址相对于所在页面起始的偏移量;
offset = virtual address % page size
  • 在 pagemap 中通过页号查找对应项,查看该页是否在内存中;
  • 若当前页存在,则取 bits 0~54 加上偏移量,可得所对应的物理地址。

地址映射 —— 输出虚拟地址所对应的物理地址

标签:通过   计算   大致   映射   物理地址   fse   inux   数据   src   

原文地址:https://www.cnblogs.com/chenxinshuo/p/11968354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!