段页式存储系统下进程A的地址映射与表结构求解
段页式存储系统问题解答
前提参数梳理
- 页面大小:4KB = 0x1000(十六进制),页内偏移占12位
- 最大段大小:4MB = 0x400000,段内地址占22位(10位段内页号 + 12位页内偏移)
- 物理内存帧大小:与页面大小一致,帧号对应物理地址 = 帧号 × 0x1000
- 空闲帧分配顺序:从列表头部
(10,20,30,40,50,60,70,80)依次取用
1. 进程A的段表起始地址
段表存储在物理内存的一个帧中,优先分配空闲列表的第一个帧(10号帧),因此段表起始物理地址为:10 × 0x1000 = 0xA000(十六进制),或十进制40960。
2. 段表与页表构建
段表(存储在10号帧,地址0xA000)
| 段号 | 页表基址(物理地址/帧号) | 限长 |
|---|---|---|
| 0 | 0x14000(帧号20) | 3KB |
| 1 | 0x28000(帧号40) | 6KB |
页表
第一段(段0)的页表(存储在20号帧,地址0x14000):
第一段大小3KB,仅需1个页面,对应帧分配为空闲列表第3个帧(30号):页号 帧号 0 30 第二段(段1)的页表(存储在40号帧,地址0x28000):
第二段大小6KB,需2个页面,对应帧分配为空闲列表第4、5个帧(50、60号):页号 帧号 0 50 1 60
分配逻辑说明:先为段分配页表帧,再为段的页面分配数据帧;第一段加载完成后再处理第二段,严格遵循空闲帧列表的头部取用顺序。
3. 物理地址0003C000₁₆对应的虚拟地址及计算过程
步骤1:解析物理地址对应的帧号与页内偏移
物理地址0x0003C000转换为帧号:0x3C000 ÷ 0x1000 = 60,页内偏移为0x3C000 % 0x1000 = 0。
步骤2:反向查找页表与段表
- 帧号60对应第二段(段1)页表中的页号1(见第二段页表)。
- 段1的段号为1,段内页号为1,页内偏移为0。
步骤3:拼接虚拟地址
虚拟地址结构为:段号(10位) + 段内页号(10位) + 页内偏移(12位)
- 段号1(10位二进制):
0000000001 - 段内页号1(10位二进制):
0000000001 - 页内偏移0(12位二进制):
000000000000
拼接为32位二进制:00000000010000000001000000000000,转换为十六进制为0x00401000。
内容的提问来源于stack exchange,提问作者Fathy Ramadan
相关产品推荐
相关产品推荐

