程序在编译时不可能知道装载后的物理内存地址,实际上,程序编译生成的地址都是虚拟地址。在我们日常使用的 Linux 或者 Windows 操作系统下,程序并不能直接访问物理内存。为了解决这个问题,当程序装载后,会通过虚拟地址映射到真实的物理地址。

内存被分成固定大小的页(Page),然后再通过虚拟内存地址(Virtual Address) 到物理内存地址(Physical Address) 的地址转换(Address Translation),才能访问实际存放数据的物理内存位置。

页表(Page Table):想要把虚拟内存地址,映射到物理内存地址,最直观的办法,就是来建一张映射表。这个映射表,能够实现虚拟内存里面的页,到物理内存里面的页的映射。这个映射表,在计算机里面,就叫作页表。

页表地址转换,把一个内存地址分成页号(Directory) 和偏移量(Offset) 两个部分。以一个 32 位的内存地址,页的大小 4KB 为例,内存地址的 20 位的高位表示页号,12 位(212 = 4KB)的低位表示偏移量。

总结

  1. 把虚拟内存地址,切分成页号和偏移量的组合;
  2. 从页表里面,查询出虚拟页号,对应的物理页号;
  3. 直接拿物理页号,加上前面的偏移量,就得到了物理内存地址。

虚拟内存到物理内存怎么映射相关推荐

  1. 虚拟内存--虚拟内存到物理内存的映射

    文章目录 前言 一.虚拟内存的重要性 二.虚拟内存 1.存在形式 2.分页 3.页表 4.虚拟内存到物理内存的映射过程 前言 在系统中,程序可以被分为一份一份的,(也即是下文即将提到的页面)计算机运行 ...

  2. Linux 内存管理 详解(虚拟内存、物理内存,进程地址空间)

    Linux -操作系统内存管理 存储系统 存储器的层次结构 Linux的内存管理 物理内存 物理内存管理 虚拟内存 虚拟地址空间 (写时拷贝) 和物理地址映射关系 页表 虚拟内存优缺点 「在 4GB ...

  3. 转载,大佬关于虚拟内存与物理内存关系讲解。

    内容来自:<0day安全:软件漏洞分析技术> 关于操作系统与组原课程中比较棘手的虚拟内存与物理内存讲解简单易懂!所以转述一下! Windows 的内存可以被分为两个层面:物理内存和虚拟内存 ...

  4. 转,大佬关于虚拟内存与物理内存关系讲解。

    内容来自:<0day安全:软件漏洞分析技术> 关于物理内存与虚拟内存讲得不错,通俗易懂.所以转一下. Windows 的内存可以被分为两个层面:物理内存和虚拟内存.其中,物理内存比较复杂, ...

  5. 详解操作系统中虚拟内存与物理内存的关系

    点击链接: 一文理解虚拟内存.物理内存.内存分配.内存管理 - 知乎 目录 一.虚拟内存与物理内存 1.1 虚拟内存 1.2 虚拟内存与物理内存 二.C/C++中虚拟内存分配模型 2.1 C语言中内存 ...

  6. 详解进程的虚拟内存,物理内存,共享内存

    ​ 目录 写在前面: 一.关于内存的两个概念 1.1 虚拟内存 1.2 驻留内存 二.详解top命令中VIRT.RES和SHR 2.1 top命令中ⅥRT.RES和SHR的含义 三.进程的smaps文 ...

  7. 操作系统——Linux 虚拟内存和物理内存的理解

    虚拟内存: 第一层理解 1..每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构: 2.一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间 ...

  8. 虚拟内存,物理内存,页面文件,还有任务管理器

    虚拟内存(Virtual Memory)是Windows管理所有可用内存的方式. 对于32位Windows系统,每个进程所用到的虚拟内存地址从0到2^32-1,总容量4GB, 其中2GB是与操作系统以 ...

  9. 虚拟内存与物理内存的区别,

    第一层理解 1.每个进程都有自己独立的4G(32位系统下)内存空间,各个进程的内存空间具有类似的结构 2.一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间 ...

最新文章

  1. ios framework 开发 之 实战二 ,成功
  2. 11g RAC不能启动ohasd进程
  3. 显示一个屏幕,隐藏其他屏幕
  4. wpf控件提示Value ‘’ can not convert
  5. Dev C++ 无法调试问题的解决——小白也能看懂!
  6. 树莓派外设开发之控制继电器(组)
  7. junit 测试 异常_使用JUnit规则测试预期的异常
  8. 双系统windows10扩容ubuntu16.04
  9. python多任务_【python】多任务(1. 线程)
  10. 阿里云centos7监控postgres9.6.6
  11. 使用 rtcwake 定时唤醒休眠的linux
  12. javascript中的逻辑运算符优先级
  13. ffmpeg中使用screen capture recorder录音的问题
  14. 计算机是1946年由科学家发明,1946年第一台计算机叫什么
  15. 78 python - 打飞机案例(让敌机移动)
  16. 洛谷P3456 [POI2007]GRZ-Ridges and Valleys
  17. 科技是国之利器,人工智能与机器人发展势不可当
  18. 初识C语言 | C语言零基础入门(第一天)
  19. 如何成为一名合格的DBA
  20. html连接sql基本语句,PostgreSQL 常用SQL语句

热门文章

  1. 关于版本升级的一点理解(VersionUpdate)
  2. UE4网络基本研究一【基本概念】
  3. 大数据生态圈到底是一个什么概念?
  4. 微型计算机可以显示不同的,微型计算机可以配置不同的显示系统,如CCA、EGA和VGA,它们反映了显示设备的(...
  5. 流言揭秘:吃黑巧克力就不发胖?
  6. java ee包含哪些技术_JavaEE基本了解
  7. MessageBox ()详解
  8. 支付宝接口第三方调用问题
  9. 面试字节跳动,被面试官的源码问题问到怀疑人生
  10. 初学者,FreeRTOS学习记录,配合STM32CubeMX(一)