HUST OS 7.4 Intel CPU 与 Linux 内存管理【自学笔记】

7.4 Intel CPU与Linux内存管理

7.4.1 Intel CPU物理结构
7.4.2 Intel CPU段机制
7.4.3 Linux页面机制
7.4.4 Linux对段的支持
7.4.1 Intel CPU物理结构

x86的实模式(Real Mode)

保护模式(Project Mode)

  • x86 CPU架构下的3种地址:
    逻辑地址:汇编语言(段:偏移)

线性地址:由逻辑地址转换得到

物理地址:真实的地址

7.4.2 Intel CPU段机制

段:一段连续内存 数据段/代码段
实模式下用基址来表示段;
保护模式下用段描述符(8字节)来表示段;

  • 描述符(Descriptor)
    段基址:32位(段基址1+段基址2)
    段界限:20位(段界限1+段界限2)

  • 描述符表(Descriptor Table)
    全局描述符表GDT:Global Descriptor Table
    包含所有进程可用的段的描述符.系统仅有一个GDT

局部描述符表LDT:Local Descriptor Table
包含与特定进程有关的描述符,每个进程有自己的LDT

中断描述符表IDT:Interrupt Descriptor Table
包含中断服务程序段的描述符(中断们表)
类似中断向量表

  • 选择子(Selector)
    选择子用于选择GDT/LDT中的某个描述符
    存放在段寄存器中:高13位是整数索引

构成:
索引域:13位,给出段描述符在GDT或LDT中的位置
TI域:1位.GDT(0)或LDT(1)
特权级别域:2位

7.4.3 Linux页面机制
  • 分页
    Intel CPU的页:4KB
    通过设置CR0的PG位开启分页功能
    分页:线性地址—>物理地址
    在MMU中进行分页

Linux 采用三级页表结构

页目录:每个记录存放的是小页表的编号和其所在的页框号之间的对应关系.

页目录:一级页表或外部页表;
小页表:二级页表

7.4.4 Linux对段的支持

进程建立时,段机制对寄存器的初始化:start_thread()

Linux四个范围一样的段:0~0xFFFFFFFF(4G)
内核数据段|内核代码段|用户数据段|用户代码段
各段属性不同
内核段特权级为0
用户段特权级为3
作用
利用段机制隔离用户数据和系统数据
保留段的等级保护机制
简化(避免)逻辑地址到线性地址的转换
可以直接将虚拟地址当做线性地址,两者完全一致.

你可能感兴趣的:(Linux,OS)