转自:http://www.cnblogs.com/RyanHuang/archive/2012/05/30/2525006.html

已知一个虚拟地址0x01AF5518, 则转换的过程如下:

  注意: *这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况*

1.首先把虚拟地址拆分成3个部分(低12位, 中10位, 高10位), 换成2进制如下:
  -> 0000 0001 1010 1111 0101 0101 0001 1000

  按照10, 10, 12的位数重新排列后
  -> (页目录索引)00 000 00110, (页表项索引)10 1111 0101, (偏移)0101 0001 1000

  换算成十六进制后可以得到如下结果
  页目录索引 = 6, 页表项索引 = 0x2f5 , 偏移 = 0x518

2. 根据当前的CR3寄存器中的物理地址定位页目录表基址
  Cr3中存放的是物理地址, 这个物理地址指向进程的页目录表基址, 由此可以得到
  页目录表基址(PDE) = Cr3 = 0xAA0E5000

3. 计算页表项的地址
  页表地址存放在页目录表(PDE)中的第6个项目中, 也就是
  [0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867为该页表属性值, PTE = 0x3D955000

3. 计算页面物理地址
  我们要找的页面在这个页表中的第0x2f5项, 所以虚拟地址所在的页的物理地址为
  [0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =
  假设[0x3D955BD4] = 0x7095e847, 页面的物理地址 x0x7095e000, 0x00000847表示的是页面属性

4. 计算最终的物理地址
  由虚拟地址分离的偏移可以计算出最终的物理地址为
  0x7095E000 + 0x00000518 = 0x7095E518.

虚拟地址到物理地址的转换步骤【转】相关推荐

  1. 虚拟地址到物理地址的转换步骤

    已知一个虚拟地址0x01AF5518, 则转换的过程如下: 注意: 这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况 1.首先把虚拟地址拆分成3个部分(低12位, 中10位, 高 ...

  2. ARM32页表-虚拟地址到物理地址的转换

    ARM32的页表 页表就是用于将虚拟地址转换为物理地址的转换关系表.访问虚拟地址时,计算机通过页表找到对应的实际物理地址访问. 我们在上一节介绍了内存管理模块概图, 怎么完成从pgd 到 page的转 ...

  3. OS实战笔记(4)-- 虚拟地址和物理地址的转换

    在大学的时候,<操作系统原理>这门课我没有好好听,里面讲到过虚拟地址的相关知识.虽然在大学的时候,接过一两个项目(代码写的很烂,哈哈),偶尔也会自己练习几个编程题.但对虚拟地址.物理地址的 ...

  4. Windows虚拟地址转物理地址(原理+源码实现,附简单小工具)

                                                                                                        ...

  5. linux内核线性地址等于物理地址,Linux 从虚拟地址到物理地址

    我们都知道,动态共享库里面的函数的共享的,这也是动态库的优势所在,就是节省内存.C 编译出来的可执行文件几乎都会用到libc的库,假如没有这个共享的技术,每个可执行文件都要占一份libc库的内存,这将 ...

  6. 《操作系统》——分页存储管理方式逻辑地址到物理地址的转换

    一.连续分配方式缺点 连续分配方式的主要缺点是会形成许多碎片,尽管我们可以通过紧凑的方法将碎片拼接成可用的大块空间,但这样须付出很大的代价. 二.离散分配方式 离散分配方式思想:将进程直接分散地装入到 ...

  7. 逻辑地址、线性地址和物理地址的转换

    一.逻辑地址 逻辑地址是指在计算机体系结构中是指应用程序角度看到的内存单元.存储单元.网络主机的地址. 逻辑地址往往不同于物理地址,通过地址翻译器或映射函数可以把逻辑地址转化为物理地址. 一个逻辑地址 ...

  8. 用户的虚拟地址 linux 0 4gb,Linux驱动虚拟地址和物理地址的映射

    一般情况下,Linux系统中,进程的4GB内存空间被划分成为两个部分------用户空间和内核空间,大小分别为0~3G,3~4G. 用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核空间. ...

  9. Linux虚拟地址和物理地址的映射

    ➤背景 一般情况下,Linux系统中,进程的4GB内存空间被划分成为两个部分------用户空间和内核空间,大小分别为0~3G,3~4G.用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核 ...

最新文章

  1. Tomcat--HTTPS的简单应用
  2. 算法面试:栈实现队列的方案
  3. sdram 时钟相位_SDRAM小结 — Windows Live
  4. 基于Pytorch版yolov5的滑块验证码破解思路
  5. windows控制台cmd乱码的解决办法
  6. matlab vgg图像风格迁移,迁移网络的应用-图像风格迁移
  7. mac电脑视频去水印
  8. 三星a60android9,三星A6060官方港版安卓9固件rom线刷包:TGY-A6060ZHU1ASH3
  9. 测试点击屏幕次数的软件_红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程...
  10. Qt 之 自定义窗口标题栏
  11. 【搬运】罗霸道网文写作经验分享
  12. 两个经纬度偏角_怎么根据两个经纬度计算出航向
  13. faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException问题解决
  14. win10重置进度条不动了_win10重置卡在100%不动没反应怎么办
  15. 使用Processing实现井字棋
  16. iptables目标TTL
  17. android出现应用程序未安装的解决办法
  18. 企业微信的聊天记录可以被领导看到吗?这样算不算被窥探隐私?
  19. html化学方程式显示,化学方程式格式化(宏)
  20. 坚决封掉pplive、qqlive、播霸网络电视、沸点网络电视、Gridmedia

热门文章

  1. 中国褐煤行业发展趋势前瞻与十四五战略规划分析报告2022-2028年
  2. php和asp.net下SQLite3的执行速度对比
  3. js实现焦点进入文本框内关闭输入法:imeMode
  4. js 为什么0.1+0.2不等于0.3
  5. [Lintcode]41. Maximum Subarray/[Leetcode]53. Maximum Subarray
  6. 一篇关于Maven项目的jar包Shell启动脚本
  7. 阿里云Ubuntu安装图形界面与中文语言包
  8. 移动端开发问题及技巧汇总
  9. Django之Cookie
  10. Sprint 冲刺第三阶段第6-10天