异常控制流--进程的基石

异常控制流

流:

首先,说“流“这个概念,我们经常使用流这个概念,却没有思考过它到底代表什么意思,文件中常用I/O 流,工程中常用控制流,网络中也使用流作为传送数据的方式。其实我们可以感受到,“流“就是一系列连续的动作集合,可以类比水流,就是不间断,连续不断(至少逻辑上是连续的)。一些指令的顺序集合我们把它抽象为控制流,连续不断的数据我们把它抽象为I/O流。

异常控制流:

操作系统的处理事件都不是预先演练过的也不是可以预知的,由其是硬件,硬件所触发的事件绝大多数是异步的,也就是完全突然发生的事件,当然我们的操作系统有与之对应的处理方法。现代操作系统通过改变控制流来处理这些突然发生的事件。

异常控制流的应用:

1 I/O,进程,虚拟存储器的基本机制都使用了它。
2 系统调用的实现就是基于异常控制流实现的。
3 这也是计算机系统中实现并发的基本机制的基础。
4 像c++/java 等高级语言的软件异常,函数的非本地跳转也是基于它。

异常及其类型

异常:

异常就是异常控制流的一种形式,它一部分是由硬件实现的,一部分是由操作系统实现的。具体因为不同操作系统一是不同的。
它本质上是控制流中的突变,用来响应处理器状态中的某些变化。如图所示:
遇到突然发生的事件就暂时中断,然后进入异常处理程序,最后返回(可能)

这里写图片描述
这里不同的异常是使用不同的处理程序的,这些不同的程序都有一个异常号来和它对应,我们使用一个存储了所有的异常号的表来控制选择哪一个异常处理程序来处理,这些数字一部分是由CPU 厂商定一部分由操作系统设计者来定。异常处理程序运行在内核模式下,所以对于异常处理程序有所有的资源完全的访问权限。

异常的类别:

中断:
    中断是异步发生的,是外部I/O设备的发出信号的结果,硬件中断的异常处理程序通常称为中断处理程序。
陷阱与系统调用:
    我们知道系统调用是必须在内核态运行的,所以必定会产生上下文切换,所以这个的异常是故意设置的,给内核设置了一个陷阱,当他执行系统调用的时候就必须发生异常控制流处理,所以我们也常叫做“陷入内核“。
故障:
    故障是由错误引起的,它可能被故障处理程序修正。当然这不一定是可以处理与修复的,很多情况下修不好只能终止这个进程。一个典型的并且能修好的例子就是页错误。
终止:
    终止是不可恢复的致命错误造成的结果,通常是一些硬件错误。操作系统会调用abort例程来终止这个程序的。

现在说进程

进程,相信大家都不陌生,不过今天从异常的角度看,异常是进程所需要的基本构造块,进程都是运行在上下文中的,上下文包含了进程运行时所需要的所有信息。进程切换,上下文必须切换,页就要随着切换,所以说异常一定会发生。异常处理程序是我们和操作系统交互的一个重要的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值