操作系统—内存管理习题解答


前言

本次将拿考研的经典题目作为解答的例子。

一、第一小题如下:

某计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4B,请回答下列问题
(1)若使用一级页表的分页存储管理方式,逻辑地址结构为

页号(20位)页内偏移量(12位)

问:页的大小是多少字节?页表最大占用多少字节?

  • 首先我们拿到这个题不要慌张,先看规定好了的条件:
    – 逻辑地址和物理地址都是32位
    – 页表项大小为4B(这里要区分一下页的大小和页表项大小,这二者就好形容一个长方形,页的大小是长方形的长,页表项大小是长方形的宽)
    在这里插入图片描述

  • 之后看问题所问的是“页的大小?”
    – 页的大小是由页内偏移量的位数来决定的
    – 所以很容易得出:页的大小 = 212B(也就是4KB)

  • 再然后看第二个问题“页表最大占用多少字节”
    – 在解决这个问题之前,我们要知道的是页表的表项数目是由页号的位数来决定的。
    – 还有一个需要理解的点就是这个问题本身是要干什么,“页表最大占用多少字节”,这个问题中他问的是整个页表的最大占用字节,所以你要想题目中给出了一个表项的“宽度”(页表项的大小),我们现在就只剩下表项个数不知道,所以接下来的任务就是求表项个数(这就好比你在求一个由许许多多小长方形组成的长方形的边长,他给出了每个长方形的值,那么现在就只需要求出有多少个长方形就可以了)
    – 表项的数目 = 220个,那么页表最大占用的字节数为 = 表项数目*页表项的大小 = 220 ×4B

  • 那么我们现在总结一下这一小题所考核的知识点:

  • 页的大小和页表项的大小二者的概念

  • 页的大小是由页内偏移量的位数决定

  • 表项的数目使用页号的位数决定的

二、这一题的第二问如下:

采用(1)中的分页存储管理方式,一个代码段的起始逻辑地址为0000 8000H, 其长度为8KB被装载到从物理地址0090 0000H开始的连续主存空间中。页表从主存 0020 0000H 开始的物理地址处连续存放,如下图所示(地址大小自下向上递增)。请计算处该代码段对应的两个页表项的物理地址,这两个页表项中的页框号,以及代码页面2的起始物理地址
在这里插入图片描述

  • 首先这个小题,我们先一点一点的看
    – 第一句话就点明了,这一小问的所有逻辑地址和物理地址都是32位的
    – 一段代码的初始逻辑地址已经给出了,不过是16进制的形式,这时我们先将16进制形式的逻辑地址转换为二进制形式
    0000 8000H
    0000 0000 0000 0000 1000 0000 0000 0000根据第1小问的逻辑地址格式可以推出,在改逻辑地址的低12位是页内偏移量(我标记为倾斜),剩下的20位全为页号,即为 0000 0000 0000 1000也就是十进制的8,所以该代码块的初始地址对应页表中的第8页号。
    – 另外改代码块为8KB,一个页的大小为4KB,所以该程序代码应该占用两页,再看图中给的两个页表项是在一起的,那么该代码块所占用的是页表中的第8和第9页号
    – 看后面这句话“装载到从物理地址0090 0000H开始的连续主存空间中”,所以代码初始的物理地址就是0090 0000H,将该16进制物理地址转换为二进制:
    0090 0000H
    0000 0000 1001 0000 0000 0000 0000物理地址的偏移量和逻辑地址中的页内偏移量是相同的,也就是物理地址的低12位是偏移量(清华大学陈瑜老师是这么说的页帧偏移量,我也不知道该叫啥),除了偏移量占的12位,剩下的20位就是内存块号(页帧号或者页框号),那么页框号1也就是00900H
    – 题目中还给出了页表的起始地址0020 0000H
  • 到目前为止,我们已经一起把题目中的条件分析完毕,接下来我们该解决疑问了
    – 首先要求两个页框号对应的物理地址:
    有的同学可能已经开始疑惑了,这个题目中给的页表形式跟我们书本上的不一样啊,有的书本上的页表是页号和页框号一 一对应的,其实不然,页号是为了让我们人看着方便,其实要找到对应页框号还是需要将页表对应的物理地址求出来(这里的物理地址只是单纯的页表的地址)。
    这个疑惑解决之后,我们正式来看怎么求物理地址:
    在看题目分析时我们得出:代码块的起始页号是8,那么每个表项的大小为4B,所以页框号1对应的物理地址应该为:物理地址1 = 0020 0000H + 8×4B = 0020 0000H + 32(这里说明一下,要将十进制的32转换为16进制的0000 0020H)=0020 0020H,所以物理地址1是0020 00020H
    物理地址2 = 0020 0000H + 9×4B(这里的9就是该段代码占的第二页的页号)= 0020 0000H+36 = 0020 0000H + 0000 0024H = 0020 0024H
    – 之后问两个页框号是多少,我们首先要知道要根据什么来求页框号,页框号是在物理地址中的,我们需要将两个页框号对应的物理地址求出来,其中页框号1对应的物理地址已经求出来了,那我先拿这个地址做个示范:
    代码页面1对应的物理地址:0090 0000H。在上面的分析时,我提到了物理地址的低12位是偏移量,除去这12位剩下就是页框号,所以页框号也就是00900H
    而代码页面2的物理地址我们还不知道,所以暂时先把页框号2放下,先去求对应的物理地址
    – 求代码页面2的物理地址:
    我们现在知道了代码的起始地址为0090 0000H,而代码分为两个代码页面,每一个代码页面的大小为4KB,也就是一个代码页面的宽度大小是4KB,所以第二个代码页面的物理地址也就是:起始地址 + 第一个代码页面的宽度 = 0090 0000H + 4KB ,这时候重点来了,我们先将4KB转变为212,也就是4096,再将其转换为16进制1000H,所以物理地址 = 0090 0000H + 0000 1000H =0090 1000H
    – 现在我们有了代码页面2的物理地址,再按照上面的算法,除去12位的偏移量,得到的页框号2为00901H
  • 至此,该问的所有问题已解答完毕
  • 对应两个页表的物理地址为:0020 0020H 0020 0024H
  • 两个表项的页框号:00900H 00901H
  • 代码页面2的物理地址为: 0090 1000H

  • 30
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值