第九章: 虚拟内存

1、虚拟内存允许进程执行时,不完全载入到内存中,可以部分载入到内存中

  • 优点逻辑地址空间大于物理地址空间时可使用,通俗的讲是 进程内存页多于物理内存帧 的时候适用
  • 可以被多个进程共享地址空间
  • 可以提供更有效的进程创建

2、按需调页:
本质上是,没有载入内存的那部分进程代码,只在需要使用时,换入内存中

  • 减少IO
  • 减少内存使用
  • 应答时间快

3、有效无效位:为了区分哪些代码块在内存中可以直接访问,哪些是在虚拟内存中需要换入内存

  • 有效 v:在物理内存中
  • 无效 i :不在物理内存中,在虚拟内存中

4、页错误:访问的页不在内存内,将发生【页错误】,此时需要中断,确定访问是否合法,不合法将结束进程,合法将执行下列操作
PS:不合法的含义是

  • 在物理内存内找到空闲帧,即找到不用的帧
  • 将虚拟内存中需要的页跟此空闲帧做交换
  • 修改页表信息
  • 重新开始中断的操作
    PS:没有空闲帧怎么办?

5、共享页:
cow技术允许父进程子进程共享物理内存的页

  • 快速创建新进程
  • 最小化新进程的页数
  • 从空闲缓冲池分配空闲页

6、没有空闲帧时,置换页:采取如下几种方法

  • 终止进程
  • 交换出一个帧
    页置换的基本操作:
  • 找到所需页在虚拟内存的位置
  • 查找一个空闲帧:如果有则用,如果没有则通过某种置换算法,选择一个牺牲帧
  • 需要的页读入空闲帧,修改页表与帧表
  • 重启进程

7、页置换算法:使用页置换的目的是最大程度减少页错误的发生

  • FIFO算法
  • 最优置换算法
  • LRU算法
  • 近似LRU算法
  • 基于计数的算法
  • 对一个置换算法是否合理采用如下方式进行评估:
    利用引用串来评估
    引用串:一系列页的序号
    评估:发生页错误的次数

7.1、FIFO算法:顾名思义是遇见需要换入的页就将内存中 【第一个帧】换出

7.2、最优置换:置换将来最长时间不会用的帧

  • 但是并不知道未来会用到哪个帧
  • 所以主要用于比较研究

7.3、LRU算法,最近最少使用算法:选择最长时间没有使用的帧,换出

  • 使用计数器实现
  • 使用栈结构实现,每新使用一个帧就将其移到栈顶

7.4、近似LRU算法:
附加引用位算法
二次机会算法
增强型二次机会算法

  • 附加引用位算法:
    每个页有8位引用位
    开始时8位全为0
    页被引用则将1放到最高位,其余位向右平移一位
    若不被引用,则将0放到最高位,其余位右移
    选择页时看哪个页的8位引用位最小

  • 二次机会算法:
    每个页有一个引用位
    检查最老页面的引用位。如果引用位是0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是1,就将引用位清0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续搜索。
    寻找一个最近的时钟间隔以来没有被访问过的页面。如果所有的页面都被访问过了,该算法就简化为纯粹的FIFO算法

  • 增强二次机会算法:
    利用二个位,即引用位和修改位+第一位表示是否被引用过+第二位表示是否被修改过
    采用这两个位,有以下可能类型
    +(0, 0)最近没有使用且也没有修改,用于置换最佳页
    +(0, 1)最近没有使用但修改过,需要写出到磁盘
    +(1, 0)最近使用过但没有修改,有可能很快又要被使用
    +(1, 1)最近使用过且修改过,有可能很快又要被使用,置换时需要写出到磁盘。

  • 基于计数的页置换:保留一个用于记录其引用次数的计数器
    最不经常使用页置换算法+理由:经常活动的页应该有更大的引用次数II.
    最常使用页置换算法+理由:引用次数少的页可能是刚刚调进来的,但将来可能经常用

8、物理帧的分配:每个进程需要分配最小需要运行的页,帧的分配有如下方式

  • 平均分配,每个进程物理帧大小相同
  • 比例分配,根据进程大小比例
  • 优先级分配,根据进程优先级方式分配

9、页置换分配:全局分配和局部分配
页置换可以分为全局置换和局部置换两大类,本质上是选择,内存中哪一块内存可以为我进程所用

  • 全局置换:从所有帧中选择一个置换帧
  • 局部置换:仅从自己的分配帧中选择一个置换帧

10、系统颠簸:因一个进程没有分配到足够的页帧,而频繁的发生页错误,这会导致:

  • CPU使用率下降,操作系统会试图增加多道程序的程度
  • 进程会试图抢别的进程的帧

11、内存映射文件:如何对磁盘上文件进行一系列操作

  • 对磁盘文件直接进行操作
  • 利用虚拟内存技术 -> 内存映射文件
    访问文件利用访问内存的方式

你可能感兴趣的:(第九章: 虚拟内存)