2018操作系统期中考试

版权声明:本博客为个人维护博客,内容均来自原创及互连网转载。最终目的为收集整理自己需要的文章技术等内容,不涉及商业用途。原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。 https://blog.csdn.net/MarshaZheng/article/details/84645796

参考了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

猜你喜欢

转载自blog.csdn.net/MarshaZheng/article/details/84645796
今日推荐