非连续2 虚拟内存1

本文探讨了虚拟内存的起源,包括分页机制的问题及其解决方案,如TLB快表和多级页表。介绍了覆盖和交换技术在早期操作系统中的应用,以及它们在内存管理和程序执行效率上的权衡。此外,还提到了反向页表的概念,以及虚拟内存如何帮助应对内存资源限制。
摘要由CSDN通过智能技术生成

页表

页表概述

  • 在这里插入图片描述

  • Resident bit代表该页帧是否存在在物理内存 访问异常由操作系统处理

  • 分页机制问题

    • 访问一个内存单元需要2次内存访问(时间)
    • 页表可能很大(空间)
  • 解决

    • 缓存cache(时间)
    • 间接访问(多级页表)(空间)

TLB快表

  • 概念:缓存近期访问的页帧转换表项
    • 使用关联内存实现,具有快速访问性能
    • 如果TLB命中,物理也好可以很快被获取
    • 如果未命中 对应的表项被更新到TLB中(x86由cpu硬件完成)
      为了减少TLB缺失 写程序注意具有访问局部性

多级页表

  • 在这里插入图片描述

将某些不存在对应关系的空间省去

反向页表

  • 思路:逻辑地址大小与页表大小无关 与物理地址空间大小有关

虚拟内存的起因

  • 程序运行时需要的内存越来越大
  • 理想的存储器:更大 快 便宜 数据非易失性
  • 硬盘大 但慢 而且程序不能在硬盘执行
  • 早期技术
    • 覆盖技术
    • 交换技术

覆盖

  • 目标:在较小的可用内存中运行较大的程序。常用余多道程序系统
  • 代表:dos操作系统
  • 原理:将程序按照其自身逻辑结构,划分为若干个功能上相对独立的程序模块,不会同时执行的模块共享同一块内存区域,按时间先后来运行
    • 必要部分代码和数据常驻内存
    • 可选部分在其他程序模块中实现,平时存放在外存中,有需要时装入内存
    • 不存在调用关系的模块不必同时装入内存,从而可以相互覆盖
  • 缺点:
    • 需要由程序员划分模块,费时费力,增加了编程的复杂度
    • 覆盖模块从外存装入内存,实际是以时间延长来换取空间节省

交换

  • 代表:早期linux提供 对程序员透明
  • 目标:多道程序在内存时,让正在运行的程序或需要运行的程序获得更多的内存资源
    • 将暂时不能运行的程序送到外存
    • 操作系统将一个进程的整个地址空间的内容保存到外存中,而将外存中的某个进程的地址空间读入到内存。换入换出内容的大小为整个程序的地址空间
  • 问题:
    • 何时交换? 只当内存空间不够或有不够的危险时换出
    • 交换区的大小:
      • 必须足够大存放所有用户进程的所有内存映像的拷贝
      • 必须能够对内存映像进行直接存取
    • 程序换入时的重定位:换出后再换入的内存位置一定在原来的位置上吗?最好采用动态地址映射的方法

覆盖与交换的联系

  • 目标相同
  • 覆盖发生在程序内 力度小 增加程序员负担
  • 交换发生在程序间 力度大 不需要程序员 开销大
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值