第2章:中断、异常和系统调用
标签(空格分隔): 操作系统
2.1 操作系统的启动
启动
- DISK:存放OS
- BIOS:基本I/O处理系统
- 将BootLoader从磁盘的引导扇区(512字节)加载到0x7cDD,跳转到CS:IP = 0000:7cDD
- BootLoader:加载OS
- 将操作系统的代码和数据从硬盘加载到内存中,跳转到OS的起始地址
- CS:IP = 0xf000:fff0 (CS:段寄存器, IP:指令寄存器)
- POST(加电自检):寻找显卡和执行BIOS
OS与设备和程序交互
- Interface 系统调用、异常、中断
defs
- 系统调用(来源于应用程序)
- 应用程序主动向操作系统发出服务请求
- 异常(来源于应用程序)
- 非法指令或其他坏的处理状态(如内存出错)
- 中断(来源于外设)
- 来自不同的硬件设备的计时器和网络的中断
- 系统调用(来源于应用程序)
区别和特点
类型 | 源头 | 处理时间 | 响应 |
---|---|---|---|
中断 | 外设 | 异步 | 持续,对用户应用程序是透明的 |
异常 | 应用程序意想不到的行为 | 同步 | 杀死或重新执行意想不到的应用程序指令 |
系统调用 | 应用程序请求提供服务 | 同步或异步 | 等待和持续 |
2.2 OS的中断、异常和系统调用
(一)中断
硬件
- 设置中断标记(CPU初始化)
- 将内部、外部事件设置中断标记
- 中断事件的ID
软件(OS)
- 保存当前处理状态
- 中断服务程序处理
- 清除中断标记
- 恢复之前保存的状态
(二)异常:异常编号
- 保存现场
- 异常处理
- 杀死产生了异常的程序
- 重新执行异常指令
- 恢复现场
(三)系统调用
- 程序访问主要是通过高层次的API接口而不是直接进行系统调用
跨越操作系统边界的开销
- 在执行时间上的开销超过程序调用
- 开销:
- 建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销
- 建立内核堆栈
- 验证参数
- 内核态映射到用户态的地址空间,更新页面映射权限
- 内核态独立地址空间,TLB