一、题目
设某进程的段表如下所示,逻辑地址( )可以转换为对应的物理地址。
A. (0,1597)、(1,30)和(3,1390)
B. (0,128)、(1,30)和(3,1390)
C. (0,1597)、(2,98)和(3,1390)
D. (0,128)、(2,98)和(4,1066)
二、解读
========== 生活化例子 ==========
假设你有一栋很大的楼房,这栋楼房有很多层,每一层都是不同的大小。每层楼都有一个起始房间号(相当于基地址),而每层楼的房间数量不同(相当于段长)。现在,你的朋友告诉你他在第几层楼的第几个房间,你需要找到他确切的房间号。
- 楼层编号(段号)告诉你朋友在哪一层。
- 房间号是相对于这一层的起始房间号的距离(相当于逻辑地址)。
- 你需要找到的房间号是“这一层的起始房间号 + 朋友告诉你的房间号”,这个就是实际的物理房间号。
========== 概念讲解 ==========
段页式存储管理中,逻辑地址转换为物理地址时,需要通过段表找到对应段的基地址,再加上逻辑地址中的段内偏移量,计算出最终的物理地址。
题目中的段表给出了各个段的基地址和段长:
- 段 0:基地址 1598,段长 600
- 段 1:基地址 486,段长 50
- 段 2:基地址 90,段长 100
- 段 3:基地址 1327,段长 2988
- 段 4:基地址 1952,段长 960
我们要做的就是将每个逻辑地址转换为物理地址。每个逻辑地址由两个部分组成:
- 段号:表示是第几段。
- 段内偏移量:表示在这个段中第几个字节。
转换步骤:
- 找到逻辑地址对应的段号,从段表中找到该段的基地址和段长。
- 检查段内偏移量是否超出段长。如果超出,表示地址非法。
- 如果偏移量合法,则物理地址 = 段基地址 + 段内偏移量。
下面我们依次计算选项中的逻辑地址对应的物理地址:
-
A. (0, 1597):段号 0,偏移量 1597。段 0 的段长为 600,偏移量超过段长,非法。
-
B.
- (0, 128):段号 0,基地址 1598,段长 600。物理地址 = 1598 + 128 = 1726。
- (1, 30):段号 1,基地址 486,段长 50。物理地址 = 486 + 30 = 516。
- (3, 1390):段号 3,基地址 1327,段长 2988。物理地址 = 1327 + 1390 = 2717。
-
C. (0, 1597):段号 0,偏移量 1597。段 0 的段长为 600,偏移量超过段长,非法。
-
D.
- (0, 128):段号 0,基地址 1598,段长 600。物理地址 = 1598 + 128 = 1726。
- (2, 98):段号 2,基地址 90,段长 100。物理地址 = 90 + 98 = 188。
- (4, 1066):段号 4,偏移量 1066。段 4 的段长为 960,偏移量超过段长,非法。
所以,B 选项的所有逻辑地址转换后的物理地址都是合法的。
========== 简单记法 ==========
- 基地址 + 段内偏移 = 物理地址。
- 先看偏移量是否超出段长,如果超出,逻辑地址非法。