虚拟存储器

目录

1.为什么引入虚存的概念?

2.物理和虚拟寻址

 3.地址空间

4.虚拟存储器作为缓存的工具

 5.虚拟存储器作为存储管理的工具

6.虚拟存储器作为存储器保护的工具

7.地址翻译

 

 




1.为什么引入虚存的概念?

  • 一个系统中的进程与其他进程共享CPU和主存资源,存储器更加难以管理。
  • 虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件、内核软件的完美交互
  • 为每个进程提供一个大、一致的私有地址空间。

能力:

  • 高效使用主存:将主存看成存储在磁盘上的地址空间的高速缓存,主存中只保持活动区域,根据需要在主存&&磁盘间来回传送数据。
  • 简化存储器管理:为每个进程提供一致的私有地址空间。
  • 保护每个进程的地址空间不被其他进程破坏。

2.物理和虚拟寻址

物理寻址:主存被组织成一个M个连续的,字节大小的单元,组成的数组。每个字节一个物理地址。CPU生成一个物理地址->送到存储器。

虚拟寻址:CPU生成一个虚拟地址(VA)->转换为适当的物理地址->送到存储器。

地址翻译

  • CPU硬件和操作系统的密切配合
  • CPU芯片上的存储管理单元的专用硬件,利用主存中的查询表动态翻译虚拟地址(表的内容操作系统管理)

 3.地址空间

  • 一个非负整数地址的有序集合(如果是连续:线性地址空间)
  • n位地址空间:N=2^{n}
  •  物理地址空间:M不要求是2的幂次
  • 主存中的每个字节都有一个选自虚拟地址空间的地址,和一个选自物理地址空间的地址。

4.虚拟存储器作为缓存的工具

  • 磁盘上的数据被分割成块,作为磁盘和主存之间的传输单元。
  • 分割成块:虚拟存储器->虚拟页,物理存储器->物理页(页帧)都是P=2^{p}字节
  • 虚拟页面的集合分为(不相交子集):

        ①未分配的:VM系统还未分配(或创建)的页,没有任何数据关联,不占磁盘空间

        ②缓存的:当前缓存在物理存储器的已分配页

        ③未缓存的:没有缓存在物理存储器的已分配页

①DRAM缓存的组织结构:

  • 虚拟存储器系统的缓存,在主存中缓存虚拟页
  • DRAM缓存的不命中比SRAM缓存的不命中昂贵,由磁盘服务
  • 虚拟页比较大(4KB~2MB)
  • DRAM缓存全相联,替换算法更复杂
  • 使用写回

直写式 WT,Write Through 与 回写式 WB,Write Back 指的是缓冲内存的工作方式 直写式缓存方式是 当 CPU 要将数据写入内存时除了更新缓冲内存上的数据外也将数据写在 DRAM中以维持主存与缓冲内存的一致性 当要写入内存的数据一多 速度自然就慢了下来

回写式的缓存方式是 每当 CPU 要将数据写入内存时 只会先更新缓冲内存上的数据 随后再让缓冲内存在总线不塞车的时候才把数据写回 DRAM 所以速度自然快得多

②页表

  • 虚拟页在DRAM中吗?在哪个物理页?
  • PTE页表项:虚拟地址空间中每个页都在页表中对应一个条目:1有效位+n地址段(假设)

下图:VP0、VP5未分配,VP3、VP6分配未被缓存,其他被缓存

 

③页命中

 如上图,假如读VP2中的虚拟存储器中一个字节,通过虚拟地址->找到页表项PTE2->有效位=1->物理地址get√

④缺页

引用VP3中一个字->找到PTE3->有效位=0->触发一个缺页异常

->调用内核缺页处理程序->选择牺牲页VP4:

  • VP4已被修改:内核将VP4拷贝回磁盘
  • VP4未被修改:不拷贝

->内核从磁盘拷贝VP3到PTE3,返回->重新启动导致缺页的指令->页命中

⑤交换/页面调度

  • 在磁盘和存储器中传送页的活动
  • 从磁盘换入DRAM,从DRAM换出磁盘
  • 按需页面调度:一直等待,当有不命中时才换入页面

⑥分配页面

操作系统分配一个新的虚拟存储器页时,例如,调用malloc->在磁盘上创建空间->更新PTE5,指向磁盘上的页面

⑦局部性

  • 保证了在任意时刻,程序往往在一个较小的活动页面集合工作(工作集、常驻集)。
  • 工作集的大小大于物理存储器的大小:颠簸,页面不断换进换出

