初识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
初识exception的更多相关文章
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- MongoDB【第一篇】MongodDB初识
NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
- 学习笔记:java并发编程学习之初识Concurrent
一.初识Concurrent 第一次看见concurrent的使用是在同事写的一个抽取系统代码里,当时这部分代码没有完成,有许多的问题,另一个同事接手了这部分代码的功能开发,由于他没有多线程开发的经验 ...
- Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- Java初识
基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...
- 蜗牛—JSP学习之JavaBean初识
初识: <%@ page language="java" import="java.util.*" pageEncoding="utf-8&qu ...
- Day15 HTML补充、初识JavaScript
一.上节回顾 上节回顾: HTML 头部信息:编码.title.style.link(导入css文件) 身体: 内联 块级 --->inline-block(既有内联效果又有块级效果) a标签: ...
- 初识Eclipse!!
Java之路 ——初识Eclipse 零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 ...
随机推荐
- 初学JavaScript
什么是 JavaScript? JavaScript 被设计用来向 HTML 页面添加交互行为. JavaScript 是一种脚本语言(脚本语言是一种轻量级的编程语言). JavaScript 由数行 ...
- mdadm设定RAID磁盘阵列,且当分区故障后如何重建
首先,fdisk建立不同分区,且设为fd格式 其次, mdadm -C md0 -a yes -l -n /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sd ...
- 例解 Linux cd 命令
cd 命令是 *nix 系统中最基本的命令,它所做的事情是改变你当前所在的目录.本文详细介绍该命令,它所能完成的功能以及关于该命令内在的东西. cd 命令:一个内置命令 BASH Shell 是大多 ...
- 1877: [SDOI2009]晨跑
1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2007 Solved: 1085[Submit][Status][ ...
- mysql max_allowed_packet 设置过小导致记录写入失败
mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES ...
- JavaScript模板引擎artTemplate.js——引入子模板
之前的例子都是单一结构的对象,如果遇到复杂对象结构,我们可以通过引入子模板来实现html的渲染. 依旧以之前的数据作为例子: <div id="content">< ...
- ios应用程序结构
MVC开发模式 什么是mvc,相信有一定开发经验的程序员都应该知道. M —— 模型,为程序提供数据 V —— 视图,为用户提供界面 C —— 控制器,用来控制程序视图,即上面的V 在ios程序中,一 ...
- How to remove null value in json string
Hi I'm using the below class Public List<string> name; Public List<string> midname; Once ...
- IO多路复用概念性
sellect.poll.epoll三者的区别 先来了解一下什么是进程切换 为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,这种行为为进程的切换,任务切换 ...
- 3sum问题的解决
其实一开始想错了,把这个问题想难了,导致没有思路,现在好了很多. 题目: Given an array S of n integers, are there elements a, b, c in S ...