zoukankan      html  css  js  c++  java
  • 异常

    异常就是控制流中的突变,用来响应处理器状态中的某些变化.

    ECF是操作系统用来实现I/O,进程和虚拟内存的基本机制.
    应用程序通过使用一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务.比如,向磁盘写数据,从网络读取数据,创建一个进程以及终止当前进程,都是通过应用程序调用系统调用来实习那的.
    操作系统为应用程序提供了强大的ECF机制,用来创建新进程,等待进程终止,通知其他进程系统中的异常事件,以及检测和响应这些事件.
    ECF也是计算机系统中实现并发的基本机制.

    异常

    异常就是异常控制流中的突变,用来响应处理器状态中的某些变化.

    异常的类别

    类别 原因 异步/同步 返回行为
    中断 来自I/O设备的信号 异步 总是返回到下一条指令
    陷阱 有意的异常 同步 总是返回到下一条指令
    故障 潜在可恢复的错误 同步 可能返回到当前指令
    终止 不可恢复的错误 同步 不会返回
    中断

    中断是异步发生的,是来自处理器外部的I/O设备的信号的结果.
    例如网络适配器,磁盘控制器和定时器芯片,通过向处理器芯片上的一个引脚发信号,并将异常号放到系统总线上,来触发中断,这个异常号标识了引起中断的设备.

    陷阱

    陷阱有意的异常,是执行一条命令的结果.就像中断处理程序一样,陷阱处理程序将控制返回到下一条指令.
    陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用.
    用户程序经常需要向内核请求服务,比如读一个文件,创建一个新的进程,加载一个新的程序或者终止当前进程.为了允许对这些内核服务的受控访问,处理器提供一条特殊的"syscall n"指令,当用户程序想要请求服务n时,可以执行这条指令.
    执行syscall指令会导致一个到异常处理程序的陷阱,这个处理程序解析参数,并调用适当的内核程序.
    看起来系统调用和普通的函数调用是一样的.但普通函数运行在用户模式中,系统调用运行在内核模式中.

    故障

    故障由错误情况引起,它也许能被故障处理程序修正.
    一个典型的故障示例是缺页异常,当指令引用一个虚拟地址,而与该地址相对应的物理页面不在内存中,因此必须从磁盘中取出时,就会发生故障.
    当故障发生时,处理器将控制转移给故障处理程序.如果故障处理程序能够修正这个错误,它就将控制返回到引起故障的指令,从而重新执行它.否则,处理程序返回到内核中的终止(abort)例程,abort例程会终止引起故障的应用程序.

    终止

    终止就是不可恢复的故障.通常是硬件错误,比如DRAM或者SRAM位损坏时发生的奇偶错误.
    终止处理程序从不将控制返回给应用程序,而是将控制返回给一个abort例程,该例程会终止这个应用程序.

    异常-总结


    在我看来,中断陷阱类似, 但中断是外部造成的,陷阱是内部造成的.
    就像我们自己一样,通过中断被动响应外部事件,通过陷阱主动与外部进行响应.


    在我看来,故障就是运行中出现的一切问题,麻烦.不能解决的这部分就是终止.

  • 相关阅读:
    在Centos 7下编译openwrt+njit-client
    开博随笔
    Chapter 6. Statements
    Chapter 4. Arrays and Pointers
    Chapter 3. Library Types
    Chapter 2.  Variables and Basic Types
    关于stm32不常用的中断,如何添加, 比如timer10 timer11等
    keil 报错 expected an identifier
    案例分析 串口的地不要接到电源上 会烧掉
    案例分析 CAN OPEN 调试记录 进度
  • 原文地址:https://www.cnblogs.com/agichen/p/10329673.html
Copyright © 2011-2022 走看看