中断异常和系统调用

Posted privatenotesofaidanchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中断异常和系统调用相关的知识,希望对你有一定的参考价值。

1、操作与程序和设备的交互

        交互过程主要与操作系统的interface设计有关,面对外设,通过中断和IO进行处理;面对应用程序,通过系统调用,异常提供相应功能。    

        系统调用:应用程序主动向操作系统发出服务请求。需要操作系统提供服务支持;

        异常:非法指令或者其他坏的处理状况;

        中断:来自不同的硬件设备的计时器和网络的中断

        注:中断源于外设(基于定义,本笔记中均指这种)。但实际使用上,除了CPU被动处理来源于外设的中断信号,CPU执行程序时,程序中包含专门的中断指令,即中断也可能是由程序产生的(基于使用)。

2、中断、异常和系统调用解决的问题

        中断:当某个外设连接计算机或某个程序马上执行时,操作系统可能正在进行其他操作,没办法立刻进行响应。所以提供中断机制,当外设或程序与系统有交互的时候,处理机立即中止现行程序的运行,自动转入相应的处理程序(中断服务例程),待处理完后,再返回原来的程序运行。因此中断不是为了断开,而是为了连上处理;

        异常:当程序(意外)出错时,将错误交给操作系统,操作系统执行异常处理例程;

        系统调用:通过系统调用为用户提供相应接口,同时这些接口不会影响系统安全

3、响应方式

        中断:异步,即CPU不知道外设是什么时候发出的中断;

        异常:同步,即产生异常,处理异常;

        系统调用:异步或同步,应用程序发出系统调用请求,如果程序一直等待内核反馈处理结果,就是同步;如果程序不等待结果去接着执行其他事,等内核返回结果后再回来获取结果,就是异步

4、中断和异常的处理机制(软硬件相结合)

        当某个外设事件产生一个中断或内部事件产生一个异常,这时要知道是由哪个服务例程去处理这个中断或异常。它是通过中断向量表查询的。

        中断向量表:entry结构,一侧是中断号,异常号,不同事件编号不同,这些编号对应不同地址,这些地址就是处理中断或异常的服务例程的起始地址。

4.1 硬件处理

        在CPU初始化时设置中断使能标志;(在CPU未准备好之前,无法处理硬件设备的交互信息,所以需要设置CPU使能标志,表示CPU是否准备好)

        依据内部或外部事件设置中断标志;(外部设备或内部事件向CPU发出中断信号,CPU对事件标识,表示产生了异常或中断,由这个信号得到异常号或中断号)

        依据中断向量调用相应中断服务例程 或异常处理例程;

4.2 软件处理

4.2.1 中断_软件处理

        保存当前处理状态;

        执行中断服务例程处理;

        清除中断标记;(服务例程)

        恢复之前保存的处理状态;

        (由于保护-恢复机制,因此用户感受不到中断的产生)

4.2.2 异常_软件处理

        保存现场;

        异常处理;

           1、处理程序是杀死产生了异常的程序,退出执行

           2、异常产生的原因操作系统可以弥补(如资源不够),处理程序是让操作系统进行弥补工作,然后恢复现场,这时就已经没有异常了

        恢复现场;

5、系统调用

        应用程序需要操作系统提供服务,这些服务,不能由程序直接执行,必须要操作系统执行,这时就需要操作系统提供相应接口,这些接口就是系统调用接口。

用户态和内核态:

        它表示程序执行过程中,CPU所处于的一种状态。用户态特权级低,CPU不能直接访问某些特殊的机器指令和IO;内核态表示操作系统运行过程中,CPU处于的状态,此时CPU能访问任何一条指令。一个应用程序执行,会经过从用户态到内核态的反复转换。

6、系统调用和函数调用的区别:

        当应用程序发起函数调用的时候,其实是在一个栈空间完成了函数参数的传递和参数返回;但系统调用执行过程中,应用程序和操作系统内核实际拥有各自的堆栈。即当应用发出系统调用之后,切换到内核态执行,实际上是切换到操作系统的堆栈,同时也切换了特权级。这种切换需要一定开销,所以系统调用开销比函数调用大。 

7、操作系统带来的开销

        操作系统通过中断、异常和系统调用,和应用程序以及外设进行交互,这种交互过程实际跨越了操作系统和外设,操作系统和应用程序的边界。这种跨越是有代价的,但这些代价保证了设备信息安全。跨越操作系统边界的开销:

        1、建立中断、异常、系统调用号与对应服务例程映射关系的初始化开销

        2、建立内核堆栈

        3、操作系统是不信任应用程序的,因此会对参数进行校验

        4、内核态切换到用户态实际是内存的拷贝,会有开销。内核态映射到用户态的地址空间,更新页面映射权限

        5、内核态独立地址空间

        6、每次退出内核态,都会对当前状态进行保存,再次进入时又需要恢复 

以上是关于中断异常和系统调用的主要内容,如果未能解决你的问题,请参考以下文章

操作系统一3中断和异常,系统调用

操作系统一3中断和异常,系统调用

操作系统一3中断和异常,系统调用

Linux中断 异常 系统调用 中断上半部 中断下半部 这些有啥区别和联系

中断异常和系统调用

中断异常和系统调用