中断的来源是外设
异常的来源是不良的程序软件的非法指令等等
系统调用的来源应用程序主动向操作系统发出的合法服务请求
一、中断
中断是CPU的一个功能,就是CPU停下当前的工作,保留现场后自动地转去执行相应的处理程序,CPU控制权发生改变,处理完该中断紧急事件后再返回断点继续执行被刚才被打断的程序。
中断过程分为两部分
1、硬件:
依据内部或者外部事件设置中断标志,产生中断号,然后依据中断向量表调用相应的中断服务处理例程
2、软件:
首先进行现场保存(由编译器完成),然后进行中断服务处理(中断服务例程完成),接着清除中断标记(中断服务例程),最后进行现场恢复(编译器)。
二、异常
在cpu中,当程序执行到特定指令,这条指令触发了异常事件,比如说除0操作,cpu也会得到一个异常编号,操作系统会保留当前产生异常的现场
处理异常:
1、杀死产生异常的程序,例如:地址空间越界等非法行为
2、重新执行异常指令
如果是第二种情况,操作系统会修补应用程序的代码问题,然后重新执行异常指令,使异常变正常。
三、系统调用
处理过程:上层用户程序调用printf(),会触发系统调用write(),write中会带些参数,比如打印的内容、执行的外设。然后访问对应的外设,这里是屏幕,然后打印出这个内容。
注意:这其中会有一个系统调用接口。
通过系统调用,可以实现从用户态到内核态的转变。
用户态:不能执行访问IO指令,不能执行特权指令
内核态:相当于掌握了整个计算机。可以执行任何指令。
用户程序和内核拥有各自的堆栈,执行系统调用,会切换堆栈,切换特权身份。这些都是有很大的系统开销的,但也是有回报的,安全性得到的保障
这些开销都是值得的,有了这些开销才能保障程序在一个安全可靠的环境下运行。