虚拟存储器

虚拟存储器

一.虚拟存储器概述

1.引入原因

  • 高速的主存容量满足不了要求

在这里插入图片描述

虚拟存储器:在操作系统及辅助硬件的管理下,由主存和大容量外存所构成的一个单一的,可直接访问的超大容量的主存储器。

2.虚拟存储器的概念(虚拟存储体系)

主存储器与大容量磁盘存储器构成虚拟存储系统

虚拟存储器工作时,操作系统管理的地址转换硬件检测程序欲访问的虚存地址所在的程序或数据页(或段)是否在主存中,若已在主存中(即命中),则将虚拟地址转换为主存地址,CPU根据主存地址从主存(或Cache-主存)读取程序或读/写数据;若未在主存中(即失效),则将虚存地址转换为外存地址,由操作系统控制把当前要执行的程序或使用的数据从外存调入到快速主存中,大量暂时不用的部分仍放在慢速廉价的外存中。如果主存中没有空闲区域,则选择最近不常用的程序或数据作为替换对象,且将修改的数据送回外存。因为程序和数据在主存与外存的调入,调出由硬件与操作系统共同完成,所以,对于设计存储管理软件的程序员来说是不透明的,对于应用程序员来说是透明的(而Cache的控制完全由硬件实现,对各类程序员都透明)。每个程序员的编程空间均为完整的虚存空间(远远大于主存实际空间),用户程序运行在标准化的虚拟地址空间中,且该存储空间无存储实体,故称“虚拟”存储器。

在这里插入图片描述

二.页式虚拟存储器☀️

页式虚拟存储器采用分页请求系统:它允许用户程序只装入少数页面的程序及数据即可启动运行,以后再通过调页功能及页面置换功能陆续地把即将运行的页面调入内存,同时把暂时不用的页面换出到外存上,置换时以页面为单位。

页式虚拟存储器的硬件支持:

  • 请求分页的页表机制
  • 缺页中断机构
  • 地址变换机构

1.虚页和实页

  • 虚页:在虚拟存储体系中,虚拟地址空间被分成许多固定大小的页,称为虚页或逻辑页。
  • 实页:主存地址空间也被分成若干同样大小的页(与虚页大小相同),称为实页或物理页。

2.虚拟地址和主存地址

  • 虚存地址(逻辑地址或虚拟地址)
虚页号页内地址
  • 主存地址(物理地址或实地址)
实页号页内地址

3.地址变换⭐

  • 管理页式虚拟存储器时,要完成虚拟地址到物理地址的变换,该变换是基于全相联地址映射并通过页表来实现的。

  • 在页表中每一条记录都包含虚页号所对应的实页号

  • 页表通常设置在主存中,表的起始地址通过页表基址寄存器来设定

  • 在页式虚拟存储器地址变换中,当程序给出虚拟地址后,CPU以虚页号为偏移地址查页表,从而获得相应的实页号。

  • 实页号与虚拟地址的页内地址连接到一起,便构成了主存的物理地址。

4.关于页表⭐

  • 页表中,记录项数由虚页数决
  • 每一行记录里必须有几个控制位,包括:装入位(有效位),修改位,替换控制位等。
  • 当页表未发现所要访问的页(未命中)时,则需按某种替换或更新算法将要访问的页由外存装入主存。
  • 页表一般是比较大的,例如虚存空间1TB,页的大小为64kb,则页表应为16M字,且每字应为一个记录(包含实页号和控制位)

在这里插入图片描述
5.快表与慢表
为了提高速度,可借鉴Cache的思路,将页表中最活跃的部分放在Cache存储器中,构成快表,对快表的查找及管理全部使用硬件来实现。快表一般很小,它仅是主存中页表(慢表)的一小部分。只有在快表找不到要访问的页面时,才去访问慢表,以达到快的目的。

6.缺页中断机构
在请求分页系统中,每当所要访问的页面不存在时,便产生一缺页中断,请求OS将所缺页面调入内存。
缺页中断与一般中断的不同表现在:

  • 1)在指令执行期间产生和处理中断信号:通常CPU在执行完一条指令后才去检查是否有中断请求到达,然而缺页中断是在指令执行期间,若发现要访问的指令或数据不在内存时,便立即产生和处理缺页中断信号,以便能及时将所缺页面调入内存。
  • 2)一条指令在执行期间可能产生多次缺页中断:如下图所示,指令本身跨越两个页面,指令中的操作数又各自跨越了两个页面,所以若从指令起始就开始缺页,则指令执行过程中一共产生6次缺页中断
    在这里插入图片描述

