- 浏览: 142219 次
文章分类
最新评论
我知道很多人都知道异常处理,但可能对其底层并不太了解,现在我们就来简单的聊一聊。
在此啰嗦一句(仅为自己记录需要^_^,与本主题无多大关系),异常是位于硬件和操作系统交界的部分,系统调用是为应用程序提供到操作系统的入口点的异常,而进程和信号位于应用和操作系统的交界处。
现在正式开始。
异常说白了就是控制流中的突变,用来响应处理器状态中的某些变化。在处理器中,状态被编码成了不同的位和信号。状态变化就被称为事件,事件可能和当前指令的执行直接相关,例如发生虚拟存储器缺页、算术溢出等,但也可能和当前指令无关,比如一个系统定时器产生信号或者一个I/O请求完成。
异常可分为四类:中断、陷阱、故障、终止,它们的区别如下表:
当处理器在任意时刻检测到有事件发生时,它就会通过一张叫做异常表的跳转表,其会在系统启动时由操作系统分配和初始化,跳转表里面存有异常号和其对应的异常处理程序,异常号是到异常表中的索引,而异常表的起始地址放在一个叫做异常表基址寄存器的特殊cpu寄存器里。异常触发时就利用异常号来进行一个间接过程调用,调用一个专门用来处理这类事件的操作系统子程序,即异常处理程序。当异常处理程序完成处理后,就会根据引起异常事件的类型,执行相应操作,即将控制权返回给事件发生时正在执行的指令或下一条指令,或直接终止被中断的程序。
在此啰嗦一句(仅为自己记录需要^_^,与本主题无多大关系),异常是位于硬件和操作系统交界的部分,系统调用是为应用程序提供到操作系统的入口点的异常,而进程和信号位于应用和操作系统的交界处。
现在正式开始。
异常说白了就是控制流中的突变,用来响应处理器状态中的某些变化。在处理器中,状态被编码成了不同的位和信号。状态变化就被称为事件,事件可能和当前指令的执行直接相关,例如发生虚拟存储器缺页、算术溢出等,但也可能和当前指令无关,比如一个系统定时器产生信号或者一个I/O请求完成。
异常可分为四类:中断、陷阱、故障、终止,它们的区别如下表:
类别 | 原因 | 同步/异步 | 返回行为 |
中断 | 来自I/O设备的异常 | 异步 | 下一条指令 |
陷阱 | 有意的异常 | 同步 | 下一条指令 |
故障 | 潜在可恢复错误 | 同步 | 可能返回当前指令 |
终止 | 不可恢复错误 | 同步 | 不会返回 |
当处理器在任意时刻检测到有事件发生时,它就会通过一张叫做异常表的跳转表,其会在系统启动时由操作系统分配和初始化,跳转表里面存有异常号和其对应的异常处理程序,异常号是到异常表中的索引,而异常表的起始地址放在一个叫做异常表基址寄存器的特殊cpu寄存器里。异常触发时就利用异常号来进行一个间接过程调用,调用一个专门用来处理这类事件的操作系统子程序,即异常处理程序。当异常处理程序完成处理后,就会根据引起异常事件的类型,执行相应操作,即将控制权返回给事件发生时正在执行的指令或下一条指令,或直接终止被中断的程序。
发表评论
-
浮点运算指令
2019-05-22 23:13 1571上一节介绍了浮点数与各种数值类型之间的相互转换 ... -
浮点数类型转换指令
2019-05-15 22:37 1706在浮点寄存 ... -
浮点寄存器概述
2019-05-14 22:31 2587本文介绍的浮点寄存器是基于 AVX2(Adva ... -
汇编指令之跳转指令
2019-04-15 00:21 4797正常执行的情况下,指令会按照顺序一条条地执行, ... -
汇编指令之条件码
2019-04-08 21:05 2355在系统底层,除了整数寄存器,CPU 还维护着一 ... -
汇编指令之算术和逻辑操作指令
2019-03-28 22:16 1376下表是 x86-64 ... -
汇编指令之数据传送指令
2019-03-25 21:28 1287在x86-64 中的 ... -
x86-64 中的寄存器与汇编操作数杂述
2019-03-20 21:45 993Intel 中常用 ... -
hello 程序执行背后的故事
2018-12-26 21:48 608源文件 hello. ... -
linux启动服务概述
2017-04-08 02:43 398传统的linux中定义了七个运行级,分别如下: ... -
unix限制
2017-04-04 16:08 578UNIX系统实现定义了很多幻数和常量,其中有很 ... -
linux引导加载程序--GRUB
2017-04-04 04:22 625linux世界里有两种 ... -
存储器映射
2016-06-13 00:12 553注:本文摘自《深入理解计算机操作系统》第九章--虚拟存 ... -
虚拟存储器对存储器管理的作用
2016-06-10 16:00 695注:本文中的大部分内容均是摘录自《深入理解计算机系统》一书,权 ... -
信号处理问题
2016-06-03 08:31 561注:本文摘自《深入理解计算机系统》第8章 --- 异常控制流。 ... -
僵尸进程
2016-05-23 23:57 361在解释僵尸进程的概念之前,我们得先了解这样的一个事实: 一个进 ... -
程序优化之存储器别名使用
2016-05-20 08:55 797说明:本文示例摘自《深入理解计算机系统》第五章----优化程序 ... -
条件变量基本概念与原理(转载)
2016-05-20 08:54 1579对于条件变量,我一直感到很困惑,搞不清其与互斥锁到底有啥区别, ... -
CPU与磁盘的交互过程
2016-05-19 09:05 1838对于计算机系统底层技术,想必很多人都和我一样不太了解,最近在学 ... -
存储器层次结构中基本的缓存原理
2016-05-19 09:00 668对于操作系统,我们知道,越靠近CPU的存储器,其存储速度就会越 ...
相关推荐
C#异常处理总结及简单实例 一、异常处理的理解? 异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常。 因此处理这种错误,就称为异常处理。 二、异常处理如何操作? C# 异常处理时建立在...
MySQL中的异常处理是数据库编程中不可或缺的一部分,它允许开发者预设对可能出现的错误或异常的响应,从而确保程序的稳定性和健壮性。在MySQL中,异常定义和处理主要是通过`DECLARE`语句来实现的。 1. **异常定义**...
异常处理是编程中的一种机制,用于捕获和处理运行时发生的错误或异常情况。异常可以由硬件引发,如硬件异常,也可以由操作系统或应用程序自身触发,即软件异常。当异常发生时,操作系统允许程序有机会检查异常类型并...
在易语言中,线程是并发执行的程序单位,线程结构异常处理是编程过程中非常重要的一环,因为线程可能会遇到各种异常情况,如内存访问错误、除零异常等。 线程结构异常处理源码是易语言中处理这些异常的关键部分。当...
Java 异常处理习题 Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出...
"New_SE_Handler"可能是一个新的结构化异常处理程序,结构化异常处理(SEH)是Windows操作系统中的一个特性,用于处理硬件和软件异常。 "GetSeAddr"可能是获取异常发生时的地址函数,这对于分析异常原因和定位问题...
在编程领域,异常处理是确保程序健壮性与稳定性的关键技术。对于C、C++以及基于MFC(Microsoft Foundation Classes)的开发来说,异常处理更是不可或缺的一部分。本篇文章将深入浅析C、C++中的异常处理机制以及MFC中...
详解 SpringCloud Finchley Gateway 统一异常处理 SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud ...
### C++异常处理详解 #### 引言 随着软件项目的规模不断扩大,确保软件质量变得日益复杂且至关重要。软件产品在实际应用中面临多种潜在风险,包括但不限于程序崩溃、数据丢失等,这些问题严重影响用户体验及系统...
【异常处理】是编程中必不可少的一个环节,尤其是在Java这样的面向对象语言中。异常处理机制使得程序在遇到错误时能够优雅地中断执行流程,提供错误信息,并有机会进行恢复操作,而不是简单地崩溃。以下是对异常处理...
异常处理是Java编程中至关重要的一个概念,它确保了程序在遇到错误或异常情况时能够以优雅的方式继续执行或者终止。下面是对Java异常处理机制的详细解析。 在Java中,异常是程序运行时发生的错误,它中断了正常的...
ARM处理器异常处理是指ARM微处理器对各种异常情况作出响应和处理的过程。异常指的是处理器在正常执行程序时遇到的特殊情况,例如外部中断请求、未对齐的内存访问错误、指令预取终止等。为了保证系统的稳定性和正确性...
游标和异常处理 游标是 SQL 的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将...
在 PowerBuilder 9(简称 PB9)开发过程中,异常处理是一项关键的技术,它能帮助开发者有效地管理和解决程序中出现的错误,确保系统的稳定运行。在实际应用中,开发者经常会遇到各种预知和不可预知的问题,如系统级...
《ADS异常处理详解》 异常处理是嵌入式系统中至关重要的部分,特别是在基于ARM架构的系统中。本文将深入探讨ARM处理器的异常处理机制,包括异常类型、处理流程、异常优先级以及向量表等内容。 一、异常类型 ARM...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本实验报告“java实验报告4-异常处理”旨在帮助初学者掌握Java中的异常处理机制,以及如何利用log4j进行日志...
React Native 异常处理库是专门为在React Native框架下开发的混合移动应用提供错误管理和调试支持的工具。React Native允许开发者使用JavaScript编写原生移动应用,但JavaScript代码的运行环境中可能会遇到各种错误...
### Spring Cloud Gateway全局异常处理详解 #### 一、引言 在微服务架构中,网关作为服务入口,承担着路由转发、限流熔断、鉴权认证等职责。Spring Cloud Gateway作为一款基于Spring Framework 5、Project Reactor...
课程作业,实现两数计算及其异常处理,异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。 Java中的异常可以是函数...