【操做系统】虚拟存储器

相关文章:html

【操做系统】存储器管理程序员

【操做系统】处理机调度简述算法

【操做系统】之进程管理数据结构

【操做系统】经典的同步问题(生产者消费者问题, 哲学家进餐问题, 读写问题)性能

内存的容量有限, 若是有大做业或大量做业运行, 内存就会不够用. 为解决这一问题边催生了虚拟存储器的概念.spa

常规存储器管理方式的特征操作系统

  1. 一次性 
    做业必须一次性地所有装入内存后才能开始运行.
  2. 驻留性 
    做业被装入内存后, 整个做业都一直驻留在内存中, 其中任何部分都不会被换出, 直至做业运行结束.

局部性原理 
由1968年P.Denning提出: 在较短的时间内, 程序的执行仅局限于某个部分, 相应地, 它所访问的存储空间也局限于某个区域. 
他提出了几个论点:3d

  1. 程序执行时, 除了少部分的转移和过程调用指令外, 在大多数状况下是顺序执行的.
  2. 过程调用将会使用程序执行轨迹由一部分区域转至另外一部分区域.
  3. 程序中存在许多循环结构, 这些结构虽然只有少数指令构成, 可是他们将被屡次执行.
  4. 程序中号包括许多对数据结构的处理, 这写每每都局限在很小的范围内.

局限性还表如今时间和空间方面指针

  • 时间局限性 
    因为程序中存在大量循环操做, 那么某些指令(数据)在不久以后会再次被执行(访问).
  • 空间局限性 
    程序在一段时间内访问的地址可能集中在必定的范围内, 好比程序的顺序执行.

虚拟存储器

定义
具备请求调入和置换功能,  能从逻辑上对内存容量加以扩充的存储器系统

特征code

  1. 屡次性. 一个做业中的程序和数据无需再做业运行时一次性所有装入内存, 而是容许被分红屡次调入内存运行. (只需当前要运行的部分程序和数据装入内存便可)
  2. 对换性. 一个做业中的程序和数据, 无须在做业运行时一直常驻内存, 而是容许在做业的运行过程当中进行对换操做.(在进程运行期间, 将有用的程序或数据换入, 无用的则换出)
  3. 虚拟性. 可以从逻辑上扩充内存容量. 提升内存利用率 

    虚拟性是以屡次性和对换性为基础的.


虚拟存储器能够经过请求分页, 请求分段的方法实现, 它们都须要软硬件支持, 主要硬件有页(段)表机制, 缺页(段)中断机构, 地址变换结构

请求分页存储管理方式

请求页表

页号 物理块号 状态位P 访问字段A 修改位M 外存地址

分为页号, 物理块号, 状态位P, 访问字A段, 修改位M, 外存地址 
状态位(存在位)P: 因为该字段只有一位, 又称位字. 用于指示该页是否已调入内存, 供程序访问时参考. 
访问字段A: 用于记录本也在一段时间内被访问的次数, 或记录本页最近已有多长时间未被访问. 
修改位M: 标识该页在调入内存后是否被修改过. 
外存地址: 用于指出该页在外存的地址.

缺页中断机构

每当要访问的页面再也不内存时, 便产生依次缺页中断, 请求OS将所缺之页调入内存.

  • 指令在执行期间产生和处理中断信号
  • 一条指令在执行期间可能产生屡次缺页中断

地址变换结构

Alt text

内存分配

最小物理块数 
最小物理块数能保证进程正常运行, 它取决于指令的格式, 功能和寻址方式.

内存分配策略 
内存在进行分配时能够采起固定分配和可变分配.

  • 固定分配, 为每一个进程分配一组固定数目的物理块, 在进程运行期间不可更改.
  • 可变分配, 为每一个进程分配必定数目的物理块, 在进程运行期间能够更改.

页面置换时能够采起全局置换和局部置换.

  • 全局置换, 若是进程在运行期间返现缺页, 则将OS所保留的空间物理块取出一块分配给该进程, 或者以全部进程的所有物理块为标的, 选择一块换出, 而后将所缺之页调入.
  • 局部置换, 若是进程在运行中发现缺页, 则只能从分配给该进程的n个页面中选出一页换出, 而后在调入一页, 以保证分配给该进程的内存空间不变.

经过以上能够组合一下三种策略:

  1. 固定分配局部置换 
    为每一个进程分配多少物理块是根据进程类型(交互型或批处理型)或根据程序员的建议来肯定.
  2. 可变分配全局置换 
    凡是产生缺页的物理块, 都将得到新的物理块.
  3. 可变分配全局置换 
    为每一个进程分配必定数目的物理块, 但当某进程发现缺页时, 只容许从该进程在内存的页面中选择一页换出.

