内存管理

一、虚拟内存

虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。

为了更好的管理内存,操作系统将内存抽象成地址空间,每个程序拥有自己的地址空间,这个地址空间被分割成多块,每一块称为一页。这些页被映射到物理内存中,但不需要映射到连续的物理内存中,也不需要所有页都必须再物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。

从上面的叙述可以看出,虚拟内存允许程序不用将地址空间每一页都映射到物理内存,也是就是说一个程序不需要全部调入内存就可以运行,这使得优先的内存运行大程序成为可能。例如有一台计算机可以产生16位地址,那么一个程序的地址空间范围时0~64k,改计算机只有32kb的物理内存,虚拟内存技术允许该计算机运行一个64k大小的程序。

分页系统地址映射

内存管理单元(MMU)管理着地址空间和物理内存的转换,其中的页表存储者页(程序地址空间)和页框(物理内存空间)的映射表。
一个虚拟地址分为两个部分,一部分存储页面号,一部分存储偏移量。
下图的页表中存放者16个页,这16个页需要用4个比特位来进行索引定位。例如对于虚拟地址(0010 0000 0000 0100),前4位时存储页面号2,读取表项内容位(1101),页表项最后一位表示是否存在内存中,1表示存在。后12位存储偏移量。这个页对应的页框的地址为(110 000000000100)
在这里插入图片描述

页面置换算法

在程序运行的过程中,如果要访问的页面不在内存中,就发生缺页中断而将该页面调入内存中。此时吐过内存已无空闲空间,系统必须从内存中调出一个页面到磁盘兑换区中来腾出空间。
页面置换算法和缓存淘汰算法类似,可以将内存看成磁盘的缓存。在缓存系统中,缓存的大小优先,当有新的缓存到达时,需要淘汰一部分已经存在的缓存,这样才有空间存放新的缓存数据。
页面置换算法的主要目标是使页面置换频率最低。
1. 最佳(OPT)

所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。

2. 最近最久未使用(LRU)

虽然无法知道将来要使用页面的情况,但是可以知道过去页面的使用情况。LRU将最近最久未使用的页面换出。
为了实现LRU,需要在内存中维护一个所有页面的链表。 当一个页面被访问时,将这个页面移到链表的表头。这样就能保证链表表尾的页面是最近最久为访问的。 因为每次访问都需要更新链表,因此这种方式实现的LRU代价很高。

在这里插入图片描述
3. 最近未使用(NRU)

每个页面都有两个状态栏:R与M,当页面被访问时设置页面的R=1,当页面被修改时设置M=1。其中R位会定时被清零。可以将页面分成一下四类。

  • R = 0, M = 0;
  • R = 0, M = 1;
  • R = 1, M = 0;
  • R = 1, M = 1;

当发生缺页中断时,NRU算法随机从类编号最小的非空类中挑选一个页面将它换出.
优先换出已经被修改的脏页面(R = 1, M = 1),而不是被频繁使用干净的页面(R = 1, M = 0).
4. 先进先出(FIFO)
选择换出的页面是最先进入的页面.
该算法会将那些经常被访问的页面也被换出,从而使缺页率上升.
5. 第二次机会算法
FIFO算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改:
当页面被访问时设置该页面的R位为1。需要替换的时候,检查最老页面的R位。如果R位是0,那么这个页面既老又没有被使用,可以立即置换掉;如果是1,就将R位清零,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入一样,然后继续从链表头部开始搜索。

在这里插入图片描述
6. 时钟

第二次机会算法需要在链表中移动页面,降低了效率,时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。

在这里插入图片描述
7. 分段

虚拟内存采用分页技术,也就是将地址空间划分为固定大小的页,每一页与内存进行映射。
下图为一个编译器在编译过程中建立的多个表,有4个表是动态增长的,如果使用分页系统的一位地址空间,动态增长的特点导致覆盖问题的出现。
在这里插入图片描述
分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以同步增长。
在这里插入图片描述

8. 段页式
程序的地址空间划分为多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。

9. 分页与分段的比较

  • 对程序员的透明性:分页透明,但是分段需要程序员显式划分每个段。
  • 地址空间的维度:分页是一维地址空间,分段是二维的。
  • 大小可否改变:页的大小不可变,短的大小可以动态改变。
  • 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值