Linux memory management ■i386保护模式的分段与分页 Linux分页 ■线性地址空间分布 ■用户地址空间 ■内核地址空间 ■空闲物理内存管理 ■内核物理内存分配接口 共享存储
Linux memory management ◼ i386保护模式的分段与分页 ◼ Linux分页 ◼ 线性地址空间分布 ◼ 用户地址空间 ◼ 内核地址空间 ◼ 空闲物理内存管理 ◼ 内核物理内存分配接口 ◼ 共享存储
Intel x86保护模式的地址映射 逻辑地址 段选择子16bits 段内偏移32bits GDT、LDT 线性地址 页目录索引10bits页表索引10bits页内偏移12bits pgd、pte 物理地址 物理地址32bits
Intel x86保护模式的地址映射 段选择子16bits 段内偏移32bits 页内偏移12bits 物理地址32bits 页目录索引10bits 页表索引10bits 逻辑地址 线性地址 物理地址 GDT、LDT pgd、pte
Intel x86的分段 段选择子 描述符索引13 bits GDt/ LDT 1bit访间特权级2bits 段描述符8 bytes 段基地址32bts段界限20bits 段内偏移32bits GDT 线性地址32bits
…… Intel x86的分段 描述符索引13bits GDT/LDT 1bit 段选择子 访问特权级 2bits 段内偏移32bits 段基地址32bits 段描述符8bytes + 线性地址32bits 段界限20bits GDT
Linux在i386上的分页 线性地址 页目录索引10bits页表索引10bis页内偏移12bits 页帧首地址 pg d 20bits<< PAGE SHIFT pte pmd t*k dir 物理地址32bits #define PMd shift 22 #define PtRs per Pmd #define pmd index(address)((address)>>PMD SHIFT)& (PTRS PER PMD-1)
…… …… Linux在i386上的分页 线性地址 物理地址32bits pmd_t * dir + 页帧首地址 20bits << PAGE_SHIFT 页目录索引10bits 页表索引10bits 页内偏移12bits #define PMD_SHIFT 22 #define PTRS_PER_PMD 1 #define pmd_index(address) (((address) >>PMD_SHIFT) & (PTRS_PER_PMD-1)) pgd pte
页目录表项和页表项 用户态/核心 已写标表示是否启 态访问位 志位 用高速缓存 存在位 页面表或页框的物 OS专用 理地址 PSE D PCDJPWT U/S 有录表项和剪表项的格 页大小,4K(0)或 读写位 4M(1),只适用于页访问位表示是否采 目录表项 用写透方式
存在位 读写位 用户态/核心 态访问位 表示是否采 用写透方式 表示是否启 用高速缓存 访问位 已写标 志位 页大小,4K(0)或 4M(1),只适用于页 目录表项 页目录表项和页表项