我的问题如下:
内存条我见过,
编程开发中都会用到为变量开辟内存空间,这里内存是在物理内存上吗?
如下是我在网上看到的,
但是没有说的太详细,
为了编程方便和系统的安全性,人们发明了逻辑地址。在编程的时候写的地址就是逻辑地址,任何32位程序逻辑地址的取值范围都是 0x00000000-0xFFFFFFFF ,逻辑地址按照一定的方式转换成物理地址。每个进程的逻辑地址转换之后并不相同。所以这样就隔离的不同的进程,一个进程不能通过指针访问其他进程中的数据,所以比较安全。另外在一个进程看来,他独享了4GB(其中有一部分被操作系统占用)的内存空间。本程序不需要考虑其他进程的影响,所以编程的时候认为所有本程序独享了4GB的内存,程序写起来比较方便。
每段代码都需要一个 GDT 数据结构,其中保存了段的基址(每个段不同)。逻辑地址+基址 得到一个线性地址,线性地址是唯一的(如果不同进程转换或后的线性地址相同那么他们是指同一段内存),但是线性地址还不能直接作为物理地址,因为我们需要一种虚拟内存技术(每个进程可以独享4GB,多个进程就可能需要的内存超出总内存,那么我们就把与部分数据保存到硬盘上),线性地址在通过查表的方式确定其对应的物理内存地址。如果查表的结果是在硬盘(虚拟内存)上,那么就需要从硬盘上把这部分数据移到物理内存中,返回这个物理内存的地址[注1]。
注1: 如果内存不够,就会先把部分内存的数据放到虚拟内存里,然后在把需要的数据从虚拟内存读到实际内存。一般情况下个会比较费时,所以如果线性地址查表的结果是在虚拟内存里,会产生一个缺页中断 暂时挂起这个进程。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。