7.页面的调入过程

  • 当程序所要访问的页面未在内存时(存在位为0)便向CPU发出一缺页中断
  • 中断程序首先保存CPU环境,分析中断原因后转入缺页中断处理程序
  • 处理程序通过查找页表得到该页在外存的物理块后,
    • 如果此时内存能容纳新页,则启动磁盘IO将所缺页面调入内存,然后修改页表。
    • 如果此时内存已满,则需先按照某种页面置换算法,从内存中选出一页准备换出
      • 如果该页未被修改过(修改位为0)可不必将该页写回磁盘
      • 如果该页已被修改(修改位为1)则必须将它写回磁盘
      • 然后再把所缺的页面调入内存
    • 修改页表中的相应项,置其存在位为1,并将该页表项写入快表
  • 在缺页调入内存后,利用修改后的页表形成所要访问数据的物理地址,再去访问内存数据

8.页式虚拟存储器的优缺点

优点:

  • (1)主存利用率高。由于页表容量小,每一用户程序最多造成不到一页的浪费。
  • (2)页表的内容比较简单
  • (3)地址映射与地址变换速度比较快

缺点:

  • (1)程序的模块性差。页大小固定,无法与程序模块保持一致
  • (2)页表很长。

例题分析

1.某计算机主存按字节编址,虚拟(逻辑)地址空间大小为256MB,主存(物理)地址空间为16MB,页
面大小为4KB。
虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示实页号?

分析:

  • 页内大小为4KB,则需要12位页内偏移地址
  • 虚页数=256MB/4KB= 2 16 2^{16} 216页,则需要16位来表示虚页号
  • 实页数=16MB/4KB= 2 12 2^{12} 212页,则需要12位来表示实页号
  • 综上所述:虚拟地址应为:16+12=28位,前16位表示虚页号;物理地址应为:12+12=24位,前12位表示实页号

2.某页式虚拟存储器共256K页,每页4KB。主存容量1MB,按字节编址。试问:主存分多少页?主存页表有多大?描述虚实地址的变换过程。

分析:

  • 主存实页数:1MB/4KB= 2 8 2^8 28页=256页
  • 页表大小:虚页数 × \times ×每条记录大小(字)=256K字

地址变换过程:

  • 1.给出要访问的虚拟地址:虚页号+页内地址
  • 2.以页表基地址为首地址,虚页号为偏移地址,定位出页表中虚页号对应的记录
  • 3.通过该记录获得虚页号对应的实页号
  • 4.将实页号与原页内地址一起构成目标物理地址

三.段式与段页式虚拟存储器

1.段式虚拟存储器

  • 段式虚拟存储器中,将完成某种独立功能的程序模块定义为一段
  • 进行管理时,应为每一段程序规定一个段号,确定每段长度并在主存中建立段表
  • 段表中,每一行由段号,段起始地址,装入位,段长,属性等构成,每一行对应一个段
  • 段式虚拟存储器的地址映射基于全相联地址映射,与页式虚拟存储器类似
  • 地址变换中,以虚拟地址所确定的段号为偏移地址查段表,若发现该段已装入主存,则直接将段表中的段起始地址与虚拟地址中的段内地址相加,得到物理地址。

在这里插入图片描述

优点:(1)很适合模块化程序设计(2)便于程序和数据共享(3)便于信息保护
缺点:(1)各段长度不一,分配地址空间麻烦(2)段与段间空隙较大,降低主存利用率

2.段页式虚拟存储器

  • 段页式虚拟存储器结合了段式与页式虚拟存储器的优点
  • 段页式虚拟存储器将程序首先分段,然后将每段分成大小相同的若干页。
  • 对于段来说,要用段表来管理所有段;每一段也有自己的页表,用于存放本段中每一页对应的实页号(不一定连续)
  • 进行地址变换时,首先根据虚拟地址段号查段表,查出要访问的本段页表的起始地址,由此地址及虚拟地址中的页号再查本段页表,从中查出该页对应的实页号,最后将实页号与虚拟地址的页内地址拼接获得物理地址。
  • 11
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值