unix的getrusage检测缺页数量


 5.虚拟存储器作为存储管理的工具

 操作系统为每个进程提供一个独立的页表:多个虚拟页面可以映射到同一个物理页面

简化链接:

  • 独立的私有地址空间,每个进程的存储器映像使用相同的基本格式。总是0x80480000/0x400000开始。
  • 链接器可生成全链接的可执行文件,独立于物理存储器中代码和数据的最终位置的。

简化加载:

  • 容易向存储器中加载可执行目标文件,和共享对象文件
  • Linux加载器,分配虚拟页的一个连续的片chunk),从0x08048000/0x400000开始虚拟页标记为无效,页表条目指向目标文件中适当位置。
  • 加载器不实际从磁盘拷贝数据到存储器,引用时按需调入。

简化共享

  • 独立地址空间,为操作系统提供管理用户进程,和操作系统自身间共享的一致机制。
  • 私有数据、代码、堆、栈,操作系统新建页表,映射到不同物理页面。
  • 共享的(内核代码,库程序),操作系统将不同进程中适当的虚拟页面映射到相同的物理页面。

简化存储器分配

  • 虚拟存储器向用户进程,提供了一个简单的分配额外存储器的机制。
  • 如malloc,操作系统分配k个连续的虚存页面,映射到物理存储器中任意位置的k个物理页面。

6.虚拟存储器作为存储器保护的工具

为操作系统提供手段控制对存储器系统的访问

  • 不应该修改只读文本段
  • 不允许读写其他进程的私有存储器
  • 不允许修改共享页面除非其他所有共享者显式地允许它做
  • 不允许读或修改内核的代码和数据结构

SUP:是否必须运行在内核模式下(超级用户)才能访问该页

READ:可读

WRITE:可写

违反:一般保护故障->内核异常处理程序->Unix报告段错误

7.地址翻译

一个 元素的虚拟地址空间 (VAS) 中的元素和一个 元素的物理地址空间 (PAS) 中元素之间的映射

 

 

 A.翻译过程

页面命中时:完全由硬件处理

①处理器生成一个虚拟地址->传送给MMU

②MMU生成PTE地址,从高速缓存/主存请求得到

③高速缓存/主存向MMU返回PTE

④MMU构造物理地址,传送给高速缓存/主存

⑤高速缓存/主存返回数据给处理器

缺页时:硬件和操作系统内核协作

④PTE有效位=0,MMU触发异常,CPU控制到操作系统内核缺页处理程序

⑤缺页处理程序确定牺牲页,若该页已经被修改则换出到磁盘

⑥缺页处理程序调入新的页面,更新存储器中PTE

⑦缺页处理程序返回原来进程,再次执行导致缺页的指令,CPU将引起缺页的虚拟地址重新发送给MMU,命中

 B.TLB加速地址翻译

  • TLB(翻译后备缓冲器):在MMU中包括的一个关于PTE的小缓存
  • 这样所有的翻译步骤都在MMU中进行,非常快

TLB命中和不命中时:

TLB命中: 

①CPU产生虚拟地址

②③MMU从TLB中取出对应的PTE

④MMU将虚拟地址翻译成物理地址,发送给高速缓存/主存

⑤高速缓存/主存发送所请求的数据给CPU

TLB不命中:

MMU从L1缓存中取出相应的PTE ,放在TLB中,可能覆盖一个已存在的条目

C.多级页表

如果我们有一个 32 位的地址空间、 4KB 的页面和一个 字节的 PTE, 那么即使应用所引用的只是虚拟地址空间中很小的一部分,也总是需要一个 4MB 的页表驻留在存储器中。(4GB/4KB )*4B=4MB

如何压缩页表?

分层次

减少存储器需求

①如果一级页表中的一个PTE是空的,那么相应的二级页表不会存在(典型的程序虚拟地址的4GB空间大部分未分配的)

②只有一级页表需要总是在主存中,虚拟存储器系统可以在需要时创建、页面调入/调出二级页表,减少主存压力,只有经常使用的二级页表才需要缓存在主存中

第 k级页表中的每个 PTE 包含某个物理页面的 PPN 或一个磁盘 块的地址。为了构造物理地址,在能够确定 PPN 之前, MMU 必须访问 k个PTE 。对于只有一级的页表结构, PPO 和VPO 是相同的。

 

 

 

 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hnu哈哈

请接受直女的么么哒????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值