虚拟内存和物理内存的区别和关联(虚拟内存和实存的区别)

问题

虚拟内存地址、物理内存地址、内存分段、内存碎片、内存分页都是什么?

Windows系统中的虚拟内存,Linux中swap分区都是干什么用的?

程序装载

之前提到过指令是一条一条的顺序执行,这就需要可执行程序加载后占用的内存空间应该是连续的。

计算机通常会同时运行多个程序,也就是会同时加载多个程序,并不能让程序自己指定的在内存中加载的位置,因为你想要的内存地址有可能被其他加载的程序占用了。

为了解决上面的问题,通常是在内存中找一段连续的内存空间,分配给装载的程序,这段连续内存空间地址与程序指令中指定的内存地址做一个映射。

虚拟内存地址(Virtual Memory Address) : 程序指令中指定的内存地址。

物理内存地址(Physical Memory Address):在实际内存中那段连续的内存空间地址。

内存分段:通过维护一个虚拟内存到物理内存的映射表,然后程序指令执行的时候,通过虚拟内存地址,找到对应的物理内存地址,然后执行。

虚拟内存和物理内存的区别和关联(虚拟内存和实存的区别)

内存交换(Memory Swapping):如下图所示,连续启动几个程序之后,关掉部分程序,剩下的内存空间并不是连续的,虽然剩下的内存空间很多,但是分布在多个不连续的内存空间中「内存碎片(Memory Fragmentation)」。这个时候装载新的程序,就需要将内存中部分程序写到硬盘中,然后再装载到内存中,再次装载的程序,会装载跟在内存中已连续占用的内存空间后面,这样原本分散的内存空间,会重新合并成一段连续的内存空间,以供装载新的程序使用。

虚拟内存和物理内存的区别和关联(虚拟内存和实存的区别)

内存分页(Paging)

​ 虽然通过内存分页可以很好解决计算机同时装载多个程序问题。但是我们都知道,硬盘的读写速度比内存慢很多,如果每次内存交换的都需要把一大段连续的内存数据写到硬盘上,而且还是一个内存空间占用很大的程序,这样会导致整个机器很卡。

内存分页会把整个物理内存空间切割成一段段固定尺寸的大小(通常是4KB),程序占用的虚拟内存也是进行一样的切割。这个固定尺寸且连续的内存空间就叫做,虚拟内存到物理内存的映射也变成按一个一个页来映射。这样装载程序和切换内存的时候都是页为单位,装载程序的时候也不是一次性装载全部指令和数据,只需要装载用到的那一页的指令和数据就可以了。

​ 由于内存空间都是预先划分好的,也就没有了不能使用的碎片,而只有被释放出来的很多 4KB 的页。即使内存空间不够,需要让现有的、正在运行的其他程序,通过内存交换释放出一些内存的页出来,一次性写入磁盘的也只有少数的一个页或者几个页,不会花太多时间,让整个机器被内存交换的过程给卡住。

虚拟内存和物理内存的区别和关联(虚拟内存和实存的区别)

回到问题

​ Windows中的虚拟内存和Linux中swap分区,都是用作与物理内存进行交换的空间。

文章来源:成哥他打打

版权声明:本文【虚拟内存和物理内存的区别和关联(虚拟内存和实存的区别)】内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年 11月 6日 20:47:00
下一篇 2022年 11月 6日 20:53:00

相关推荐