二. 操作系统运行环境与运行机制
操作系统运行环境与运行机制

处理器状态(模式)
中央处理器(CPU): 由运算器、控制器、一系列的寄存器以及高速缓存构成.
两类寄存器: 用户可见寄存器: 高级语言编译器通过优化算法分配并使用之,以减少程序访问内存次数
控制和状态寄存器: 用于控制处理器的操作通常由操作系统代码使用, 在某种特权级别下可以访问,修改.
常见的控制和状态寄存器:
程序计数器(PC: ProgramCounter),记录将要取出的指令的地址
指令寄存器(IR: InstructionRegister),记录最近取出的指令
程序状态字(PSW :Program Status Word),记录处理器的运行状态如条件码、模式、控制位等信息
操作系统可以共享,并发, 所以需要实现保护, 保护用户程序与用户程序间互不干扰, 保护用户程序不对操作系统干扰.
处理器具有特权级别, 能在不用的特权级别运行不同指令集合
处理器的状态(模式MODE)
现代处理器通常将CPU状态设计划分为两种、三 种或四种
在程序状态字寄存器PSW中专门设置一位,根据运行程序对资源和指令的使用权限而设置不同的CPU状态
特权指令和非特权指令
操作系统需要两种CPU状态
内核态(Kernel Mode): 运行操作系统程序
用户态(User Mode): 运行用户程序
特权(privilege)指令: 只能由操作系统使用, 用户程序不能使用的指令(如启动I/O, 内存清零, 修改程序状态字, 设置时钟, 允许/禁止中断, 停机…)
非特权指令: 用户程序可以使用的指令(如控制转移, 算术运算, 访管指令…)
例: X86支持4个处理器特权级别: R0,R1,R2,R3 特权能力从高到低.
R0相当于内核态, R3相当于用户态, 不同级别能够运行的指令集合不同
CPU状态之间的转换
用户态 -> 内核态: 系统调用(唯一途径)
内核态 -> 用户态: 设置程序状态字PSW
(访管指令: 提供给用户程序的接口, 用于调用操作系统的服务(用户态->内核态))
中断/异常机制
操作系统是由”中断驱动”或者”事件驱动”的
主要作用:
- 及时处理设备发来的中断请求
- 可使OS捕获用户程序提出的服务请求
- 防止用户程序执行过程中的破坏性活动
- …
中断/异常的概念:
CPU对系统发生的某个事件作出的一种反应
CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点, 继续执行被打断的程序
特点:
• 是随机发生的 • 是自动处理的 • 是可恢复的
中断的引入: 为了支持CPU和设备之间的并行操作
当CPU启动设备进行输入/输出后,设备便可以独立工作, CPU转去处理与此次输入/输出不相关的事情;当设备完成 输入/输出后,通过向CPU发中断报告此次输入/输出的结 果,让CPU决定如何处理以后的事情
异常的引入: 表示CPU执行指令时本身出现的问题
如算术溢出、除零、取数时的奇偶错,访存地址时越界或执行了“陷入指令” 等,这时硬件改变了CPU当前的执行流程,转到相应的错误处理程序或异常处理程序或执行系统调用
中断例子: 看书 -> 电话响(请求中断) -> 书签() -> 处理电话 -> 接着看书
异常例子: 看书 -> 口渴 -> 书签 -> 喝水(异常处理) ->接着看书
中断: 外部事件, 正在运行的程序所不期望的. 如I/O中断, 时钟中断, 硬件故障
异常: 由正在执行的指令引发. 如系统调用, 页故障, 保护性异常, 断点指令, 其他程序性异常(算术溢出等)

中断/异常机制工作原理
中断/异常机制是现代计算机系统的核心机制之一, 硬件和软件相互配合而使计算机系统得以充分发挥能力
硬件该做什么事? —— 中断/异常响应. 捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交给特定的处理程序
软件要做什么事? —— 中断/异常处理程序. 识别中断/异常类型并完成相应的处理
中断响应: 发现中断、接收中断的过程由中断硬件部件完成. 处理器控制部件中设有中断寄存器.




举例:
- 打印机给CPU发出中断信号, CPU处理完当前指令后检测到中断, 判断出中断来源并向相关设备发确认信号 (硬件)
- CPU开始为软件处理中断做准备: 1. 处理器状态被切换到内核态 2. 在系统栈中保存被中断程序的重要上下文环境, 主要是程序计数器PC, 程序状态字PSW (硬件)
- CPU根据中断码查中断向量表,获得与该中断相关的 处理程序的入口地址,并将PC设置成该地址,新的指 令周期开始时,CPU控制转移到中断处理程序 (硬件)
- 中断处理程序开始工作: 1. 在系统栈中保存现场信息 2. 检查I/O设备的状态信息, 操纵I/O设备或者这设备和内存之间传送数据等 (软件)
- 中断处理结束时,CPU检测到中断返回指令,从系统 栈中恢复被中断程序的上下文环境 ,CPU状态恢复成 原来的状态,PSW和PC恢复成中断前的值,CPU开始 一个新的指令周期 (硬件)
系统调用(system call)
系统调用: 用户在编程时可以调用的操作系统功能. (如进程控制、进程通信、
文件使用、目录操作、设备管理、信息维护等)
作用: 是操作系统提供给编程人员的唯一接口, 使CPU状态从用户态陷入内核态.



清华版:
操作系统与设备和程序交互
中断(来源于外设) – 来自不用的硬件设备的计时器和网络的中断
异常(来源于不良的应用程序) – 非法指令或者其他坏的处理状态(如内存出错)
系统调用(来源于应用程序) – 应用程序主动向操作系统发出服务请求
应用程序不能直接访问外设: 内核是被信任的第三方, 只有内核可以执行特权指令, 内核去处理底层繁杂的操作为了方便应用程序
产生源头:
中断: 外设,
异常: 应用陈旭意想不到的行为
系统调用: 应用程序请求操作提供服务
处理时间:
中断: 异步(不知道什么时候会产生)
异常: 同步
系统调用: 异步或同步(发出请求是同步, 返回的过程是异步)
响应:
中断: 持续, 对用户应用程序时透明的(操作系统悄悄的完成)
异常: 杀死或者重新执行
系统调用: 等待和持续
中断/异常的处理过程:
中断:
硬件:
设置中断标记, 1.将内部,外部事件设置中断标记 2. 中断事件的ID
软件:
保存当前处理状态, 中断服务程序处理, 清除中断标记, 恢复之前保存的处理状态
异常: 异常编号
保存现场
异常处理, 两种情况: 1.杀死产生异常的城西 2.重新执行异常指令
恢复现场
系统调用的处理过程:
程序访问主要是通过高层次的API接口而不是直接进行系统调用
Win32 API 用于windows
POSIX API 用于unix, linux, mac os
JAVA API 用于java虚拟机
通过函数库来访问系统调用接口, 触发用户态带内核态的转换
系统调用开销大

浙公网安备 33010602011771号