内核基础
Linux背景基本概念
- GUN计划
旨在开发一个类似UNIX并且是自由软件的完整操作系统:GNU系统。
GNU项目开发的自由软件:- EMACS编辑系统
- Bash程序
- GCC系列编译程序
- GDB调试工具
- ……
- POSIX标准
该标准描述了操作系统的调用服务接口,用于保证应用程序的源代码在多种操作系统上移植和运行。
微型计算机组成结构
- 微机组成原理
- I/O端口寻址方式
- 统一编址
- 独立编址
- I/O端口控制方式
- 轮询
- 中断
- DMA
- BIOS和CMOS
- BIOS存在BIOS ROM芯片中,用于初始化硬件,设置CMOS参数,从块设备加载boot loader(MBR和boot sector中)到内存0x7c00地址,并跳转执行。
- CMOS存储器用来存放实时时钟信息和系统硬件配置信息,这些信息有BIOS设置。
- 控制器和适配器
控制器:能够通过操作寄存器来控制设备的控制模块
适配器:设备接口的转换模块- 中断控制器
- DMA控制器
- 定时/计数器
- 键盘控制器
- 串行控制器
- 硬盘控制器
内核编程语言和环境
- as86汇编器
- ld86链接器
- 汇编语法
- C和汇编相互调用
- 目标文件格式
80x86保护模式及编程
- 80x86系统寄存器
- 标志寄存器EFLAGS
- TF:位8,跟踪标志,可为调试操作启动单步执行方式
- IOPL:位12、13,I/O特权级字段,指明当前运行任务的I/O特权级
- NT:位14,嵌套任务标志,控制被中断任务和调用任务之间的链接关系
- RF:位16,恢复标志,控制处理器对断点指令的相应
- VM:位17,虚拟8086方式标志,开启虚拟8086方式
- 内存管理寄存器
- GDTR:全局描述符表寄存器,存放GDT的32位线性基地址和16位的表长度值
- IDTR:中断描述符表寄存器,存放IDT的32位线性基地址和16位表长度值
- LDTR:局部描述符表寄存器,存放LDT的32位线性基地址、16位段限长和描述符属性值
- TR:任务寄存器,存放当前任务TSS段的16位段选择符、32位基地址、16位段长度和描述符属性值
- 控制寄存器
- CR0:协处理器控制位,保护控制位
- CR1:保留
- CR2:存放页错误线性地址
- CR3:存放页目录表基地址
- 标志寄存器EFLAGS
- 分段机制
利用多段模型提供由硬件增强的代码、数据结构、程序和任务的保护措施。每个程序都使用自己的段描述符表以及自己的段。每个段由段描述符(段基地址、段长度、段属性)定义。- 段描述符表:段描述符的一个数组
- 段描述符:段基地址+段长度+段属性
- 段选择符:段的16位标识符
- 段选择符、段描述符、段描述符表关系图
- 分页机制
将内存分为大小相等的4K页面,方便内存管理- 二级页表结构图及页描述符格式
- 二级页表结构图及页描述符格式
- 中断和异常处理
- 任务管理
一个任务由两部分构成:任务执行空间和TSS。任务执行空间包括代码段、堆栈段、和一个或多个数据段,TSS指定了构成任务执行空间的各个段,并为任务状态信息提供存储空间。当一个任务被加载进处理器中执行时,该任务的段选择符、基地址、段限长以及TSS段描述符属性就会被加载进任务寄存器TR寄存器中。