Published on

操作系统内存寻址

Authors
  • avatar
    Name
    Mao
    Twitter

CPU工作的两种模式:实时模式与保护模式

逻辑地址(logical address),虚拟地址(virtual address),线性地址(linear address),物理地址(physical address)。

实时模式内存访问方式:

物理地址 = 段基址<<4 + 段内偏移

线性地址与物理地址对应关系:

if 未启用内存分页 {
    物理地址 == 线性地址
} else {
    物理地址 = 分页管理函数(线性地址)
}

逻辑地址与线性地址对应关系:

内存表达式 = segment:offset

if 实时模式(real mode) {
    线性地址 = segment<<4 + offset
    线性地址 == 物理地址
} else {  //保护模式(protected model)
    gdt/ldt-item = GDT/LDT(segment)  //保护模式下segment为 GTD/LDT 表的索引,通过 segment 找到 GTD/LTD 表项
    segment-base = gdt/ldt-item >> 32 //GTD/LTD 表项长度为8字节,结构为: Base/32bit(段的基地址), Limit/20bit(段的大小), Flags/12bit(段的访问权限)
    线性地址 = segment-base + offset
}

Reference

MIT 6.828 JOS学习笔记6. Appendix 1: 实模式(real mode)与保护模式(protected mode)

DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器