ULK之一内存寻址之分段

2021-11-13  本文已影响0人  1哥

1.背景

有了前面主存的分段的设计原理的背景知识,对于这里提到的分段和分页会更好理解。
X86处理器有三种不同内存地址:

X86 地址转换

image.png

MMU(内存管理单元)

2.分段的实现

image.png
分段概念

分段的实现

分段在80x86的实现

字段 位数 用途
index 13 bit 段选择
TI 1bit GDT or LDT 指示器
RPL 2bit 特权级别选择
image.png

3.分段在Linux 中的实现

3.1 段结构

3.2 GDT

DEFINE_PER_CPU(struct desc_struct, cpu_gdt_table[GDT_ENTRIES]);
EXPORT_PER_CPU_SYMBOL(cpu_gdt_table);

void __init cpu_init (void)
{
        //省略部分代码
       memcpy(&per_cpu(cpu_gdt_table, cpu), cpu_gdt_table,
              GDT_SIZE);
       cpu_gdt_descr[cpu].size = GDT_SIZE - 1;
       cpu_gdt_descr[cpu].address =
           (unsigned long)&per_cpu(cpu_gdt_table, cpu);
        //省略部分代码
}
上一篇下一篇

猜你喜欢

热点阅读