下表是某页式内存分配的情况,
页面大小为 0x1000B,有效位为 1 表示该页在内存。系统将逻辑地址 0x088B、0x01F3C、0x2220、0x0356F、0x441C 转换为物理地址时,会产生几次缺页中断
页号 | 页框号 | 有效位 |
0 | 08000000 | 1 |
1 | -------- | 0 |
2 | 08005000 | 1 |
3 | -------- | 0 |
4 | FF003000 | 1 |
1 个
2 个
3 个
4 个
答案
2 个
解析
为了将给定的逻辑地址转换为物理地址,并判断是否会产生缺页中断,我们首先需要了解页面大小和页面编址方式。页面大小为 0x1000B 似乎是一个错误,因为页面大小通常是2的幂次方(如4KB、8KB等),但这里的 B 可能是一个误写,我们假设页面大小实际上是 0x1000(即4KB)。
逻辑地址到物理地址的转换过程通常涉及以下步骤:
确定页号(Page Number, PN):页号 = 逻辑地址 / 页面大小(注意这里的除法是整数除法)。
查找页表以确定该页是否在内存中(即检查有效位)。
如果页在内存中(有效位为1),则计算物理地址 = 页框号 * 页面大小 + 页内偏移(Page Offset, PO)。页内偏移 = 逻辑地址 % 页面大小。
如果页不在内存中(有效位为0),则产生缺页中断。
现在,我们根据给定的逻辑地址和页表来执行这些步骤:
逻辑地址 0x088B:
页号 = 0x088B / 0x1000 = 0(整数除法)
页内偏移 = 0x088B % 0x1000 = 0x088B
页号0在内存中(有效位为1),物理地址 = 0x08000000 * 4KB + 0x088B
不产生缺页中断。
逻辑地址 0x01F3C:
页号 = 0x01F3C / 0x1000 = 1
页内偏移 = 0x01F3C % 0x1000 = 0x0F3C
页号1不在内存中(有效位为0),将产生缺页中断。
逻辑地址 0x2220:
页号 = 0x2220 / 0x1000 = 2
页内偏移 = 0x2220 % 0x1000 = 0x0220
页号2在内存中(有效位为1),物理地址 = 0x08005000 * 4KB + 0x0220
不产生缺页中断。
逻辑地址 0x0356F:
页号 = 0x0356F / 0x1000 = 3
页内偏移 = 0x0356F % 0x1000 = 0x156F
页号3不在内存中(有效位为0),将产生缺页中断。
逻辑地址 0x441C:
页号 = 0x441C / 0x1000 = 4
页内偏移 = 0x441C % 0x1000 = 0x041C
页号4在内存中(有效位为1),物理地址 = 0xFF003000 * 4KB + 0x041C
不产生缺页中断。
综上所述,对于给定的逻辑地址集合,将产生 2次 缺页中断(针对逻辑地址 0x01F3C 和 0x0356F)。