3.1.3_1 基本分页存储管理的基本概念
约 32 分钟
逻辑地址2500落在哪一页
上一课资源向量通过表转换状态。今天页大小1 KiB,逻辑地址2500,页表把页2映射到物理块7。任务是拆页号、页内偏移并算物理地址。
def translate(logical,page_size,page_table):
page,offset=divmod(logical,page_size)
if page not in page_table: raise MemoryError("缺页或越界")
frame=page_table[page]
return page,offset,frame*page_size+offset
assert translate(2500,1024,{0:5,1:3,2:7}) == (2,452,7620)
assert translate(1024,1024,{1:9}) == (1,0,9216)
2500=2×1024+452,因此页号2、偏移452;查页表得块7,物理地址 7×1024+452=7620。偏移原样保留,因为页与页框大小相同;只替换高位页号。
为什么正确:逻辑空间被等长页划分,任何地址唯一写成 page×size+offset 且 0≤offset<size;页表只改变该页放在哪个物理框。页大小为2的幂时,硬件直接用低位作偏移、高位作页号。
单次地址转换时间抽象为 O(1),页表空间与虚拟页数成正比;TLB 缓存近期页表项,命中可省主存页表访问。
连续分配会产生外部碎片;分页消除外部碎片但最后一页可能有内部碎片;分段按逻辑模块变长,便于保护共享却仍可能外部碎片。
典型错误:1 KiB 是1024字节不是1000;物理地址不能写成“frame+offset”;页表项无效时不是随便找块,而是触发异常;多级页表减少未使用页表空间,不减少地址位数。
迁移答案:若逻辑地址16位、页大小1 KiB,低10位为偏移、高6位页号,共64个虚拟页。
下一课在页表项无效但地址合法时触发缺页,并用 LRU 决定淘汰哪个驻留页。
小纸条
学完《3.1.3_1 基本分页存储管理的基本概念》后,请独立复现本课的核心状态变化或计算过程。
登录 后可看答案
Practice
本课练习
先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。
本课练习正在补齐,暂不应标记为完成。