关于计组中虚拟存储器的概念和计算大题(页式储存)

首先虚拟内存的引入是为了解决物理内存不足的情况,可以理解是更为灵活地使用内存,提高程序运行效率,那么话不多说,直接进入正题。

虚拟存储器

 虚拟储存器做什么的

首先,我们需要知道虚拟储存器干了一个什么事。

先要知道的是虚拟存储器的内存是远大与主存的,我们想放但是放不下的东西以为放在了主存,其实是放在了虚拟存储器中。计算机只把常用的活跃的程序段和数据存在主存中。

而其他的放在虚拟存储器中在执行指令的时候,会产生一个虚拟地址,一般叫逻辑地址,我们可以通过逻辑地址在页表中找到对应的物理地址,这个地址是可以用来访问主存的。

怎么放

从磁盘中得到的程序会被分为许多页(其实我本人更喜欢理解成块,因为更形象一些,不过只是叫法而已),并且标明页内偏移量和页号,这里还是很好理解的,这里我们还没有放入内存,还是在虚拟存储器中,我们为了定位一个指令,也必须要声明这两个东西吧。

然后将需要的页和活跃的页装入主存,那么我们就要知道它被放入了主存的哪一个页框中,因此这样我们就引入了页表,页表也就是将虚拟地址转化为逻辑地址的东西,里面存了每个页对应的页框号以及物理地址,那么我们就可以通过页表找到物理地址啦,

物理地址=页号对应的页框号*页大小+页内偏移量

怎么更快放

页表是存储在主存中的,我们每次如果都需要通过主存去转化虚拟地址和物理地址那么效率就太慢 了,因此这里就引入了快表(TLB),我喜欢把这个东西类比Cache,它存了页表中常被用的页表项,CPU寻址时会先在TLB中寻找,查不到才去内存中找,并且页表满后未命中也要通过替换算法替换出页表项

注意

页表中的存放是顺序存储,即从页号0 顺序记录到页号n,但是在主存中页表的存放是非顺序的

那我们现在来看个很经典很经典的题

bd7b1c0f6a4e4dc3ba61e412e2bdd388.png

 

第一问
0e0a801b0fd34f6ba603f950cfee9a3f.png

虚拟地址16MB=eq?2%5E%7B24%7DB => 24位

逻辑地址和物理地址页面大小相同

所以虚页大小为4KB=eq?2%5E%7B12%7DB =>页内偏移量占12位

因此虚拟地址组成如下:

24efd8be638e442a8ab6cab24b4b0bb9.png

物理地址空间大小 1MB=eq?2%5E%7B20%7DB  => 20位

页面大小同样为eq?2%5E%7B12%7DB

所以物理地址组成为:

04295369068e4a79b575f815fb9dbf30.png

高八位为页框号

 

第二问 

73927154f3fe464a9cc9e64bd840394f.png

Cache采用直接映射

块大小32B=eq?2%5E%7B5%7DB  所以块内偏移为5位

eq?2%5E3行  所以块号位3位

根据主存大小得到一共20位

因此访问Cache时的物理地址构成为:

cfe7385164ac4244bc37454db71aa853.png

 

第三问 

8aff5bbaa54341b3a0c41f9e5717ab93.png

虚拟地址:00160H

化为二进制:0000 0000 0001 1100 0110 0000

根据虚拟地址的划分:

1a91df0e4fb349ff92e79d4d7ffde612.png

高12位为页号,此处页号为1,在表中查找虚页号1,有效位为1且对应页框号4,因此在主存中

将虚拟地址转化为物理地址,首先我们看物理地址组成:

cde37ca06e6d4568ab04d79297f03f7c.png

因为虚拟地址和物理地址页内偏移都相同,因此将虚拟地址的高12为换位8位页框号就行了,对应物理地址04C60H

 

访问Cache时,找到中间对应的3位行号,行号为3,在表中查找行号为3时对应标记为105,该地址中标记位为高12位,明显不为105,因此Cache未命中

 

第四问

a6984e7f80bd43829e78bf2a5e2b5c7d.png

四路相联TLB,有八个页表项

那么就有 8/4=2个组,占用1位

 

虚拟地址024BACH

化为二进制:0000 0010 0100 1011 1010 1100

这里我们回顾一下,一个页是4KB=eq?2%5E%7B12%7DB

那么低12位就是页内偏移量

组号占1位

那么标记位为剩下11位

607c384683fa468ca7d99253ba0a07d2.png

标记位=(012)H,且在第一组

那么查表找到第一组,在第一组有标记为012的页,那么该虚拟地址所在页在主存中

 

​​​​​​​

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值