初识exception

一、exception的分类

根据此exception(异常)是否可以打断正在执行的指令,可以将exception分为 asynchronous exception 和 synchronous exception 两大类;asynchronous exception 即 interrupt exception; synchronous exception又可以细分为三种exception:trap、fault、abort。如下图所示。

对于interrupt。这种类型的exception不可以打断正在执行的指令,必须等到这条指令完成后才可以对interrupt作出反应(而其他三种却可以打断正在执行的指令)。一般interrupt由I/O设备产生,比如网络适配器,磁盘等。

对于trap。提到trap我们就不得不提system call。因为trap这种异常是我们在执行指令时故意引发的异常,用于system call。比如我们需要打印一些信息到command line窗口,在执行这个打印指令时就触发一个异常,然后system call 打印函数以打印信息到命令行窗口。

对于fault。我们在virtual memory中遇到的page fault就会触发fault exception,然后exception handler 进行page in操作,将缺失的page从disk搬移到main memory 。所以fault异常一般需要exception handler进行一定的处理以重新正确执行当前指令。

对于abort。不可恢复的致命错误会导致abort异常,一般是硬件故障。abort的异常handler会终止当前程式。

二、异常的运行过程

每一个异常(不是每一种异常)都会有异常号,一部分异常的异常号由处理器设计者给定,一部分由OS kernel的设计者给定。比如在IA32 system中,共有256个异常,前32个,0-31,由intel architect给定,后面的由OS给定,如下图所示。

步骤(参考下图):

  1、根据 exception table base register 和 异常号 计算出异常表的入口地址

  2、根据入口地址跳转到相应的exception handler。

三、exception与precedure call的区别

我们在观察exception的运行过程中,应该已经感觉到他们是非常相似的。不同点很多,其中最重要的一点是:有些异常处理完之后就再也不会来了(abort),或者只回来执行下一条指令(interrupt & trap),并不从被中断的点继续执行。列表如下。

四、参考资料

<<computer systems a programmer‘s perspective>> second edition p701-p717

时间: 2024-10-08 20:52:04

初识exception的相关文章

Spring jms 与 ActiveMq初识

Spring JMS 与 ActiveMQ初识 1.1 Spring jms 与 ActiveMQ简介 jms 的全称是 Java Message Service,其主要作用是在生产者与消费者之间进行消息的传递:实际业务场景下,当A系统完成某项业务操作后,需要通知B系统或者其他任意系统 A系统操作完成的状态,以及操作中涉及到的相关信息,比如 当会员卡发放系统完成给用户绑定一张会员卡的操作之后,可以发出一条消息,消息内容是 uid或phone为XXX的用户,绑定了一张XX类型(普通卡.贵宾卡等)的

学习WebSocket一(WebSocket初识)

Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tomcat从7.0.47开始支持JSR356,这样一来写WebSocket的时候,所用的代码都是可以一样的.今天终于体验了一把Tomcat发布的WebSocket,用着很爽,下面把这一历程分享给大家. 关键词:WebSocket, Tomcat 前提:使用Tomcat7.0.47,Firefox25.0.0.5046 首先Tomcat7.0.47自带WebSocket的示例程序,有两种版本,

Android网络框架OkHttp之get请求(源码初识)

概括 OkHttp现在很火呀.于是上个星期就一直在学习OkHttp框架,虽然说起来已经有点晚上手了,貌似是2013年就推出了.但是现在它版本更加稳定了呀.这不,说着说着,OkHttp3.3版本在这几天又发布了.以下以OkHttp3.2版本为准,没办法,上个星期看的时候还是以3.2为最新版本的.首先,我们要先了解一些背景,OkHttp这个框架是有Square公司推出的,进入官网.如果想看API,点击进入API.大概了解了OkHttp之后,我们应该知道OkHttp是一个网络框架,想想以前在开发中,网

Gradle(一)——初识

Gradle(一)--初识 1. 综述 Gradle 是像 Maven 一样的版本控制软件,它使用 Groovy 代替 Maven 的 XML 配置,代码更简洁,也更灵活.官方文档:docs.gradle.org 2. 安装 从官网下载 zip 包,解压,设置环境变量 GRADLE_HOME,值为解压目录,再将 %GRADLE_HOME%\bin 目录加入 path. 在 terminal 里运行 gradle -v 输出版本信息,则安装成功. 2.1 一个小问题 我虽然按照上面的正确步骤操作了

蜗牛—JSP学习之JavaBean初识

初识: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" +

Actiove Directory的DirectoryEntry与DirectorySearcher初识及Filter语法

前言 增删改查,我想查询是最先要说的一个了.本章主要记录使用.NET Framework进行对域控服务器对象的查询操作,介绍DirectoryEntry与DirectorySearcher(搜索器)及Filter(搜索过滤器)语法,并对AD对象常用属性做记录. DirectoryEntry与DirectorySearcher 使用C#语言对域控服务器的AD对象进行查询操作,DirectoryEntry和DirectorySearcher是必须要了解的两个类.System.DirectorySer

Day15 HTML补充、初识JavaScript

一.上节回顾 上节回顾: HTML 头部信息:编码.title.style.link(导入css文件) 身体: 内联 块级 --->inline-block(既有内联效果又有块级效果) a标签: target.href(跳转到url,#i1(id=i1跳转到顶部)) img标签: src alt iframe(伪Ajax,上传文件) src form标签 action提交url:method提交方式:get和post:上传文件:enctype="multipart/form-data&qu

我们一起学习WCF 第一篇初识WCF(附源码供对照学习)

前言:去年由于工作需要我学习了wcf的相关知识,初期对wcf的作用以及为何用怎么样都是一知半解,也许现在也不是非常的清晰.但是通过项目对wcf的运用在脑海里面也算有了初步的模型.今天我就把我从开始wcf所遇到的困难以及解决方案一点点记下来,可能还有很多不足之处那我们一起共同学习.在学习之前我们有必要初步的看下百度百科对wcf的解释,让我们心中有这一个概念,然后建立项目,然后再次看概念,然后在去更深层的建立项目,然后再去理解这样反复的去做我相信可以做好wcf.那么下面我就会从初识wcf,wcf消息

【hadoop之翊】——hadoop大核心之HDFS初识

今天来说说hadoop的一大核心--HDFS,这个是很重要的,它呢,是分布式文件系统.为什么说hadoop能存储海量数据?其实主要还是依赖与hdfs的能力,主要依赖的是hdfs能存储海量数据. 1. 为什么hdfs能存储海量数据呢? 一开始抛出这样的问题来想想.至于HDFS的基本概念什么的都不用多说了的~我们重在使用,而不是去做"研究".扯蛋的话就是,"专家的研究"已经成为名副其实的贬义词了,很带有讽刺意义了,在现在这个时代~你们懂的~因为他们有的没有真正经历过,而