计组+OS——虚拟存储器之页式存储及分页存储真题解析

页式存储器

页式存储系统:一个程序(进程)在逻辑层面上被分为若干大小相等的“页面”,“页面”大小与“块”大小相同,这样每个页面可以离散的放入不同的主存块中。

主存和Cache分块,更多是物理层面的划分。

逻辑地址

逻辑地址(虚地址):程序员视角看到的地址
逻辑地址=逻辑页号+页内地址(页内偏移量)
or 虚地址=虚页号+页内地址
在这里插入图片描述

物理地址

物理地址(实地址):实际在主存中的地址
物理地址=主存块号+块内地址
or 实地址=实页号+页内地址
在这里插入图片描述

页表和快表

页表的作用是:逻辑块号 --> 主存块号,即记录逻辑页存放在哪一个主存块中
在这里插入图片描述
页表在主存,主存采用DRAM

快表(TLB):页表(慢表)的一些页表项副本,引入快表的目的是为了加快「逻辑地址」到「物理地址」的转换速度,可以减少一次访存。
快表采用SRAM,SRAM的读写速度比DRAM更快。快表是一种典型的“相联存储器”,可以按照内容访问

实际应用中,快表比页表小很多,很容易被存满,需要替换一个一个的表项

## 真题嗅探

【例】(2020年)某32位系统采用基于二级页表的请求分页存储管理方式,按字节编址,页目录项和页表项长度均为4字节, 虚拟地址结构如下所示。某C程序中数组 a[1024][1024] 的起始虚拟地址为 1080 0000H,数组元素占4字节,该程序运行时,其进程的页目录起始物理地址为0020 1000H,请回答下列问题。

(1) 数组元素 a[1][2] 的虚拟地址是什么?对应的页目录号和页号分别是什么?对应的页目录项的物理地址 是什么?若该目录项中存放的页框号为00301H,则 a[1][2] 所在页对应的页表项的物理地址是什么?

(2) 数组a在虚拟地址空间中所占区域是否必须连续?在物理地址空间中所占区域是否必须连续?

(3) 己知数组a按行优先方式存放,若对数组a分别按行遍历和按列遍历,则哪一种遍历方式的局部性更好?
在这里插入图片描述

【分析】页内偏移量12位
–> 页面大小=212B=4KB (1B对应1位
–> 每个页面可以存放4KB/4B=1024个数组元素(正好可以存数组的一行)

按照上图的虚拟地址结构,
分析1080 0000H可知:
后三位是页内偏移量(转换成二进制,就是12位,对应已知条件中的页内偏移量12位);
逻辑页号(即虚页号)是10800H,即a[0]行存放在页号为10800H的页面中;
那么,a[1]行存放在页号为10801H的页面中;
因此,a[1][2] 即就是a[1]行的第三个元素的起始地址,它前面有两个元素,一个数组元素占4字节,那么总共占8字节,页内偏移量就是8,于是 a[1][2] 的虚拟地址=10801 008H

对该地址 10801 008H 进行拆分, 0001000010 {\color{Cyan}0001 0000 10} 0001000010 0000000001 {\color{DarkOrange}00 0000 0001} 0000000001 0000 0000 1000
–> 页目录号为 042 H , {\color{Cyan}页目录号为042H,} 页目录号为042H 页号为 001 H , {\color{DarkOrange}页号为001H,} 页号为001H页内偏移量为008H
Tips: 这里的页目录号其实是一级页号,页号是二级页号,注意408里的这个叫法

根据题目中给出的页目录起始物理地址为0020 1000H
页目录号为042H,页目录项地址为 0020 1000H + 4*42H = 0020 1108H,如下表所示
题目中又给出该目录项中存放的页框号为00301H

页目录号页框号
000H
042H00301H

根据这个页框号,就可以找到对应的二级页表
在这里插入图片描述
那么二级页表的地址存放地址:00301 000H (即二级页表项的起始存放地址)
前面确定的二级页号是 001H,即需要在起始地址000H的基础上偏移一个页表项长度,即004H
最终得到a[1][2]所在页对应的页表项的物理地址:00301 004H

我们所说的数组元素连续存放,指的是程序员的视角,即就是在虚拟空间中所占区域是连续的,但在物理地址空间的层面来看,本题目中的每一行元素会被存在一个页面中,而不同的页面在物理地址空间可以是离散存放的,可以不连续

由于数组同一行的元素会被分配到同一个页面中,在遍历过程中,访问同一个页面的数据较快,因此按行优先遍历的局部性会更好

快表和Cache

在这里插入图片描述
【例】(2011)某计算机存储器按字节编址,虚拟地址空间大小为16MB,主存地址空间大小为1MB,页面大小为4KB;Cache采用直接映射方式,共8行;主存与Cache之间交互的块大小为32B。系统运行到某一时刻时,页表的部分内容和Cahe的部分内容分别如下的左图和右图所示,图中页框号及标记字段的内容为十六进制形式。
在这里插入图片描述

请回答:
(1)虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?

【分析】页面大小为4KB -> 4KB= 2 12 B 2^{12}B 212B,按字节编址,页内地址占12位;
虚拟地址空间大小为16MB -> 16MB= 2 24 B 2^{24}B 224B,按字节编址,虚拟地址有24位,因此虚页号占24-12=12位
主存地址空间大小为1MB -> 1MB= 2 20 B 2^{20}B 220B,按字节编址,物理地址有20位,因此页框号(物理页号)占20-12=8位

(2)使用物理地址访问Cache时,物理地址应划分为哪几个字段?要求说明每个字段的位数及在物理地址中的位置。

【分析】Cache采用直接映射方式 -> 物理地址(主存地址)应划分为三项:主存字块标记,cache块号,块内地址
主存与Cache之间交互的块大小为32B -> 块内地址占5位
Cache共8行 -> cache块号占3位
由(1)得知,主存地址共20位,20-3-5=12,因此主存字块标记占12位

主存字块标记cache块号块内地址
12位3位5位

(3)虚拟地址001C60H所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否Cache命中?说明理由

【分析】由虚拟地址001C60H的页内地址C60H,虚页号001H,根据如上左图,虚页号为1对应的页框号为04并且有效位为1,说明该页面在主存中,其页框号对应的标记为064H且有效位为1,则其对应的物理地址为04C60H=0000 0100 1100 0110 0000B,根据cache块号011得知该主存块被映射到Cache第3行,由于该行有效位为1,但对应的标记为105H,和04C不匹配,因此Cache未命中。

(4)假定为该机配置一个四路组相联的TLB,共可存放8个页表项,若其当前内容(十六进制)如下图所示,则此时虚拟地址 024BACH所在的页面是否存在主存中?说明理由
在这里插入图片描述

【分析】四路组相联的TLB,即就是TLB被分为8/4=2组,因此虚页号中 高 11 位 {\color{Orange}高11位} 11为TLB标记(000 0001 0010B=012H),低1位为组号。虚拟地址 024BACH= 00000010010 {\color{Orange}0000 0010 010} 000000100100 1011 1010 1100B,查表可知,存在组号为0、TLB标记为012H且有效位1的项,因此访问TLB命中,即虚拟地址 024BACH所在的页面存在主存中。

  • 20
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值