当前位置:   article > 正文

什么是虚拟内存?_虚拟内存是指外存的一部分,可以解决内存不足的问题,它按照外存的管理方式进行管理

虚拟内存是指外存的一部分,可以解决内存不足的问题,它按照外存的管理方式进行管理

虚拟内存是为了解决多个程序运行时内存不足的问题而出现的技术。
虚拟内存可以将外存当做内存来使用,它使得程序运行时感觉自己运行在一个连续的地址空间,而实际物理地址却不一定是连续的。
大多数操作系统都使用了虚拟内存,如window的虚拟内存和linux的交换空间。
在编译期间,为变量分配一个虚拟地址;在运行期间,MMU(内存管理单元,用于获取虚拟地址对应的物理地址)通过存储在内存中的页表获取这个变量虚拟地址对应的实际内存物理地址,但是这个时候该变量还未分配物理地址,所以MMU查不到它对应的物理地址是什么,此时发生了缺页中断。需要为它在内存上分配一块物理地址,并将该地址写回页表供以后使用。
虚拟内存被分割成大小固定的页,称为虚拟页(VP),物理内存也被分成大小固定的页,叫物理页(PP),虚拟页的大小和物理页的大小相同。因此,虚拟内存包括未分配的、已分配未缓存到内存的、已分配缓存到内存的。
发生缺页中断时,若物理内存空间满了,需要将物理空间中的数据和磁盘对换来腾出空间,称为页面置换。
页面置换算法:

  1. 最佳替换(OPT,Optimal replacement algorithm)
    是一种理论上的算法,将置换未来最长时间不会访问到的页面。实际中并不会知道未来最长不会被访问到的页面是什么。
  2. 最近最久未使用(LRU,Least Recently Used)
    将置换最近最久未使用的页面,维护一个访问链表,新访问的页面添加到链表的头部,那么链表的尾部就是最近最久未使用的页面。但是每次访问都需要更新链表,维护的代价较高。
  3. 最近未使用(NRU,Not Recently Used)
    每个页面有2个状态位R、M,R为1表示被访问,M为1表示最近被修改,R会定时清0。优先置换被修改而不是被访问的页面,也就是(0,1)要比(1,0)先被置换。
  4. 先进先出(FIFO)
    字面意思。但是容易将频繁访问的对象置换出去,而导致缺页率上升。
  5. 第二次机会算法
    单纯的先进先出可能会将频繁访问的页面置换出去,所以这里有一个机制,就是被访问的页面设置一个状态位R=1,当需要置换时从链表头部开始,若该元素的R为0,说明他是先进来的又没有被访问那么就直接把它置换掉。但是如果它的R是1,那么把R置为0并放到链表尾部,重新从链表头部寻找需要被置换的页面。
  6. 时钟(Clock)
    第二次机会算法需要在链表中移动页面,降低了效率。所以时钟算法将链表连成了一个环,指针指向最老的页面,当需要置换时,如果R=0,直接置换,如果R=1,把R置为0,指针后移。

虚拟内存采用的是分页技术,也就是将虚拟内存分页,将每一页和物理内存进行映射。
由于分页页面大小是固定的,存储动态增长的数据时可能会发生覆盖问题。因此提出了分段的想法,分段是把地址空间划分为多个段,每个段的大小可以不同而且可以动态增长,可以解决覆盖问题。
段页式:
程序的地址空间划分为多个拥有独立地址的段,每个段上的地址空间划分成大小相同的页,这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。
分页和分段的比较:

  • 分页对程序员是透明的,分段需要程序员显示的划分每个段。
  • 分页是地址空间是一维的,分段是二维的。
  • 分页页面大小固定,分段是可以动态增长的。
  • 分页是为了实现虚拟内存,从而实现更大的内存地址空间。分段是为程序划分逻辑上独立的地址空间有助于共享和保护。

快表:
快表是为了加快根据虚拟地址查找物理地址的速度,建立在虚拟地址和内存页表之间的一个缓存Cache,当需要查询物理地址时,先访问快表,若快表中存在,则直接访问内存地址数据,当快表中不存在,再去访问内存,并把内存中对应的物理地址写回到快表中,若快表满了,则会通过一定的置换算法进行置换。
其实到这里不难发现,快表的思想和我们实际中用到的redis思想类似,都是通过增加缓存的方式提高访问速度。

以上的知识点设计的较多,但都是围绕虚拟内存来展开的。
打个比方:分页是你家1平米、2平米、3平米这样的计算方式,分段是把你家分成卧室、厨房等。所以分段是给程序划分独立的地址空间。
打个不恰当的比方,虚拟内存相当于你和别人说,你家特别大,有书房、卧室、影音室等等等等,还写在了一张纸上,但实际上你家只有2个房间。这时候一个人(程序)看着这张纸,说要看你家的书房,现在2个空房间,所以发生了缺页中断,你把你家的一个房间装修成书房给他看了,这时候这个人说看你家的卧室,你又把另一个房间装饰成卧室给他看了,这时候他又要看书房,好的命中了你就直接把书房给他看了,这时候他又要看厨房,你想刚才他看书房了说不定一会还要看,就只能先把卧室的东西先搬出去,再把房间装饰成厨房给他看。总之大概就是这个意思。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/284966
推荐阅读
相关标签
  

闽ICP备14008679号