OS- -请求分页系统、请求分段系统和请求段页式系统(二)

文章目录

  • OS- -请求分页系统、请求分段系统和请求段页式系统(二)
    • 一、基本分段存储管理方式
      • 1.分段系统的组成:
      • 2.段表
      • 3.查找过程
      • 4.分段和分页的对比
    • 二、段页式内存管理方式
      • 1.分页, 分段管理的优缺点分析
      • 2.段页式管理的结构
      • 3.段表, 页表
      • 4.查找过程
    • 三、虚拟内存
    • 四、请求分页管理方式
      • 1.页表机制
      • 2.缺页中断机构
      • 3.页面置换算法
    • 四、页面分配策略
      • 1.驻留集
      • 2.几种分配策略
      • 3.何时调入页面
      • 4.何处调入页面
      • 5.抖动(颠簸)现象
      • 6.工作集

一、基本分段存储管理方式

  • 分段 : 进程的地址空间会按照自身的逻辑关系划分为若干个段, 每个段都有一个段名, 每段从0开始编址
  • 内存分配规则 : 以段为单位进行分配, 每个段在内存中占据连续空间, 但各段之间可以不相邻

1.分段系统的组成:

  • 段号------ 段号的位数决定了每个进程最多可以分为几个段
  • 段内地址------段内地址的位数决定了每个段的最大长度是多少

2.段表

  • 程序分为多个段, 各个段离散地装入内存, 为了保证程序能正常运行, 就必须能从物理内存中找到各个逻辑段的存放位置. 为此,需为每个进程建立一张段映射表, 简称 " 段表 " .
  • 关于段表 :
  • 每个段对应一个段表项, 记录着该段在内存中的起始位置 ( 基址 ) 和 段长
  • 各个段表项的长度是相同的, 因此和页号一样, 段号是" 隐含"的, 不占据存储空间

3.查找过程

4.分段和分页的对比

  • 页是信息的物理单位, 分页的主要目的是为了实现离散分配, 提高内存利用率. 分页仅仅是系统管理上的需要, 完全是系统行为,对用户是不可见的
  • 段是信息的逻辑单位, 分段的主要目的是更好地满足用户需求. 一个段通常包含着一组属于一个逻辑模块的信息, 分段对用户是可见的,用户编程时需要显式地给出段名
  • 页的大小是固定且由系统决定, 段的长度却不固定, 决定于用户编写的程序
  • 分页的用户进程地址空间是一维的, 分段的用户进程是二维的.
  • 分段比分页更容易实现信息的共享和保护

二、段页式内存管理方式

1.分页, 分段管理的优缺点分析

2.段页式管理的结构

  • 先分段 , 再分页
  • 段页式管理的逻辑地址结构 :由段号, 页号, 页内偏移 组成
  • 段号的位数决定了每个进程最多可以分为几个段
  • 页号位数决定了每个段最大有多少页
  • 页内偏移量决定了页面大小和内存块的大小
  • 注意 :

  • "分段"对用户是可见的, 而将各段"分页"对用户是不可见的, 系统会根据段内地址自动划分页号和段内偏移量,

  • 因此段页式管理的地址结构是"二维"的.

3.段表, 页表

  • 每一个进程对应一个段表, 每一个段又对应一个页表, 因此一个进程可能对应多个页表.

4.查找过程

  1. 逻辑地址得到段号, 页号, 页内偏移
  2. 段号与段表寄存器的段长度比较, 检查是否越界
  3. 由段表始址, 段号找到对应段表项 ---- ( 一次访存)
  4. 根据段表中记录的页表长度, 检查页号是否越界
  5. 由段表中的页表地址, 页号得到查询页表, 找到相应页表项 ---- ( 二次访存)
  6. 由页面存放的内存块号, 页内偏移得到最终的物理地址
  7. 访问目标单元 ---- ( 三次访存)

三、虚拟内存

  • 传统存储管理方式的特征, 缺点:
  • 一次性 : 作业必须一次性全部装入内存才能开始运行
  • 作业很大时, 无法装入导致大作业无法运行
  • 大量作业要求运行时内存无法容纳所有作业, 导致多道程序并发度下降
  • 驻留性 : 一旦作业被装入内存, 就会一直驻留在内存中, 直到作业运行结束, 这样会导致内存中驻留大量的, 暂时用不到的数据,浪费内存资源

虚拟内存—基于局部性原理

  1. 在程序装入时, 将程序中很快会用到的部分装入内存, 暂时用不到的部分留在外存, 就可以让程序开始执行.
  2. 在程序执行过程中, 当所访问的信息不在内存时, 由操作系统负责将所需信息由外存调入内存, 然后继续执行程序.
  3. 内存空间不够时, 操作系统负责将内存中暂时用不到的信息换出到外存
  4. 在用户看来, 就有一个比实际内存大很多的内存, 这就叫虚拟内存

注意 :