操作系统的中断、异常、和系统调用

中断的来源是外设
异常的来源是不良的程序软件的非法指令等等
系统调用的来源应用程序主动向操作系统发出的合法服务请求

一、中断

中断是CPU的一个功能,就是CPU停下当前的工作,保留现场后自动地转去执行相应的处理程序,CPU控制权发生改变,处理完该中断紧急事件后再返回断点继续执行被刚才被打断的程序。

中断过程分为两部分
1、硬件:

依据内部或者外部事件设置中断标志,产生中断号,然后依据中断向量表调用相应的中断服务处理例程

2、软件:

首先进行现场保存(由编译器完成),然后进行中断服务处理(中断服务例程完成),接着清除中断标记(中断服务例程),最后进行现场恢复(编译器)。

二、异常

在cpu中,当程序执行到特定指令,这条指令触发了异常事件,比如说除0操作,cpu也会得到一个异常编号,操作系统会保留当前产生异常的现场
处理异常:
1、杀死产生异常的程序,例如:地址空间越界等非法行为
2、重新执行异常指令

如果是第二种情况,操作系统会修补应用程序的代码问题,然后重新执行异常指令,使异常变正常。

三、系统调用

处理过程:上层用户程序调用printf(),会触发系统调用write(),write中会带些参数,比如打印的内容、执行的外设。然后访问对应的外设,这里是屏幕,然后打印出这个内容。

注意:这其中会有一个系统调用接口。
在这里插入图片描述
通过系统调用,可以实现从用户态到内核态的转变。
用户态:不能执行访问IO指令,不能执行特权指令
内核态:相当于掌握了整个计算机。可以执行任何指令。

用户程序和内核拥有各自的堆栈,执行系统调用,会切换堆栈,切换特权身份。这些都是有很大的系统开销的,但也是有回报的,安全性得到的保障
在这里插入图片描述这些开销都是值得的,有了这些开销才能保障程序在一个安全可靠的环境下运行。

发布了199 篇原创文章 · 获赞 151 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/105656523