RSIC-V 虚拟存储器技术

1.概述

在早期的操作系统中,程序规模小,以致于物理内存可以容纳程序。但随着应用程序的规模越来越大,现有的物理内存已经无法容纳这样规模的程序了。为了解决这个难题,虚拟存储器技术应运而生。其基本原理是程序的规模可以超过实际的物理内存,操作系统首先将程序内容的一小部分存储在物理内存中,将剩余的大部分内容放在下一级存储器,如磁盘等,后续根据需要交换物理内存与磁盘的内容,从而实现超过实际物理内存的程序正常运行。

虚拟存储器的大小由处理器的位数决定,32位的处理器对应4GB的虚拟存储空间,64位的处理器对应2^{24}TB的虚拟存储空间。

未使用虚拟存储器技术前,CPU访问物理内存流程如下图所示,

使用了虚拟存储器技术,CPU访问物理内存流程如下图所示,

使用虚拟存储器技术,每个程序可以独占整个地址空间,当多个应用程序同时运行时,操作系统动态地将物理内存分配给各个程序,并将其虚拟地址转换为物理地址,从而确保各个程序的正常运行。除此之外,虚拟存储器技术还可以实现对程序的保护和程序间的共享。

2.基于分页的虚拟存储器技术

简单来说,虚拟地址空间以页(page)为单位划分,通常页的大小为4KB,物理地址空间以帧(frame)为单位划分,帧的大小必须与页的大小相等,也为4KB。

下面是一个示例,假如处理器为16位,虚拟地址空间大小为64KB,每个页大小为4KB,被分为16个页,即VPN(virtual page number)等于16。假如物理内存大小为32KB,每个帧大小为4KB,被分为8个帧,即PFN(physical frame number)等于8。现有一个大小大于32KB的程序,当程序执行时,不能一次性将程序全部放入到物理内存中,所以需要下一级存储器可以存放程序。

将虚拟地址翻译为物理地址的功能模块被称为内存管理单元(Memory Manage Unit, MMU)。

Load R4, 1[R3];  

当执行以上指令时,取数据的虚拟地址为R3+1=1(假设R3=0),该地址属于page0,page0被映射到frame2,翻译后的物理地址为8192+1=8193。

Load R4, 1[R3];  

当执行以上指令时,取数据的虚拟地址为R3+1=32769(假设R3=32768),该地址属于page8,page8未被映射到物理内存地址空间,而是存放在磁盘中。此时MMU会产生一个Page Fault异常发给处理器,处理器需要转到处理Page Fault的异常处理程序并处理异常(该异常处理程序为操作系统代码),它需要从物理内存中找到当前很少使用的frame。假如frame2被选中,需要先将frame0与page0的映射关系解除,此时page0被标记为未映射状态,然后把page8的内容从磁盘中搬移到物理内存frame0,并将page8映射到frame0。如果被替换的frame0是脏(dirty)的,那么需要先将frame0的内容搬移到磁盘。处理完后,就可以从Page Fault的异常处理程序中返回,返回到产生该异常的load指令,并重新执行load指令。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值