8.1 异常
异常就是控制流中的突变,用来响应处理器状态中的某些变化
当异常处理程序完成处理后,根据引起异常的事件的类型,会发生以下3种情况中的一种:
1)处理程序将控制返回给当前指令Icurr,即当事件发生时正在执行的指令
2)处理程序将控制返回给Inext,如果没有发生异常将会执行的下一条指令
3)处理程序终止被中断的程序
异常类别:中断,陷阱、故障、终止
8.2 进程
进程:一个执行中程序的实例
一个逻辑流的执行在时间上与另一个流重叠,称为并发流,这两个流被称为并发地运行
多个流并发的执行的一般现象被称为并发。一个进程和其他进程轮流运行的概念称为多任务
并发流的思想与流运行的处理器的核数或者计算机数无关。如果两个流在时间上重叠,那么他们就是并发
并行流是并发流的一个真子集。如果两个流并发地运行在不同的处理器核或者计算机上,那么我们称它为并行流,他们并行的运行,且并行的执行
地址空间结构:
地址空间底部是保留给用户程序的,包括通常的代码、数据、堆和栈段。代码段总是从地址0x400000开始。地址空间顶部保留给内核。地址空间的这部分包含内核在代表进程执行指令时使用的代码、数据和栈
操作系统内核使用一种称为上下文切换的较高层形式的一场控制流来实现多任务
8.4 进程控制
进程3种状态:运行、停止、终止
Fork函数调用一次,却会返回两次:一次是在调用进程中,一次是在新创建的子进程中
调用一次,返回两次
并发执行
相同但是独立的地址空间
共享文件
fork:父进程通过fork函数创建一个新的运行的子进程
waitpid:一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止
wait:是waitpid函数的简单版本
sleep:将一个进程挂起一段指定的时间
pause:调用一个函数休眠,直到该进程收到一个信号
execute:在当前进程的上下文中加载并运行一个新程序
8.5 信号
信号,它是允许进程和内核中断其他进程
传送一个信号到目的进程由两个不同步骤组成:
1)发送信号
2)接收信号
进程发送信号的机制,都是基于进程组
进程组:每个进程都只属于一个进程组,进程组是由一个正整数进程组ID来标识的。
getpgrp函数:返回当前进程的进程组ID
setpgid函数:改变自己或者其他进程的进程组
用/bin/kill程序发送信号
从键盘发送信号
通过kill函数发送信号
用alarm函数发送信号
8.6 非本地跳转
非本地跳转:控制直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用-返回序列
函数:setjmp和longjmp