一:CPU
处理器由
运算器:ALU 逻辑运算单元
控制器:PC IR
寄存器
高速缓存构成
两类寄存器:
用户可见寄存器 :高级语言编译器通过优化算法分配并使用之,以减少程序访问内存次数
数据寄存器(data register ) 又称通用寄存器主要用于各种算术逻辑指令和访存指令
地址寄存器(address register ) 用于存储数据及指令的物理地址、线性地址或者有效地址,用于某种特定方式的寻址。如index register 、segment pointer 、stack pointer
条件码寄存器 :保存CPU 操作结果的各种标记位
如算术运算产生的溢出、符号等等
控制和状态寄存器 :用于控制处理器的操作
程序计数器(PC :Program Counter ) ,记录将要取出的指令的地址
指令寄存器(IR :Instruction Register ) ,包含最近取出的指令
程序状态字(PSW :Program Status Word ) ,记录处理器的运行状态
如条件码、模式、控制位等
处理器的状态(模式MODE)
• 现代处理器通常将CPU 状态设计划分为两种、三种或四种在程序状态字寄存器PSW 中专门设置一位,根据运行程序对资源和指令的使用权限而设置不同的CPU 状态
特权指令和非特权指令
•特权(privilege) 指令: :只能由操作系统使用、用户程序不能使用的指令
非特权指令: :用户程序可以使用的指令
CPU状态之间的转换
用户态 → 内核态
唯一途径 → 中断/ 异常/ 陷入机制
内核态 → 用户态
设置程序状态字PSW
二:中断机制
操作系统是由“中断驱动”或 “ 事件驱动 ”的
中断与异常的引入原因 CPU 对系统发生的 某个事件 作出的 一种反应
1:中断的引入:为了支持CPU 和设备之间的并行操作
当CPU 启动设备进行输入/ 输出后,设备便可以独立工作,CPU 转去处理与
此次输入/ 输出不相关的事情;当设备完成输入/ 输出后,通过向CPU 发中
断报告此次输入/ 输出的结果,让CPU 决定如何处理以后的事情
2:异常的引入: 表示CPU 执行指令时本身出现的问题
如算术溢出、除零、取数时的奇偶错,访存地址时越界或执行了“陷入指
令” 等,这时硬件改变了CPU 当前的执行流程,转到相应的错误处理程序
或异常处理程序或执行系统调用
Trap:访管指令
Fault:page default
Abort:溢出
硬件该做什么事? —— 中断/ / 异常响应
捕获 中断源发出的中断/ 异常 请求 ,以一定方式 响应 ,将处理器
控制权交给 特定的处理程序
软件要做什么事? —— 中断/ / 异常处理程序
识别 中断/ 异常类型并完成
中断向量表
中断向量表:
初始化:在系统启动时
一个内存单元,存放 中断处理程序入口地址 和 程序运行所需的处理机状态字[psw]
硬件执行流程:按中断号/ / 异常类型的不同,通过中断向量表转移控制权给中断处理程序
CPU中断处理
中断处理流程
1:打印机给CPU 发中断信号 硬件中断
CPU 处理完当前指令后检测到中断[引脚],判断出中断来源并向相关设备发确认信号
2:CPU 开始为软件处理中断做准备: 硬件中断
处理器状态被切换到内核态
在系统栈中保存被中断程序的重要上下文环境,主要是 程序计数器PC 、程序状态字PSW
3:CPU 根据中断码查中断向量表,获得与该中断相关的处理程 硬件中断
序的入口地址,并将PC 设置成该地址,新的指令周期开始时,
4:CPU 控制转移到中断处理程序 软件中断
中断处理程序开始工作
在系统栈中保存现场信息
检查I/O 设备的状态信息,操纵I/O 设备或者在设备和内存之间传送数据等等
5:中断处理结束时,CPU 检测到中断返回指令,判断是否继续切换。 硬件中断
若不切换,从系统栈中恢复被中断程序的上下文环境,CPU状态恢复成原来的状态,PSW 和PC 恢复成中断前的值
若切换:则将系统栈中上下文环境保存到进程的PCB中。将选择的进程的PCB的内容[读取到系统栈中]
补充:
进程由用户栈和内核栈
用户栈:由多个线程分配,每个线程都有自己的用户栈(因为是执行的基本单位)
系统栈:很小,且所有进程共享一个系统栈。分配时虽然分配地址,但是系统栈的地址是相同的。每次中断结束,需要清空系统栈