


图解:
1) 中断主要分为两种类型:来自 CPU 外部的 Interrupt ,称为中断;来自 CPU 内部的 Exception,称为异常;
2)当 发生中断 的时候,会 中止 CPU 上正在运行的程序,之后进入 kernel 模式;
3)随后在 kernel 模式下,执行该事件的处理程序;
4)执行完中断处理程序,重新回到 user 模式,重新执行用户程序。
注意:中断的执行依靠的是:陷阱机制。

图解:
1)外中断(Interrupt),是 来自处理器之外的硬件中断信号。由于是来自处理器外部的中断,所以 外部中断是不可预知的,属于随机中断,又称为异步中断。外中断的类型有:
2)内中断(异常Exception),来自处理器内部的中断,是指令执行过程中发生的中断,属于同步中断。内中断的类型有:
我们在前面可以看到,中断的实现,依靠的就是陷阱机制,从 user 模式进入 kernel 模式执行中断处理程序;之后再从 kernel 模式进入到 user 模式,继续应用程序的执行。
而系统调用是属于内部异常,是指令执行过程中发生的中断,所以系统调用的实现,依靠的也是陷阱机制。


图解:
当从 kernel 模式进入到 user 模式,会做 3 个事情:
1)选择一个进程 恢复进程上下文和唤醒;
2)恢复选中的进程的上下文信息;
3)恢复该进程的运行状态;


图解:
1)操作系统一般支持双模式(dual mode),即用一个硬件 bit 来表示:该 bit 为 0 ,表示 kernel mode,该 bti 为 1,表示当前是 user mode。
2) 特权指令:仅在 kernel mode 运行的指令,称为特权指令。其中 process Switching(进程切换)属于特权指令,因此需要从 user mode 切换到 kernel mode。
3)非特权指令:仅在 user mode 运行的指令,称为非特权指令。
陷阱机制中,处理器从 user mode 切换到 kernel mode,也能从 kernel mode 切换到 user mode,这个过程称为模式切换。
注意:中断是用户态向内核态转换的唯一途径。
OS提供Load PSW指令装载用户进程返回到用户状态。


图解:
1)进程切换的时间有两点:
主动切换:进程需要等待获得某些资源,还没获取到资源之前,进程将主动切换出来,让出 CPU,进入等待状态;
被迫切换:由于时间片到达,或者被高优先级的进程抢占,当前进程将被迫让出 CPU,进入就绪状态;
2)切换过程:
进程切换属于特权指令,所以进程切换的第一步,就是从 user mode 切换到 kernel mode.
接下来所有的步骤,保存上下文,修改被中断进程的控制信息等,都是在 kernel mode 下进行。


图解:
1)进程控制块(PCB)包含了该进程本身相关的许多控制信息:
2) PCB,进程控制块,只包含进程的控制信息;PCB 不会包含任何可执行的指令和代码;
3)text 段,data 段,heap 段,stack 段等,这些被称为“进程实体”;

注意:进程上下文,指的是两部分,分别是 进程控制块(PCB)和 进程实体。


图解:
1) 就绪状态的进程,都放在就绪队列中;等待状态的进程,根据等待不同的 I/O 设备,可能会被分派在不同类型的等待队列中;在单处理器的系统中,由于一个时刻只能有 1 个进程在运行,所以不需要有运行队列存在运行态的进程;
2)进程队列保存的是进程控制块 PCB,一方面是减小了内存空间的使用,另外通过 PCB 的 memory limits 等信息,就能根据 PCB 找到对应的进程实体和进程上下文;

图解:
1)新创建的进程,已经具备了运行条件,就会从 new 状态进入 ready 就绪队列;
2)ready 就绪队列的进程可以占用 CPU ,进入运行态;
3)运行态的进程运行结束,就会终止(Terminated);
4)运行态中的进程,可以主动或者被动的让出 CPU ,之后进入 ready 就绪队列或者 等待队列。
注:源自B站up主:Y4NGY