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

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

处理器状态(模式)

中央处理器(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中断, 时钟中断, 硬件故障

异常: 由正在执行的指令引发. 如系统调用, 页故障, 保护性异常, 断点指令, 其他程序性异常(算术溢出等)

 

中断/异常机制工作原理

中断/异常机制是现代计算机系统的核心机制之一, 硬件和软件相互配合而使计算机系统得以充分发挥能力

硬件该做什么事? —— 中断/异常响应. 捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交给特定的处理程序

软件要做什么事? —— 中断/异常处理程序. 识别中断/异常类型并完成相应的处理

 

中断响应: 发现中断、接收中断的过程由中断硬件部件完成. 处理器控制部件中设有中断寄存器.

 

举例:

  1. 打印机给CPU发出中断信号, CPU处理完当前指令后检测到中断, 判断出中断来源并向相关设备发确认信号  (硬件)
  2. CPU开始为软件处理中断做准备: 1. 处理器状态被切换到内核态 2. 在系统栈中保存被中断程序的重要上下文环境, 主要是程序计数器PC, 程序状态字PSW  (硬件)
  3. CPU根据中断码查中断向量表,获得与该中断相关的 处理程序的入口地址,并将PC设置成该地址,新的指 令周期开始时,CPU控制转移到中断处理程序   (硬件)
  4. 中断处理程序开始工作: 1. 在系统栈中保存现场信息 2. 检查I/O设备的状态信息, 操纵I/O设备或者这设备和内存之间传送数据等   (软件)
  5. 中断处理结束时,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虚拟机

 

通过函数库来访问系统调用接口, 触发用户态带内核态的转换

系统调用开销大

 

posted @ 2018-03-24 12:38  Charonnnnn  阅读(473)  评论(0)    收藏  举报