OrangeOS-定义速查表
OrangeOS-定义速查表
主要放置一些结构体定义,寄存器定义和中断定义等
保护模式
段式寻址过程
段描述符
描述符属性
P位:存在(Present)位。P=1表示段在内存中存在;P=0表示段在内存中不存在。
DPL :描述符特权级(Descriptor Privilege Level)。特权级可以是0、1、2或者3。数字越小特权级越大。
S位 :指明描述符是数据段/代码段描述符(S=1)还是系统段/门描述符(S=0)。
G位: 段界限粒度(Granularity)位。G=0时段界限粒度为字节;G=1时段界限粒度为4KB。
D/B位: 这一位比较复杂,分三种情况。 在可执行代码段描述符中,这一位叫做D位。D=1时,在默认情况下指令使用32位地址及32位或8位操作数;D=0时,在默认情况下使用16位地址及16位或8位操作数。 在向下扩展数据段的描述符中,这一位叫做B位。B=1时,段的上部界限为4GB;B=0时,段的上部界限为64KB。 在描述堆栈段(由ss寄存器指向的段)的描述符中,这一位叫做B位。B=1时,隐式的堆栈访问指令(如push、pop和call)使用32位堆栈指针寄存器esp;D=0时,隐式的堆栈访问指 令(如push、pop和call)使用16位堆栈指针寄存器sp。
AVL位: 保留位,可以被系统软件使用。
描述符类型
选择子结构
TI=0: GDT, TI=1:LDT
GDTR
CR0(实/保切换)
PE=0:实模式,PE=1:保护模式
保护模式下I/O
eflags
部分中英文对照
特权级
特权级分级
特权级检验
- CPL(Current Privilege Level): CPL是当前执行的程序或任务的特权级。它被存储在cs和ss的第0位和第1位上。在通常情况下,CPL等于代码所在的段的特权级。当程序转移到不同特权级的代码段时,处理器将改变CPL。 在遇到一致代码段时,情况稍稍有点特殊,一致代码段可以被相同或者更低特权级的代码访问。当处理器访问一个与CPL特权级不同的一致代码段时,CPL不会被改变。
- DPL(DescriptorPrivilege Level): DPL表示段或者门的特权级。它被存储在段描述符或者门描述符的DPL字段中,正如我们先前所看到的那样。当当前代码段试图访问一个段或者门时,DPL将会和CPL以及段或门选择子的RPL相比 较,根据段或者门类型的不同,DPL将会被区别对待,下面介绍一下各种类型的段或者门的情况。
- 数据段: DPL规定了可以访问此段的最低特权级。比如,一个数据段的DPL是1,那么只有运行在CPL为0或者1的程序才有权访问它。
- 非一致代码段(不使用调用门的情况下): DPL规定访问此段的特权级。比如,一个非一致代码段的特权级为0,那么只有CPL为0的程序才可以访问它。
- 调用门: DPL规定了当前执行的程序或任务可以访问此调用门的最低特权级(这与数据段的规则是一致的)。
- 一致代码段和通过调用门访问的非一致代码段: DPL规定了访问此段的最高特权级。比如,一个一致代码段的DPL是2,那么CPL为0和1的程序将无法访问此段。
- TSS: DPL规定了可以访问此TSS的最低特权级(这与数据段的规则是一致的)。
- RPL(RequestedPrivilege Level): RPL是通过段选择子的第0位和第1位表现出来的。处理器通过检查RPL和CPL来确认一个访问请求是否合法。即便提出访问请求的段有足够的特权级,如果RPL不够也是不行的。也就是说,如果RPL 的数字比CPL大(数字越大特权级越低),那么RPL将会起决定性作用,反之亦然。
一致/非一致代码段特权转移规则
门描述符
Param Count:参数个数,用于堆栈切换时的参数拷贝
调用门特权级规则
短调用堆栈
长调用堆栈
特权级变换堆栈转移
TSS结构
分页机制
地址转换原理
页式寻址过程
PDE
PTE
cr3
分页示例
ARDS(地址范围描述符结构)
中断和异常
中断调用过程
中断门和陷阱门
部分中断向量号定义
8259A
ICW格式
OCW1
OCW2
中断堆栈变换
FAT12
软盘结构
根目录条目(Directory Entry)
BIOS ParameterBlock(BPB)
根目录占用扇区数计算公式
或者:
FAT项
int 13h(读软盘)
磁头号、柱面号、起始扇区号计算公式
操作系统内核
ELF格式
ELF header
Program header
载入内核后的内存分布
载入内核后的寄存器分布
OrangeOS-定义速查表
http://example.com/2023/01/10/OrangeOS-定义速查表/