前言
- 为什么要知道CPU的段页门
- 如何控制CPU由实模式进入保护模式
- CPU是如何找到数据并读写的?CPU是如何找到代码并执行的?
整体流程:
以
mov eax, [0x100]
为例,其将0x100内存
中得数据复制到eax
寄存器当中。
需要了解的知识点:
-
内存地址中逻辑地址、线性地址和物理地址之间的联系
- 逻辑地址:看到的所有的内存地址;
- 线性地址:线性地址 = 段基址 + 逻辑地址
没有启用分页机制的情况下,线性地址与物理地址相同
开启后线性地址 -> MMU -> 物理地址; - 物理地址:物理内存的地址 ;
-
运行模式
从开机到达64位长模式(Long Mode)
,需要经过实模式(Real Mode)
、保护模式(Protected Mode)
,以及在某些情况下的兼容模式(Compatibility Mode)
。- 实时模式(16位):1MB的内存地址空间,并且没有硬件级别的内存保护,20根地址总线,但是寄存器是16位的;
- 保护模式(32位):内存的访问(高达4GB),硬件级别的内存保护,以及多任务功能。
- 兼容模式(32位):用于支持旧的32位操作系统和应用程序,它在64位处理器上允许运行未修改的32位代码。
- 64位长模式 (64位):允许访问远大于4GB的物理和虚拟内存。
-
虚拟内存
- 兼容模式和长模式一定要开虚拟内存;
- 保护模式可以开可以不开。
1、为什么要知道CPU的段页门
- 什么是段,就是你经常听到的:代码段、数据段
- 什么是页,就是你经常听到的:虚拟内存,又叫CPU分页机制
- 什么是门,与你经常听到的用户态切内核态有关
- 四种门:中断门、调用门、任务门、陷进门
- 快速调用:sysenter/sysexit、syscall/sysret
- 想让CPU由实模式进入包含模式,必须构建段
2、如何控制CPU由实模式进入保护模式
- 配置GDT表,至少包含一个代码段一个数据段
- 开A20总线
- 设置控制寄存器CR0
- 设置段寄存器
3、CPU是如何找到数据并读写的?CPU是如何找到代码并执行的?
以
mov eax, [0x100]
为例,其将0x100内存
中得数据复制到eax
寄存器当中。