异常控制流:
在硬件层,异常是由处理器中的事件触发的控制流中突变。控制流传递给一个软件处理程序,该处理程序进行一些处理,然后返回控制给被中断的控制流。
异常就是控制流中的突变,用来响应处理器状态中的某些变化。异常处理过程如下:
每个异常都分配了一个唯一的非负整数的异常号。在运行时,处理器检测发生了一个事件,并且确定了相应的异常号k,随后,处理器触发异常,方法是间接执行调用,通过异常表的表目k,转到相应的处理程序。
异常的类别:
1、中断:异步发生,来自处理器外部的I/O设备的信号的结果,将控制返回给应用程序控制流中的下一条指令;
2、陷阱:有意的异常,同步发生。当程序想要请求服务时,执行syscall指令会导致一个到异常处理程序的陷阱。陷阱处理程序将控制返回给应用程序控制流的下一条指令。
3、故障:由错误程序引起。同步发生。根据故障是否能被修复,故障处理程序要么重新执行引起故障的指令,要么终止。
4、终止:不可恢复的致命错误造成的结果。同步发生,不会返回。
进程:
进程定义:一个执行中程序的实例。
进程提供给应用两个重要的抽象:
1、逻辑控制流。它提供给每个程序一个假象,好像它是独占地使用处理器。
2、私有地址空间。它提供给每个程序一个假象,好像它是独占地使用主存。
进程是轮流使用处理器的,每个进程执行它的流的一部分,然后被抢占,然后轮到其他进程。
并发流:一个逻辑流的执行在时间上和另一个流重叠
并发:多个流并发的执行的现象
多任务:一个进程和其他进程轮流运行,多任务也叫时间分片
用户模式和内核模式:
处理器通常是用某个控制寄存器中的一个模式位来提供此功能。
运行应用程序代码的进程初始是在用户模式中的。进程从用户模式转为内核模式的唯一方法是:通过诸如中断、故障等异常。
上下文切换:
操作系统内核使用一种称为上下文切换的异常控制流来实现多任务。
内核为每个进程维持一个上下文。上下文是内核重新启动一个被抢占的进程所需的状态。
当内核代表用户执行系统调用时,可能会发生上下文切换。如果系统调用因为等待某个事件发生阻塞,那么内核可以让当前进程休眠,切换到另一个程序。
中断也可能引起上下文切换。