虚拟内存储器

虚拟存储器管理:
    实存管理需要将作业一次性全部装入内存,作业的大小收到内存的限制。解决方法有两种:
        1、增加主存,
        2、逻辑上扩充内存,即虚拟内存。
    程序的局部性特性:
        时间局部性:指程序中的某条指令一旦被执行,则在较短的时间内,该条指令可能被在执行
        空间局部性:指一旦程序访问了某个存储单元,在较短的时间内,其附近的存储单元很可能也被访问
    虚拟存储器的基本原理:
        一个作业在运行之前,没有必要全部装入内存,而仅需将那些当前要运行的部分指令和数据,先装入内存即可启动运行。
        虚拟存储技术:为用户提供一种不受物理存储器结构和容量限制的存储技术,称为虚拟存储技术。
        实质:虚拟地址空间与主存地址空间分开
        虚拟空间限制:指令中地址场长度限制(主要原因),外部存储器容量大小控制。
    虚拟存储器优点:
        大程序:可以在较小的内存中执行较大的用户程序
        大的用户空间:提供给用户可用的虚拟内存空间通常大于物理内存
        并发:可以在内存中容纳更多的程序并发执行
        易于开发:与覆盖技术比较,不必影响编程时的程序结构。
  分页存储器管理:
      实存中需要将所有页一次性装入内存,虚存中只需要将部分页装入内存。
      虚存中增加了请求调页和页面置换功能
      多级页表:由于虚存中只需要将部分页装入内存,所以剩余的页之间不再连续,并且没必要每次都调用完整的页表,浪费内存空间
               因此通过一个顶级页表(页目录)为不再连续页表提供索引,这是我所理解的二级页表的本质。
               可以节约内存空间
      反向页表:不依据进程的逻辑页号来组织,用物理页面号来组织(为每一个页架设置一个页表项,并按照页架号排序。)
               只含已调入主存的页面,不在主存中的页面需借助传统页表查找页架
               大小只与内存大小、页面大小计算。
               大小计算:64M 主存,若页面大小为 4K,则反向页表只需 64KB(按32位系统计算)
               包含:hash索引值 、页架号
               每个进程一个反置页表;虚拟地址中的逻辑页号,经 K=hash(p)获得 hash 值,并查找 hash 表; 以 Hash 表的索引值查找反向表获得页架
               如果程序过大页表过长的情况下,使用反向页表可以节约内存空间。
      块表:存放在关联高速缓冲中的页表
           包含:页号、页架号、所属进程和页面保护权限
           过程:将常用部分的页号、页架存放在块表中,在查询工程中先查快表,再查传统的页表。
      分页机制的硬件支持:主存管理单元(MMU)用于完成地址转换。
  分段存储器管理
      同简单分段增加了调段,段置换功能,
      段表中增加了若干项:标志位(存在位)、修改位、增长位(该段是否增长,虚拟页中没有)、访问统计(如使用位)、存取权限、外存地址
  虚拟段页式存储管理:
      实现过程:先分段、在分页
      逻辑地址表示:使用三维表示,V=(s,p,d) s为段号,p为页号,d为页内地址偏移。
      有段表、段页、段表寄存器,用于实现地址转换
      优点:集合了段式、页式的优点
      缺点:页内碎片比页式多。
页面置换算法:是相对于内存中的位置来说的
    页面置换:将页面纳入外存,或将页面装入页架的过程。
    最佳置换算法OPT:选择内存中“将来不被使用”或“在最远的将来才被访问”的页面置换为新页面,
                 特点:无法使用,因为无法预知将来
    先进先出置换算法FIFO:选择最早装入内存页架的页面被置换
                    实现:设置一个链表,所有页面按先后顺序排列,成为一个队列,设置一个指针指向最早的页面。
                    缺点:与实际规律不符,最先调用的一般是经常访问的,并且有可能会把正在执行的页面被置换出去
    二次机会置换算法:FIFO的改良,避免将最近经常被访问的页面被置换,
                    在链表中增加访问位,以表明该页最近是否被访问。被访问为1 未被访问为0,访问位为0才可被置换
                    当链表指针指向访问位为0的页面,将此页面置换出去,指针指向下一位
                    算法开销较大(链元素位置移动)
    时钟页面置换算法:改良二次机会的算法开销,
                    实现方式与二次置换算法基本一样,只不过将链表改为了环形链表,不再是队列
    最近最少使用置换算法LRU:选择最近一段时间最长时间未被使用的页面淘汰。“最近的过去”作为“最近的将来”
                           设置一个64位计数器,从大到小自动计数;每个页表目有一个字段保留计数器,淘汰最小计数的页表
                          缺点:性能最接近最佳置换算法,但需要计入页面使用时间的先后次序,硬件开销大,实现较困难
    最近未使用置换算法NUR:选择最近一段时间内未使用的页面淘汰
                         设置两个标志属性:访问位A、修改位M
                         A=0,M=0:最佳淘汰
                         A=0,M=1:次佳淘汰
                         A=1,M=0:次差淘汰
                         A=1,M=1:最差淘汰
抖动(Belady现象):采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象
工作集与页面分配策略:
    何时将页面调入内存:请求分页、提前分页
    分配给进程的页架数是否可变:固定分配、可变分配
    页面置换是局部还是全局:局部置换、全局置换
        局部置换:进程发生缺页时,置换的页面是本进程的页面。
        全局置换:进程发生缺页时,从主存中所有的页面中挑选页面置换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值