异常与中断 异常并不意外!一一lxx© llxx@ustc.edu.cn
异常与中断 异常并不意外!——llxx☺ llxx@ustc.edu.cn
程序如何执行的?用到哪些设备? /*-sum.c-=*/ 数据的表示 int sum(int a[]unsigned len) 数据的运算 { 各类语句的转换与表示(指令) int i,sum =0; 各类复杂数据类型的转换表示 for(i=0;i<=len-1:++) sum +a[i]; :过程(函数)调用的转换表示 return sum; Microsoft VisualC++ Unhandled exception in Test.exe:0xC0000005:Access Violation. /*---main.c---*/ int main() { 确定 inta[1]=100; int s; 链接(linker)和加载 s=sum(a,0); 程序执行(存储器访问) printf("%d",s); 异常和中断处理 输入输出(VO) C语言计算机? IF ID EX MEM WB
程序如何执行的?用到哪些设备? • C语言计算机?
Pentium Socket7插座 CPU CPU总线 北桥 士存与 Lacache 主存(DRAM) CPU总线 cache (256 PCI总线 控制器 512KB) (4I28MB)】 桥芯片 输入输出 I 芯片 可选 P▣总线 桥 PCI扩充槽 ROM BIOS 8042MPU PC总线 (64一128KB) 鼠标器 I5A总线 桥芯片 及 健盆、 鼠标 DMA.中断 62脚 控制递辑 控制器 (长精) 实时钟/日历 CMOS RAM ISA总线 电他 136脚 触盘 (短槽 唐图10.19 ISA扩充精 IF ID EX MEM WB
输入输出 唐图10.19
内容提要 ·异常与中断的基本概念,4.9 调用printfO -功能:处理意外事件,/O 应用程序 ·指令异常,系统服务(syscall) 库函数printf( ·外部中断 C函数库 一时序:顺序语义 库函数write() ·指令周期:同步,异步(中断周期) 系统调用write( 内核 -属性:5种 ·异常与中断响应的基本过程 一机构 ·向量式/非向量式,控制栈 User program Interrupt handler ·异常:EPC,Cause,Vector ·中断:EPC,Cause,Vector,Enable,Mask -OS:ESR/ISR -约定:软硬件接口 ·异常与中断响应过程控制 Interrupt- 一多周期异常处理:中断周期 occurs here j+ 一流水线异常处理 ·精确,非精确 M
内容提要 • 异常与中断的基本概念,4.9 – 功能:处理意外事件,I/O • 指令异常,系统服务(syscall) • 外部中断 – 时序:顺序语义 • 指令周期:同步,异步(中断周期) – 属性:5种 • 异常与中断响应的基本过程 – 机构 • 向量式/非向量式,控制栈 • 异常:EPC,Cause,Vector • 中断:EPC,Cause,Vector,Enable,Mask – OS:ESR/ISR – 约定:软硬件接口 • 异常与中断响应过程控制 – 多周期异常处理:中断周期 – 流水线异常处理 • 精确,非精确
Terms:exceptions、interrupts、traps 改变正常指令执行流(Transfer of Control)的意外事件。 一暂停当前程序的执行,转而执行其他程序; 一其他程序执行完成后,恢复被中断程序的执行。 与过程调用的区别:发生场景(程序内/外),系统状态切换 ● RISC:MIPS/ARM/RV统称exceptions,含 一内部事件 当前程序 ·指令异常:非法指令、溢出、访存错 异常/中断 系统调用(syscall):软中断(陷阱)、断点break 服务程序 -外部事件:中断Interrupts (ESR/ISR) ·/O中断(可屏蔽),设备故障(不可屏蔽) Type of event From where? RISC-V terminology System reset External Exception I/O device request External Interrupt Invoke the operating system from user program Internal Exception Using an undefined instruction Internal Exception Hardware malfunctions Either Either
Terms:exceptions、interrupts、traps • 改变正常指令执行流(Transfer of Control)的意外事件。 – 暂停当前程序的执行,转而执行其他程序; – 其他程序执行完成后,恢复被中断程序的执行。 – 与过程调用的区别:发生场景(程序内/外),系统状态切换 • RISC:MIPS/ARM/RV统称exceptions,含 – 内部事件 • 指令异常:非法指令、溢出、访存错 • 系统调用(syscall):软中断(陷阱)、断点break – 外部事件:中断Interrupts • I/O中断(可屏蔽),设备故障(不可屏蔽)
指令异常响应行为:同步 可恢复异常:当前指令故障,OS处理后返回当前指令,如图“故障” ● 不可恢复异常:当前异常无法修复,交用户处理,如图“异常中止” 陷阱:由陷阱指令(软中断)触发调用系统服务,返回下一条指令 程序执行 程序执行 程序执行 当前指令 当前指令 异岁入 处理 当前指令 发生异常 处理 发现故障 故障处理程序执行 触发陷阱 当前指令 常 异常 下一条指令 陷阱处理积序执行 下一条指令 星常 异常处理程序执行 下一条指令 返可 程序终止 故障处理 陷阱处理 异常中止 b
6 指令异常响应行为:同步 • 可恢复异常:当前指令故障,OS处理后返回当前指令,如图“故障” • 不可恢复异常:当前异常无法修复,交用户处理 ,如图“异常中止” • 陷阱:由陷阱指令(软中断)触发调用系统服务,返回下一条指令
不可恢复异常:异常终止 Kernel32 This program has pertormed an illegal operation Close and will be shut down. If the problem persists,contact the program Debug vendor. Detal KERNEL32 caused an invalid page fault in module KERNEL32.DLL at 0137:bft74966. Registers: EAX=5f402d8cCg=0137EIP=bfE74966EF1Cg=00010246 BBX=00000000SS=013fBgP=0181fad4EB2=0181fh00 ECX=00000002DS=013fESI=00000000FS=2717 EDX=815ae794E$=013fEDI=514cb008C8=0000 Bytes at CS:EIP: 66648e2d0c00000065f6051600000020
不可恢复异常:异常终止
系统调用:应用程序调用0OS服务 Ring 3 Ring 2 Least privileged Application Ring 1 execution Ring 0 stream Exception First-level handler Kemel Set supervisor(kernel)privilege level Most privileged Device drivers Save interrupt return register(IRR) Save kernel state Device drivers Applications Identify exception/interrupt Set correct privilege level 用户态 内核态 Jump to handler Real handler system call: Service interrupt xyzO IDT sys xyz sys xyzsys"call table{ Fix what caused the exception xyzO int 0x80 (for exceptions) ret_from sys call:"... Jump back to lower-level handler iret Restore kernel state Set original privilege level 在应用程序在1ibc标准库 系统调用 系统调用 调用中的 中的封装例程 处理程序 服务例程 RFI(return from interrupt,jump to IRR) 系统调用 Application execution stream
系统调用:应用程序调用OS服务
外部中断响应行为:异步 MIPS32 Core VectorNumber Offset 异常处理机构 Interrupt Exception Priority Level Interrupt Controller Execution unit EPC,CAUSE Requests (Exception Handling) Shadow Set Number CSR : ·中断禁止 Core Interrupt ◆ Events Instruction Data -抢占与嵌套 Cache Cache 外部中断源 可屏蔽 Multi-Layer System Bus ·时钟,外设 一不可屏蔽 Prefetch ·访存、外设错误,电源 Buffer Data Peripherals Interrupt 中断控制器:中断源管理 SRAM Events Program Flash ◆ -判优,挂起pending
外部中断响应行为:异步 • 外部中断源 – 可屏蔽 • 时钟,外设 – 不可屏蔽 • 访存、外设错误,电源 • 中断控制器:中断源管理 – 判优,挂起pending • 异常处理机构 – EPC,CAUSE – CSR • 中断禁止 – 抢占与嵌套
RISC异常/中断的属性:5种 User Within vs. Synchronous vs. User request maskable vs. between Resume vs. Exception type asynchronous vs.coerced nonmaskable instructions terminate 1/O device request Asynchronous Coerced Nonmaskable Between Resume Invoke operating system Synchronous User request Nonmaskable Between Resume Tracing instruction execution Synchronous User request User maskable Between Resume Breakpoint Synchronous User request User maskable Between Resume Integer arithmetic overflow Synchronous Coerced User maskable Within Resume Floating-point arithmetic Synchronous Coerced User maskable Within Resume overflow or underflow Page fault Synchronous Coerced Nonmaskable Within Resume Misaligned memory accesses Synchronous Coerced User maskable Within Resume Memory protection violations Synchronous Coerced Nonmaskable Within Resume Using undefined instructions Synchronous Coerced Nonmaskable Within Terminate Hardware malfunctions Asynchronous Coerced Nonmaskable Within Terminate Power failure Asynchronous Coerced Nonmaskable Within Terminate H&PCA图A.27 IF ID EX MEM WB
RISC异常/中断的属性:5种 H&P CA图A.27