1、什么是虚拟内存
虚拟内存是计算机系统内存管理的一种技术。它使的应用程序认为他拥有连续的可用内存(一个连续完整的地址空间),而实际上,他通常是被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
注意:虚拟内存不只是“用磁盘空间来扩展物理内存”的意思--这只是扩充内存级别以使其包含磁盘驱动器而已,把内存扩展到磁盘只是使用虚拟内存技术的一个结果,他的作用可以通过覆盖或者把处于不活动状态的程序以及他们的数据交换到磁盘上等方式实现。
2、为什么会有虚拟内存
许多年以前,当人们还在使用DOS或更古老的操作系统的时候,计算机内存还非常小,一般都是以K为单位进行计算的,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图像界面的想起还有用户需求的不断增大,应用程序的规模也随之膨胀起来。终于一个难题出现在程序员面前,那就是应用程序太大以至于内存容不下该程序,通常解决的办法是把程序分割成许多覆盖快的片段。覆盖块0首先运行,结束时他将调用另一个覆盖块。虽然覆盖块的交换是由os完成的,但是必须先有程序员吧程序先进行分割,这是一个费时费力的工作,而且相当枯燥。虚拟存储器就应运而生。
3、物理地址、虚拟地址、逻辑地址区别
32位系统的地址总线是32位的,64位CPU是指CPU内部的通用寄存器的宽度为64比特,拥有64位寛度的数据总线
(1)虚拟地址及虚拟地址空间:是一块连续完整的空间。虚拟内存地址是每个进程可以直接寻址的地址空间,不受其他进程干扰。每个指令和数据单元都在这个虚拟空间中拥有确定的地址。
虚拟内存就是进程中的目标代码,数据等虚拟地址组成的虚拟空间。
虚拟地址有多大完全是有地址总线决定的,有多少位的地址总线,就会有2的多少次方的地址。
虚拟地址也是有大小限制的,如果A程序占了2G的虚拟内存,那剩下的程序只有2G的虚拟内存可以用了。
(2)物理地址空间和物理地址:物理内存,真实存在的插在主板内存槽上的内存条的容量的大小.
(3)逻辑地址:源代码经过编译后形成目标代码,每个目标代码都是以0为基址书序进行编制的。这样生成的目标程序占据一定的地址空间,称为作业的逻辑地址空间,简称逻辑空间。
逻辑地址是针对程序来说的,虚拟地址是针对操作系统来说的,有了逻辑地址,程序就可以在自己内部有自己的逻辑位置,然后再映射到物理内存上就可以加上自己的逻辑偏移。
只要程序申请的内存空间满足了,os就可以为程序创建一个进程运行。在申请虚拟内存的时候也是一样。但是申请的内存空间一定是连续的。
4 虚拟内存的好处:
(1)VA到PA的映射会给分配和释放内存带来方便。物理地址不连续的几块内存可以映射到地址连续的一块内存。比如要用malloc分配一块很大的内存空间,虽然有足够多的空闲物理内存,却没有足够大的连续空闲内存,这时就可以分配多个不连续的物理页面而映射到连续的虚拟地址范围。
(2)一个系统如果同时运行着很多进程,为各进程分配的内存之和可能会大于实际可用的物理内存,虚拟内存管理使得这种情况下各进程仍然能够正常运行。
因为各进程分配的只不过是虚拟内存的页面,这些页面的数据可以映射到物理页面,也可以临时保存到磁盘上而不占用物理页面,在磁盘上临时保存虚拟内存页面的可能是一个磁盘分区,也可能是一个磁盘文件,称为交换设备(Swap Device)。当物理内存不够用时,将一些不常用的物理页面中的数据临时保存到交换设备,然后这个物理页面就认为是空闲的了,可以重新分配给进程使用,这个过程称为换出(Pageout)。如果进程要用到被换出的页面,就从交换设备再加载回物理内存,这称为换入(Pagein)。换出和换入操作统称为换页(Paging)