虚拟存储器
写在前面:虚拟存储器(Virtual Memory)是计算机系统中用于管理内存的一种技术,它通过虚拟地址空间为进程提供比物理内存更大的地址空间,同时实现内存保护和进程隔离。
在408整个体系中计组和操作系统都有涉及,但是我希望同学们在学习这部分知识的时候,一定要在学习操作系统的时候去学习,至少你要先搞清楚基本分页存储管理的思想,否则你是没办法深入理解虚拟存储器的,不理解原理就更不要谈做对题目了,我希望大家不要考记忆、熟练度去做题,而需要真正的尝试去理解它,掌握本质,才能以不变应万变。这也是我做这个“大观”视频的初衷。
基本分页存储管理
虚拟存储器的核心就是通过地址转换机制,将程序使用的虚拟地址映射到实际的物理内存地址,我们需要先理解基本分页存储管理的思想(这一块是操作系统内存管理的内容,是虚拟存储器的一种实现方式)。这里请和Cache与主存交换数据的方式类比学习,因为思想都是一样的,没有搞明白的Cache的原理的一定要去看一下我的Cache“大观”那个视频,我这里默认大家已经掌握了Cache的思想。那么我们进入正题。
引入:当一个程序被装入内存的时候不是把它整块装入一个连续的区域,那么是怎么分配的呢?先来基本原理涉及的概念,不懂原理不要做题!!这也是为什么我给基础概念三颗星的原因。
重要概念⭐⭐⭐
1)重要概念理解
-
物理页面:物理内存划分为很多大小固定的存储块(类比Cache块)
-
逻辑页面:把逻辑页面划分为大小相同的快,和物理页面是一样大的!!(因此我们才能以页面为单位来分配。我们再来回顾一下Cache,Cache块和主存块的大小也是一样大的)
-
页与块:这里大家初学肯定会有这个疑惑,我们教材书一会说页,一会说块,到底怎么分辨?
- Cache块是Cache与主存之间交换信息的单位,大小一般为32B
- 页是主存与外存之间交换信息的单位,大小一般为4KB,也就是一个页包含了多个块!!
-
逻辑地址的划分:请务必记住,逻辑地址被划分为两部分,高位部分为页号,低位部分为页内地址(这是我们做题的逻辑基点,同样的我们又要和Cache联系起来学习,还记得Cache映射的主存地址是怎么划分的吗?是不是也是把高位划分为主存块号,低位为块内地址!!)
-
页表(在主存内):每一个进程都有一个页表,我们把页表理解成一个大的数组,它的本质就是进行逻辑页号和物理页号之间的映射(一个逻辑页号对应一个物理页号),也就是我们把逻辑地址转成物理地址的必要工具(后面会详细讲解映射方法),请看王道教材的这个图:
可以看出页表就是记录了逻辑页(虚页)和物理页之前的转换,从而可以定位到主存的页,没别的了!
地址映射(⭐⭐)
1)定义:所谓映射就是把虚拟地址映射成物理地址,分为以下步骤
-
给出一个逻辑地址,我们先通过上述逻辑地址划分方式,找到逻辑页面号与页内的偏移地址
-
我们拿到了逻辑页面号,就去查页表找到它的物理号(也有的教材叫页框号)
-
根据物理号与偏移地址拼起来,就得到了最终我们需要的物理地址
怎么拼?如图所示,就是把页号写前面,页内地址(偏移量)写在后面,很简单!!
这就是计算题的方法,理解了上面我说的,那么这类题目对于你来说就是洒洒水了。
2)具有快表(TLB)的变换
我们想一下,我们之前只有页表的时候,是不是必须要去访存,因为页表在内存里,那么我们是否可以扩展一下思路,把页表的内容存储在一个更快更牛逼的存储器里,因此我们的快表就应运而生了。
CPU就在Cache里去设置了一个高速存储器来存储页表的部分内容,TLB采用相联存储器组成,按照内容访问,速度极快!!(为什么是部分不是全部?毕竟他很快,那么他就要牺牲一些东西,也就变小了一些!)
有了TLB,我们就可以避免一次访存,而优先去快表中找到物理页号,从而大大减少了我们的访存时间、提高我们取出数据的效率!!
有了上面的知识,我们就能引出虚拟页式存储管理到底是个啥了!!!
虚拟页式存储管理
1)核心概念:虚拟页式存储管理就是在页式管理的基础上,增加了请求调页等一些功能!!这里大家就能明白了,为什么我要先将本应该在操作系统里学的知识了吧,没有页式存储管理的知识,你根本没法搞明白什么是虚拟存储管理!
2)核心操作:在程序运行过程中,如果我们CPU发出的指令想要访问的数据不在内存里面,我们就发出一个缺页中断请求,系统就把外存中的相应页面给调进入到内存,这就是请求调页!
3)有同学可能会问为什么会发生缺页?因为逻辑地址是远大于物理内存地址的(不然我们也没必要引出虚拟存储器了),那么带来的结果必然就是只能把部分常用的页面装入内存,而不能全部装进去,那就会出现缺页的场景了。
4)MMU:我们在做题的时候可能会碰到MMU这个概念,它的中文名叫做内存管理单元,是一个硬件!**它的主要功能就是把虚拟地址映射出物理地址。**如果页面不在内存里,MMU就发出一个缺页中断,让操作系统去处理这个缺页中断。至于一些太过于细节性的概念,比如页表项去判断页面是否在内存那些东西,就需要同学们自己去看一下基础课了,我的目的就是带大家串联知识,达到一个深入理解的效果,而这个目标是建立在你有基础的前提上的,还有对于Cache有问题的同学一定要去我主页看一下那个视频。
总结一下:CPU发出一个虚拟地址,首先由MMU进行虚拟地址到物理地址的转换(这期间可能会涉及缺页处理),然后再由处理Cache的硬件根据这个物理地址去访问(物理地址和Cache的映射),如果Cache中没有找到,就要进行Cache缺失的处理,然后去访存拿到数据。请看下图:
这张图就是总结了我上面所讲的所有东西了,好好理解清楚它,那么你对于带有虚拟存储器和Cache的系统就已经很透彻了,之后就是通过习题的训练来加深自己的理解。
题目讲解
视频跳转:【计组|虚拟存储器】带你狠狠拿捏虚拟存储器,不再害怕408大题!