CSAPP第八章

CSAPP第八章

参考https://www.cnblogs.com/zy691357966/p/5480537.html

8.1异常

异常是异常控制流的一种形式,一部分由硬件实现,一部分由操作系统实现

a transfer of control to the OS kernel in response 

to some event

异常(exception)控制流的突变,用来响应处理器状态的某些变化。

事件(event)状态变化

  • 事件可能与当前执行指令有关
    • 存储器缺页,算数溢出
    • 除0
  • 也可能与当前执行指令无关
    • I/O请求
    • 定时器产生信号

 

通过异常表(exception table)的跳转表,进行间接过程调用(异常),到专门设计处理这种事件的操作系统子程序(异常处理程序(exception handler)

 

 异常处理程序在执行结束后,会发生以下三种情况之一:
1. 返回应用程序当前指令Icurr
2. 返回应用程序的下一条指令Inext
3. 异常处理程序终止被中断的应用程序

8.1.1 异常处理

系统启动时,操作系统分配和初始化一张称为异常表的跳转表。

  • 条目k包含异常k的处理程序的地址。
  • 异常表的起始地址放在叫异常表基址寄存器的特殊CPU寄存器中。
  • 异常类似过程调用,不过有以下不同
    • 过程调用,跳转到处理程序前,处理器将返回地址压入栈中。对于异常,返回地址是当前,或下一跳指令。
    • 处理器会把额外的处理器状态压入栈中。
    • 如果控制一个用户程序到内核,那么所有这些项目会被压入内核栈中,而是用户栈。
    • 异常处理程序运行在内核模式下,这意味他们对所有系统资源有完整访问权限。

 

 8.1.2 异常的类别

 

 同步 synchronous 当一个方法被调用时,调用者需等待该方法执行完毕返回才能继续执行

 异步 asynchronous 当一个方法被调用时,立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕

 

 1.中断

中断异步发生,来自处理器外部的I/O设备的信号的结果

硬件中断不是由任何一条专门的指令造成,从一定意义上时异步的

 

posted @ 2019-12-16 23:14  柠檬味呀  阅读(358)  评论(0编辑  收藏  举报