2018操作系统期中考试

参考了https://zhanghuimeng.github.io/post/os-mooc-2018-midterm-summary/

针对最后一题再做一次详细分析。

3.4 2017年图灵奖得主John L. Hennessy和David A. Patterson提出了RISC-V架构的32位小端序CPU设计,它有34位地址总线,使用32位页式存储管理。该计算机的页面大小为4KiB,一个页表大小为4KiB,其中每一个页表项(Page Table Entry,PTE)大小为4B,虚拟地址、物理地址和PTE的结构如下图所示。
图一
如上图所示,一个虚拟地址由虚拟页号(Virtual Page Number,VPN)和页内偏移组成,物理地址由物理页号(Physical Page Number,PPN)和页内偏移组成,PTE由PPN和一些控制位组成,其中R/W/X三个域分别表示对应页的读/写/执行权限,它们的不同组合可以表示不同的属性,如下表所示:
图二
内存中的页表项
请回答下列问题:

  1. 32-bit的RISC-V架构CPU使用34位物理地址而不是32位物理地址,这样做的好处是什么?
  2. 设页目录基址为0x90000000,部分物理内存的内容如下图所示,试给出虚拟地址0x3A69A4D2和0x3A8EB00C所对应的物理地址和它们所在页的类型。请写出计算过程。

答:

  1. 34位物理地址可以寻址16GB内存空间。

  2. 虚拟地址0x3A69A4D2–>0011101001 1010011010 010011010010
    VPN[1]=0011101001(E9),VPN[0]=1010011010(29A),offset=010011010010(4D2)

    虚拟地址0x3A8EB00C–>0011101010 0011101011 000000001100
    VPN[1]=0011101010(EA),VPN[0]=0011101011(EB),offset=000000001100(00C)

    首先根据页目录索引找到对应页目录项。

    页目录基地址为0x90000000,而一个页表项4B,也就是将VPN[1]左移两位再与基地址相加(VPN[1]相当于告诉我们目录项是从基地址开始的第几个项目),故对应页目录项地址分别为0x90000000*E9=0x9000003A4;0x90000000+4*EA=0x900003A8;

    都在内存的这一行:
    在这里插入图片描述

    0x9000003A4 开始取32位,也就是4字节,分别是01 00 00 28,因为是小端序,数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,故实际PTE为28 00 00 01;
    同理,另一个PTE为3E B0 00 0F;

    28000001–>PPN[1] 001010000000 PPN[0] 0000000000 控制位 0000000001

    控制位X/W/R为000,说明这个PTE指向二级页表:
    二级页表的物理地址(34位)由PPN[1]PPN[0]还有VPN[0](VPN[0}同样需要左移两位)构成: 00 1010 0000 0000 0000 0000 1010 0110 1000= 0x 0A0000A68
    在这一行:在这里插入图片描述
    对应PTE:37 AB 6C 09 -> PPN[1] 001101111010 PPN[0] 1011011011 控制位 0000001001

    可以看到控制位X/W/R为100,说明这个PTE指向一个可执行的页。
    物理地址=PPN[1]001101111010 PPN[0] 1011011011offset 010011010010 = 0011011110101011011011010011010010=0xDEADB4D2

    对于第二个虚拟地址所对应的页目录项3E B0 00 0F:
    3E B0 00 0F–> PPN[1] 001111101011 PPN[0] 0000000000 控制位0000001111
    001111101011 0000 0000 00 00 0000 1111
    控制位X/W/R为111,发现是一个可读可写可执行的页,并不指向二级页表,那么虚拟地址中的VPN[0]和page offset共同构成offset接在PPN[1]后面:

    物理地址=PPN[1] 001111101011 VPN[0] 0011101011 offset 000000001100 = 0011111010110011101011000000001100=0xFACEB00C

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值