物理块分配算法

  1. 平均分配算法. 将系统中全部可供分配的物理块平均分配给各个进程.
  2. 按比例分配算法. 根据进程大小按比例分配物理.假设系统中有n个进程, 每一个进程页面数为, 则系统中页面数总和为

     

    . 物理总块数为m, 则每一个进程能分到的物理块数

     

    .
  3. 考虑优先权的分配算法. 一部分按比例分配, 一部分根据进程的优先权分配

页面置换算法

最佳置换算法(Optimal)

OPT算法淘汰之后不使用或者在最长(将来)时间内再也不被访问的页面

最佳置换算法有最好的性能当没法实现, 一般用它做为标准评价其余算法

先进先出置换算法(First In First Out)

淘汰最早进入内存的页面, 即在内存中驻留时间最久的页面.

最久未使用置换算法(Least Recently Used)

淘汰最近最久未使用的页面

最少使用置换算法*(Least Frequently Used)

淘汰最近时期使用最少的页面.

LFU算法的页面访问图和LRU算法的页面访问图彻底相同

时钟置换算法(Clock)

为每页设置一位访问位, 再将内存中的全部页面都经过连接指针连接成一个循环队列. 当某页被访问时, 其访问位被置1. 置换算法在选择一页淘汰时, 只需检查页的访问位. 若是是0, 就选择该页换出; 若为1, 则从新将它置0, 暂不换出; 再按照FIFO算法检查下一个页面. 当检查到队列中的最后一个页面时, 若其访问位仍为1, 则再返回到队首去检查第一个页面.

Alt text

改进Clock算法 
淘汰的页面便是未使用过的页面, 又是未被修改过的页面. 
由访问位A和修改位M能够组合成下面四种类型的页面:

  • 1类(A=0, M=0): 表示该页最近既未被访问, 又未被修改, 是最佳淘汰页.
  • 2类(A=0, M=1):表示该页最近未被访问, 但已被修改, 并非很好的淘汰页.
  • 3类(A=1, M=0):最近已被访问, 但未被修改, 该页有可能再被访问.
  • 4类(A=1, M=1):最近已被访问且被修改, 该页可能再被访问.

其执行过程分为如下三步:

  1. 从指针所指当前位置开始, 扫描循环队列, 寻找A=0且M=0的页面, 将遇到的第一个页面做为淘汰页. 在第一次扫描期间不改变访问位A.
  2. 若是第一步失败, 即查找一轮后未遇到的第一类页面, 则开始第二轮扫描, 寻找A=0且M=1的页面, 将所遇到的第一个这类页面做为淘汰页. 在第二轮扫描期间, 将全部扫描过的页面的访问位置都置0.
  3. 第二步也失败, 亦即未找到第二类页面, 则将指针返回到开始的位置, 并将全部的访问位复0. 而后重复第一步. 若果仍失败, 必要时重复第二步, 此时就必定能找到被淘汰的页.

改进的Clock算法可减小磁盘的I/O操做次数, 可是系统开销会增长.

页面分配策略

  • 什么时候调入页面

    1. 预调入策略 
      将在不久以后便会被访问的页面预先调入内存
    2. 请求调入策略 
      当进程所访问的页面再也不内存中时, 便当即请求, 由OS将所需页面调入内存.
  • 从何处调入页面

    1. 若系统由足够的对换区, 则从对换区调入. 不然从文件区调入.
    2. UNIX方式: 未运行国的页面从文件区调入, 运行过的页面从对换区调入(运行过的页面已被换出至对换区)
  • 缺页率 
    即, 访问失败页面的次数与总访问数之比. 
    S为访问页面成功的次数, F为方位失败的次数. 则缺页率为

     

抖动

抖动现象: 在系统中的进程太多, 须要频繁的进行进程的对换操做, 以致于占用太多时间, 从而处理机的利用率降低并趋于0的状况, 咱们称之为抖动. 一般用工做集来避免抖动

工做集是在某段时间内, 进程实际索要访问的页面集合. 咱们将这些页面又称为活跃页面.

预防抖动的方法

  1. 采起局部置换策略
  2. 工做集算法融入处理机调度
  3. 调节缺页率
  4. 暂停进程

请求分段存储管理方式

请求段表

段名 段长 段基址 存取方式 访问字段A 修改位M 存在位P 增补位 外存始址

分为段名, 段长, 段基地址, 存取方式, 访问字段A, 修改位M, 存在位P, 增补位, 外存地址

  1. 存取方式, 该字段为两位, 可执行(00), 可读(01), 可写(11)
  2. 访问字段A, 记录该段的访问次数
  3. 修改位M, 表示该页调入内存后是否已被修改过
  4. 存在位P, 指示本段是否已调入内存
  5. 增补位, 特有字段, 表示本段在运行过程当中是否作过动态增加.
  6. 外存始址, 指示本段在外存中的起始地址, 即起始盘块号.

缺段中断机构

Alt text

地址变换机构

Alt text

相关文章
相关标签/搜索