跳到正文

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+offset0≤offset<size;页表只改变该页放在哪个物理框。页大小为2的幂时,硬件直接用低位作偏移、高位作页号。

单次地址转换时间抽象为 O(1),页表空间与虚拟页数成正比;TLB 缓存近期页表项,命中可省主存页表访问。

连续分配会产生外部碎片;分页消除外部碎片但最后一页可能有内部碎片;分段按逻辑模块变长,便于保护共享却仍可能外部碎片。

典型错误:1 KiB 是1024字节不是1000;物理地址不能写成“frame+offset”;页表项无效时不是随便找块,而是触发异常;多级页表减少未使用页表空间,不减少地址位数。

迁移答案:若逻辑地址16位、页大小1 KiB,低10位为偏移、高6位页号,共64个虚拟页。

下一课在页表项无效但地址合法时触发缺页,并用 LRU 决定淘汰哪个驻留页。

小纸条

学完《3.1.3_1 基本分页存储管理的基本概念》后,请独立复现本课的核心状态变化或计算过程。

登录 后可看答案

Practice

本课练习

0

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

本课练习正在补齐,暂不应标记为完成。