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