Skip to content

3 内存布局

通用名词

  • IR: 指令寄存器
  • PC: 程序计数器
  • PCB: 进程控制块,存储进程状态(阻塞),PID,计数器等

指令

  • jmpi 100, CS: CS = 0 | 跳转到第 0 段起始位置 + 100 的位置

程序分段 Segment

  • LDT : Local Descriptor Table 局部段表,存储每个段的编号,起始,大小,权限

分页 Page

  • 一个段可由若干逻辑页组成
  • PT: 页表,将逻辑页映射到物理帧
  • 帧则是物理分块,和页分块大小一致

多级页表

  • 首先考虑物理 4GB 内存被分为 1M 个大小为 4KB 的帧
  • 每个进程使用一些帧,用一个 Page 结构体存储:
// 以下为猜测
struct Page: 32bit {
    valid: ?,
    frame_id: 20bit
    offset: 12bit  // 20 + 12 刚好表示一个 byte 地址
    sign: R/W
}
each process has page: Page[1M] (stupid design)
  • 开了一兆结构体,浪费 4M 内存,这些结构体需要 1024 页存储
  • 故引入 1024 个 -1 级页条目,表示第 i 页是否使用,若使用则地址在哪里,省无用空间