操作系统系列2——内存管理
操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版
其他系列链接:
文章目录
一、虚拟内存
1、地址空间:
地址空间是物理内存的抽象,是一个进程可用于寻址内存的一套地址集合。
2、虚拟内存的概念
虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
3、分页
地址空间被分割成多个块,每一块称作一页或页面(Page)。每一页有连续的地址范围,这些页被映射到连续的物理内存(页框)。
4、页表
页表的目的是把虚拟页面(虚拟地址)映射为页框(物理地址)。页表给出了虚拟地址与物理地址的映射关系。从数学的角度说页表是一个函数,他的参数是虚拟页号,结果是物理页页框号
5、加速分页
-
TLB加速分页
概念: 将虚拟地址直接映射到物理地址,而不必再访问页表,这种设备被称为转换检测缓冲区(TLB)、相联存储器或快表
工作过程: 将一个虚拟地址放入MMU中进行转换时,硬件首先通过将该虚拟页号与TLB中所有表项同时进行匹配,判断虚拟页面是否在其中:
1、虚拟页号在TLB中: 如果MMU检测一个有效的匹配并且访问操作并不违反保护位,则将页框号直接从TLB中取出而不必访问页表。
2、虚拟页号不在TLB中: 如果MMU检测到没有有效的匹配项就会进行正常的页表查询。接着从TLB中淘汰一个表项,然后用新的页表项替换它。
6、针对大内存的页表
多级页表
倒排页表
二、页面置换算法
1、最优页面置换算法(OPT)
所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。
是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。
2、最近最久未使用页面置换算法(LRU)
虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。
3、先进先出页面置换算法(FIFO)
选择换出的页面是最先进入的页面。
该算法会将那些经常被访问的页面换出,导致缺页率升高。
4、第二次机会页面置换算法(second chance)
FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改:
当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。
5、时钟页面置换算法(clock)
第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。
三、分段
1、概念
虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。
如果使用分页系统的一维地址空间,动态增长的特点会导致覆盖问题的出现。
分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。
2、纯分段
-
概念:
分段和分页本质上是不同的,页面是定长的而段不是。
-
分段的优点:
共享: 有助于几个进程之间共享过程和数据。 比如共享库
保护: 每个段都可以独立地增大或减小而不会影响其他的段
3、分段与分页结合
程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。 这样既拥有分段系统 的共享和保护,又拥有分页系统的虚拟内存功能
4、分段与分页的比较
-
对程序员的透明性: 分页透明,但是分段需要程序员显式划分每个段。
-
地址空间的维度: 分页是一维地址空间,分段是二维的。
-
大小是否可以改变: 页的大小不可变,段的大小可以动态改变。
-
出现的原因: 分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。