操作系统(8)

8.1硬件和控制结构

  1. 虚拟内存:进程执行时只将部分程序放入内存。因此程序可以比物理内存大
    1. 虚拟内存:用辅助存储器(一般指磁盘)作为内存的补充
    2. 虚拟内存大小:受计算机的寻址机制和辅助存储器限制
    3. 由os和硬件MMU虚拟出来
    4. 虚拟地址:即逻辑地址、
    5. 虚拟地址空间:分配给某进程(程序)的虚拟地址范围
    6. 实地址:即物理地址,物理内存中的某字节的地址
  2. 驻留集:程序运行时装入内存的部分(与工作集区分,工作集是某段时间工作的部分)
  3. 缺页(段)中断:访问的逻辑地址不在内存中时,os阻塞该进程,启动I/O,装入所需页(段)进程变为就绪态
  4. 虚拟内存优点
    1. 内存中可以保留更多进程,系统并发度提高,提高CPU利用率和内存利用率
    2. 进程可以比内存容量大,可以写大进程
    3. 访问速度接近内存,每位成本接近外存
  5. 理论支持:局部性原理(包括时间局部性和空间局部性)
  6. 分页
    1. 页表记录
      1. 帧号(该页存在哪一帧)
      2. p驻留位:0表示不在内存
      3. 引用字段:最近被访问次数,距上次访问时间间隔等数据
      4. m修改位(脏位):1表示修改过
      5. 磁盘地址:在磁盘中什么位置
  7. 缺页中断
    1. 在第i条指令发生中断,重新执行时还是在第i条开始
    2. 一条指令可能引起多次缺页中断
  8. 虚实地址转换
    1. 通过页号(在虚拟地址中)找到页表中对应项,从而找到页帧号(作为物理地址的页帧号),页内偏移还是页内偏移
  9. 分页的多级页表
    1. 为了防止页表占用空间过大,将页表划分多个页表页,离散(甚至部分)装入内存
  10. 倒排页表(反置页表)
    1. 为内存的每一页框设置一个页表项
    2. 记录这一帧被那个进程哪一页存放
    3. 若只是简单排序,搜索时间长,故可以哈希
      1. 对虚拟地址散列,相同哈希值的页项被链在一起(为了减少搜索时间)
  11. TLB(快表)(转换检测缓冲区)
    1. 将也表中常用进程放入TLB
    2. 由CPU中的MMU控制
    3. 并行匹配查找时间很快(页在不在TLB中可以很快判断)
    4. 计算:命中率*(TLB访问处理(得出物理地址)时间+访存时间(拿取数据))+(1-命中率)*(访存时间(从磁盘装入所需页到内存中并更新TLB)+TLB访问处理时间+访存时间(拿取数据))
      1. TLB不命中后有两种情况,一是在内存页表中命中(更新TLB),二是不命中发生缺页中断,从磁盘中读入并更新页表和TLB
  12. 页尺寸的考虑
    1. 页越小,内碎片越小
    2. 页越大,页表越短(因为一个程序就那么大,页越大页数越少)
    3. 页越大,磁盘I/O开销越小
    4. 内存越大,页可以越大
    5. 页越小局部性越好,缺页率低
    6. 页增大时,缺页率先高后低(后面页大到和进程差不多大就不缺了)
  13. 分段
    1. 段不等长
    2. 发生缺段中断的时候,可能需要移动或淘汰多个段
    3. 段表记录
      1. 段长
      2. 段的内存起始
      3. 驻留位
      4. 修改位
      5. 访问字段
      6. 存取权限(所以方便共享)
      7. 扩充位:该段是否可扩充,若不可,越界时出错,否则增加段长
  14. 段页式
    1. 用户分段,段再分页
    2. 每个进程一个段表,每个段一个页表
  15. 保护和共享
    1. 简单分段和虚拟分段易于保护和共享
    2. 每段有执行,读,写权限
    3. 地址转换因为段表而可以防止越界

 

8.2操作系统软件——虚拟内存

  1. CPU必须支持分页和分段,才能实现虚拟内存(因为不是整个程序放进内存中)
  2. 需要考虑的问题
    1. 读取策略:什么时候将页读入内存
      1. 请求调入:需要访问时调入
      2. 预调入:在调入所需页同时,也调入可能马上访问的页面
    2. 置换策略:选择哪一页出去?基于局部性原理
      1. OPT最佳置换
        1. 淘汰用不再使用或者下次访问距当前时间最长
        2. 最佳,但不可实现
      2. LRU
        1. 最近最久未使用(上一次使用距离现今最长)
        2. 为每页添上时间戳,开销大
      3. FIFO
        1. 淘汰驻留内存时间最久的一页
        2. 性能差
        3. 可能出现belady异常现象(帧数越多,缺页越频繁)
      4. 时钟算法(第二次机会)
        1. 每个页表项有一个使用位
        2. 置换后指针前移
        3. 改进的时钟算法
          1. 增设修改位
          2. 最佳淘汰页是U=0,M=0,U的权重大于M
      5. 页缓冲技术
        1. 增加一条队列,淘汰时先不撤出内存,而是排到相应队队尾队尾,而所缺页则装入到链首空闲帧(因为下一个要运行)
        2. 当缺页时,先在空闲帧链表中寻找
    3. 放置策略
      1. 页:离散放到任意帧
      2. 段:FF,NF等
    4. 驻留集管理:如何分配帧,如何置换帧
      1. 帧越少,进程越多,并发度越高
      2. (考虑最小数量帧时)一条指令要用到的页应该同时在内存中
      3. 当一个进程的工作集(活跃页面)都在内存时,可使得缺页率达到可接受下限
      4. 固定分配
        1. 平均分配
        2. 按比例分配(按照进程大小)
        3. 按优先级分配
      5. 可变分配
        1. 进程所得页框数可增多或减少
      6. 局部置换
        1. 从该进程中选择置换
        2. 在整个内存范围内寻找置换帧
      7. 分配置换组合
        1. 固定分配+全局置换(不存在)(因为固定分配每个进程帧数相同,,若全局置换则影响某些进程帧数)
        2. 固定分配+局部置换 不灵活
        3. 可变分配+全局置换:要考虑剥夺哪个进程的帧数
        4. 可变分配+局部置换:最常用
    5. 清除策略:何时将脏页写回
      1. 请求时清除(置换时写回
      2. 预约式清除:一段时间或脏页达到一定数量时
    6. 加载控制:调整并发度,防止抖动
      1. 用于调页的时间比实际运行时间还多,CPU利用率急剧下降(并发度过高)
      2. 预防:
        1. L=S准则:产生缺页的平均时间(缺页中断之间的平均时间)等于处理一次缺页中断的平均时间
        2. 50%准则:磁盘利用率50%
        3. 采用局部置换

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值