首页 > 物理内存与编程开发中的内存有什么关系,求大神指点

物理内存与编程开发中的内存有什么关系,求大神指点

我的问题如下:
内存条我见过,
编程开发中都会用到为变量开辟内存空间,这里内存是在物理内存上吗?
如下是我在网上看到的,
但是没有说的太详细,


如果你只写用户态程序, 关系不大
拿到的内存都是OS给的, 一般不需要关心某个页现在在物理内存还是在交换


操作系统统一管理物理内存。程序向操作系统申请内存。应该就是这样


虚拟内存=物理内存+分页文件


计算机操作系统原理相关的书籍都有介绍。


为了编程方便和系统的安全性,人们发明了逻辑地址。在编程的时候写的地址就是逻辑地址,任何32位程序逻辑地址的取值范围都是 0x00000000-0xFFFFFFFF ,逻辑地址按照一定的方式转换成物理地址。每个进程的逻辑地址转换之后并不相同。所以这样就隔离的不同的进程,一个进程不能通过指针访问其他进程中的数据,所以比较安全。另外在一个进程看来,他独享了4GB(其中有一部分被操作系统占用)的内存空间。本程序不需要考虑其他进程的影响,所以编程的时候认为所有本程序独享了4GB的内存,程序写起来比较方便。

每段代码都需要一个 GDT 数据结构,其中保存了段的基址(每个段不同)。逻辑地址+基址 得到一个线性地址,线性地址是唯一的(如果不同进程转换或后的线性地址相同那么他们是指同一段内存),但是线性地址还不能直接作为物理地址,因为我们需要一种虚拟内存技术(每个进程可以独享4GB,多个进程就可能需要的内存超出总内存,那么我们就把与部分数据保存到硬盘上),线性地址在通过查表的方式确定其对应的物理内存地址。如果查表的结果是在硬盘(虚拟内存)上,那么就需要从硬盘上把这部分数据移到物理内存中,返回这个物理内存的地址[注1]。

注1: 如果内存不够,就会先把部分内存的数据放到虚拟内存里,然后在把需要的数据从虚拟内存读到实际内存。一般情况下个会比较费时,所以如果线性地址查表的结果是在虚拟内存里,会产生一个缺页中断 暂时挂起这个进程。


系统的内存由操作系统统一管理,程序访问的内存地址都是虚拟内存地址,如果所有的数据都放在物理内存里面显然物理内存是不够用的,所以有一部分数据是存放在虚拟内存(这里指的是利用 硬盘SSD等低速设备虚拟的内存)里面,真正用到的数据才会还缓存在物理内存里面名, 程序中的虚拟内存地址和物理内存有对应关系。
这部分知识 关于操作系统内存管理的书中应该会提到。

【热门文章】
【热门文章】