物理内存和虚拟内存的区别
物理内存
- 1.插在板子上的内存是多大就是多大了
- 2.在cpu概念中物理内存就是cpu的地址线可以直接进行寻址的内存空间大小。
例子:比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。同理我们现在大部分使用的是32位的机子,32位的386以上CPU就可以支持最大4GB的物理内存空间了。
虚拟内存
- 正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的.
- 2.但是并不是所有数据都一起加到物理内存的,势必有一部分数据放入到其他介质(磁盘)。当进程需要的时候,再通过调度将其
从磁盘捞取到物理内存。 - 3.因此虚拟内存可以理解为进程所需的内存空间总和,其中一部分可能不在我们物理内存。
早期没有虚拟内存的时候出现的问题:
1.现在有多个程序需要运行,但是内存空间不足了,就需要将其他程序暂时拷贝到硬盘当中,然后将新的程序装入内存运行.由于大量的数据装入装出,内存的使用效率会十分Low。
2.由于程序都是直接访问物理内存的,所以一个进程可以修改其他进程的内存数据,甚至修改内核地址空间中的数据。
3.因为内存地址是随机分配的,所以程序运行的地址也是不正确的。
假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以寻址00xFFFFFFFF(4G)的地址空间,但如果你的计算机只有256M的物理内存0x0x0FFFFFFF(256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该如何处理呢?
- 1.计算机对虚拟内存进行分页产生页,对物理内存分页产生页帧。
- 2.这里的页和页帧大小一样,因此我们的页个数一般大于页帧数。
- 3.计算机上有一个页表,类似于map。是虚拟内存页和物理内存帧号的映射(一对一)。
- 4.因为是一对一所以有些虚拟内存页无法再页表上找到对应的页帧,这个时候如果需要物理内存但是找不到页帧,
只能调用操作系统进行覆盖最少使用的页帧,然后将页帧上修改的数据刷入磁盘。然后把我们该页需要的内容写入该页帧然后修改页表的映射。