一、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

初识exception的更多相关文章

  1. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  2. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  3. MongoDB【第一篇】MongodDB初识

    NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...

  4. 学习笔记:java并发编程学习之初识Concurrent

    一.初识Concurrent 第一次看见concurrent的使用是在同事写的一个抽取系统代码里,当时这部分代码没有完成,有许多的问题,另一个同事接手了这部分代码的功能开发,由于他没有多线程开发的经验 ...

  5. Android图片缓存之初识Glide

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

  6. Java初识

    基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...

  7. 蜗牛—JSP学习之JavaBean初识

    初识: <%@ page language="java" import="java.util.*" pageEncoding="utf-8&qu ...

  8. Day15 HTML补充、初识JavaScript

    一.上节回顾 上节回顾: HTML 头部信息:编码.title.style.link(导入css文件) 身体: 内联 块级 --->inline-block(既有内联效果又有块级效果) a标签: ...

  9. 初识Eclipse!!

      Java之路 ——初识Eclipse   零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 ...

随机推荐

  1. Graphviz绘制百家争鸣图

    最近读易中天<先秦诸子百家>,一边读一边在纸上画出逻辑关系,图越来越复杂,趁中午休息索性就把图用Graphviz重新绘制了一下;由于Graphviz主动承担了绘图排版的职责,我只需要关注内 ...

  2. [Erlang 0117] 当我们谈论Erlang Maps时,我们谈论什么 Part 2

    声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.后续Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...

  3. Hibernate 系列 01 - 框架技术 (介绍Hibernate框架的发展由来)

    引导目录: Hibernate 系列教程 目录 本篇导航: 为什么学习框架技术 框架的概念 主流框架的介绍 1.为什么学习框架技术 如何制作一份看上去具有专业水准的PPT文档呢?一个简单的方法就是使用 ...

  4. css之定位

    定位有三种,分别是相对定位 position:relative; .绝对定位 position:absolute; .固定定位 position:fixed; 相对定位 相对定位,就是微调元素位置的, ...

  5. I2C子系统之驱动SSD1306 OLED

    理解I2C设备驱动框架,主要围绕四个结构体去分析就容易了. struct i2c_algorithm:提供I2C协议的实现的操作,如:master_xfer实现数据收发的最基本方法. struct i ...

  6. java环境变量配置

    1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 ...

  7. Ubuntu15.04YouCompleteMe插件安装

    0x00. 简介 YouCompleteMe号称Vim的自动补全神器,YouCompleteMe: a code-completion engine for Vim,该项目在github的地址:You ...

  8. Selenium-java-XML启动用例类-简单1

    最简单启动用例方法 1 先建立xml xml代码如下 <?xml version="1.0" encoding="UTF-8"?> <suit ...

  9. [LeetCode] Reverse Nodes in k-Group 每k个一组翻转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  10. Unity 最佳实践

    转帖:http://www.glenstevens.ca/unity3d-best-practices/ 另外可以参考:http://devmag.org.za/2012/07/12/50-tips- ...