求指导虚拟内存映射

bengal1124 2013-07-10 11:05:49
虚拟内存映射 我能理解的范畴就是 操作系统对物理内存做了一个保护 ,我们只能访问虚拟内存 然后映射到物理内存 但我感觉这个理解好肤浅。
我的困惑是:1.内存映射的过程 到底是在程序执行的时候 操作系统把物理内存映射到虚拟内存 还是 虚拟内存隐射到物理内存(这就好比函数中自变量 与变量的关系 我搞不清楚谁是谁)。
2.内存映射理解到什么程度比较好呢 对于c++程序员。还有是不是做出映射了 我们才能虚拟的内存进行读写。
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2013-07-10
  • 打赏
  • 举报
回复
CPU 寻址过程参考: http://blog.adintr.com/298
www_adintr_com 2013-07-10
  • 打赏
  • 举报
回复
关键点在于: 内存映射不是操作系统提供的, 是 CPU 支持的! 操作系统只是提供相应的数据结构, 告诉 CPU 如何进行映射. x86 体系的 CPU 可以使用分段和分页两种机制进行映射, 但是一般操作系统都使用分页来管理内存, 把所有内存分成一个段来跳过分段. 访问没有映射过的内存, CPU 会产生一个缺页异常, 操作系统像处理中断一样, 事先设置好这个异常处理的服务程序, 产生异常的时候 CPU 就会跳到异常处理程序里来执行. 然后操作系统可以选择是把没有的映射建立上, 让程序继续运行, 还是终止程序的运行.
minnnnmi 2013-07-10
  • 打赏
  • 举报
回复
你只要理解我们在写程序的时候,基本上使用的都是虚拟内存的概念就行了,操作系统是不会允许我们直接操作实际的物理内存的。
minnnnmi 2013-07-10
  • 打赏
  • 举报
回复
操作系统的很多概念都是建立在内存管理上的,比如 进程。
minnnnmi 2013-07-10
  • 打赏
  • 举报
回复
楼主的困惑主要是:操作系统 编译 连接 装载。 楼主看可以参考 《操作系统概念》《深入理解计算机系统》《程序员的自我修养》。 程序在执行的时候,操作系统会把虚拟内存映射到实际的物理内存。 举个例子来说,运行两个不同的程序,两个进程能使用相同的虚拟地址,比如都使用 0x0012ff60 这个虚拟地址。但是两个程序在这个虚拟地址上能存储各自不同的值。这是因为操作系统能把这两个进程相同的虚拟地址映射到不同的物理内存上。
赵4老师 2013-07-10
  • 打赏
  • 举报
回复
《30天自制操作系统》

64,266

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