操作系统运行机制
CPU:运算器,控制器,寄存器,高速缓存
两类寄存器:
控制和状态寄存器(重要):
程序寄存器PC----记录将要取出指令的地址
指令寄存器IR-----记录最近取出的指令
程序状态字PSW----记录处理器的运行状态
需求
保护:并发,共享
两种cpu状态:
内核态:运行操作系统程序
用户态:运行用户程序
特权指令:只能由操作系统使用,用户不能用
非特权指令:用户可用
特权:
启动I/O,内存清零,修改程序状态字,设置时钟,允许/禁止中断停机
非特权:
控制转移,算数运算,访管指令,取数指令
X86支持的4个处理器特权级别
特权环---R0,R1,R2,R3
R0--内核态
R3--用户态
R1-R1---两者之间
CPU状态之间转换:
用户态-->内核态
唯一途径:中断/异常/陷入机制(访管指令:提供给用户程序接口,用于调用操作系统的功能--- 一条特殊指令)
内核态--->用户态
设置状态字PSW
中断/异常机制:
操作系统是由中断驱动或事件驱动的
中断的引入:为了支持CPU和设备之间的并行操作
异常的引入:表示CPU执行指令时自身出现的问题
中断与异常小结
硬件做什么事:中断/异常响应
捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交给特定的处理程序
软件做什么事: 中断/异常处理程序
识别中断/异常类型并完成相应的处理
中断响应过程示意
中断向量表:
中断向量---1个内存单元,存放中断处理程序入口地址和程序运行时所需的处理机状态字
中断处理程序:
系统运行时若响应中断,中断硬件部件将CPU控制权转给中端处理程序:
1,保存相关寄存器信息
2,分析中断/异常的具体原因
3,执行对应的处理功能
4,恢复现场,返回被事件打断的程序
X86对中断的支持:
中断控制权(PIC或APIC)
负责将硬件的中断信号转换为中断向量,并引发cpu中断
实模式:中断向量表
存放中断服务程序的入口地址
保护模式:中断描述符表
采用门(gate)描述符数据结构表示中断向量
系统调用机制的设计
1,中断/异常机制---支持系统调用服务的实现
2,选择一条特殊指令:陷入指令(访管指令)---引发异常,从用户态到内核态
3,系统调用号和参数---每个系统调用都是先给定一个编号
4,系统调用表--存放系统调用服务例程的入口地址
注释:第二种
系统调用的执行过程:
当CPU执行到特殊的陷入指令时:
1,中断/异常机制:硬件保护现场;通过查中断向量表把控制权转给系统调用总入口程序
2,系统调用总入口程序:保存现场;将参数保存在内核堆栈里;通过查系统调用表把控制权转给相应的系统调用处理例程或内核函数
3,执行系统调用例程
4,恢复现场,返回用户程序
中断发生后os底层工作步骤:
1,硬件压栈:程序计数器等
2,硬件从中断向量表装入新的程序计数器等 //硬件
3,汇编语言过程保存寄存器值
4,汇编语言过程设置新的堆栈
5,C语言中断服务程序运行 //软件
6,进程调度程序决定下一个将运行的进程
7,C语言过程返回至汇编代码
8,汇编语言过程开始运行新的当前进程