20135205信息安全系统设计基础第十一周学习总结
第八章 异常控制流
异常及其种类
异常:就是控制流中的突变,用来响应处理器状态中的某些变化。
在处理器中,状态被编码为不同的位和信号。状态变化称为事件。事件可能和当前指令的执行没有关系。
在任何情况下,当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接调用异常,到一个专门设计用来处理这类事件的操作子程序(异常处理程序)
当异常处理程序完成处理后,根据引起异常的事件的类型,会发生以下三种情况中的一种:
1)处理程序将控制返回当前指令,即当事件发生时正在执行的指令。
2)处理程序将控制返回给Inext,即如果没有发生异常将会执行的下一条指令。
3)处理程序终止被中断的程序。
异常号:系统中可能的每种类型的异常都分配了一个唯一的非负整数的异常号。
异常表基址寄存器:异常号是到异常表中的索引,异常表的起始地址放在一个叫做异常表基址寄存器的特殊CPU寄存器里。
异常类别:中断,陷阱,故障和终止。
1、中断:是异步发生的,是来自处理器外部的I/O设备的信号的结果。硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步。硬件中断的异常处理程序通常称为中断处理程序。
2、陷阱:陷阱是有意的异常,是执行一条指令的结果。就像中断处理程序一样,陷阱处理程序将控制返回到下一条指令。陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。
3、故障:由错误情况引起,它可能能够被故障处理程序修正。当故障发生时,处理器将控制转移给故障处理程序。如果处理程序能够修正这个错误情况,它将控制返回到一起引起故障的指令,从而重新执行它。否则,处理程序返回到内核中的abort例程,abort例程会终止引起故障的应用程序。
4、终止:终止时不可恢复的致命错误造成的结果,通常是一些硬件错误。终止处理程序从不将控制返回给应用程序。
进程和并发
一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器。
一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用存储器系统
并发流:一个逻辑流的执行在时间上与另一个流重叠,这两个流被称为并发地运行。
并发:多个流并发地执行的一般现象称为并发。一个进程和其他进程轮流运行的概念称为多任务。一个进程执行它的控制流的一部分的每一时间段叫做时间片。因此多任务也叫做时间分片。
处理器通常是用某个控制寄存器中的一个模式位来提供这种功能的,该寄存器描述了进程当前享有的特权。当设置了模式位时,进程就运行在内核模式中(有时也叫做超级用户模式)。
没有设置模式位时,进程就运行在用户模式中。用户模式中的进程不允许执行特权指令。也不允许用户模式中的进程直接引用地址空间中内核区内的代码和数据。任何这样的尝试都会导致致命的保护故障。用户程序必须通过系统调用接口间接地访问内核代码和数据。
linux提供了一种聪明的机制,叫做/proc文件系统,它允许用户模式进程访问内核数据结构的内容。
进程控制
PID:每个程序都有一个唯一的正数(非0)进程ID。
getpid函数返回调用进程的PID。getppid函数返回它的父进程的PID(创建调用进程的进程)。两个函数都返回一个类型为pid_t的整数值。
运行:进程要么在CPU上执行,要么在等待被执行且最终会被内核调度。
停止:进程的执行被挂起,且不会被SIGSTOP、SIGTSTP、SIDTTIN或者SIGTTOU信号时,进程就停止,并且保持停止直到它收到一个SIGCONT信号,在这个时刻,进程再次开始运行。
终止:进程永远地停止了,进程会因为三种原因终止:1)收到信号,该信号的默认行为是终止进程。2)从主程序返回。3)调用exit函数。
参考资料:
《深入理解计算机操作系统》