背景
进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占的使用硬件。在大多数系统中,需要运行的进程数是多于可以运行他们的CPU个数的。无论是在多核还是单核系统中,一个CPU看上去都像是在并发的执行多个进程,这是通过处理器在进程间切换来实现的。 操作系统实现这种交错执行的机制称为上下文切换。,总而言之,进程是轮流使用处理器的。
进程
进程:一个执行中的程序的实例,系统中的每个程序都是运行在某个进程的上下文中的。,通常进程还包括堆栈段和数据段,不同的进程文本段相同,其他可能不同。
进程五状态:
创建,运行,等待,就绪,终止
一次只能由一个进程在处理器上运行,但是多个进程可处于就绪或者等待状态

PCB

进程调度
多道程序设计的目的就是无论何时都有进程在运行,从而使CPU的利用率最大化
进程调度是选择一个可用的进程
调度队列
作业队列:系统中的所有进程
就绪队列:驻留在内存中的就绪的、等待运行的进程
调度程序
长期(作业)调度程序(不频繁):从缓冲池中选择进程,装入内存中准备执行。
它看i给你之多道程序设计的程度(内存中的进程数量)
短期(cpu)调度程序(频繁):从准备执行的进程中选择进程,并为之分配cpu
上下文切换
操作系统保持跟踪进程运行所需的所有状态信息,这种状态,也就是上下文,它包括许多信息,例如PC和寄存器文件的当前值,以及主存的内容。
当操作系统决定要把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程的上下文,恢复新进程的上下文,然后将控制权传递到新进程,新进程就会从上次停止的地方开始
上下文切换的过程
- 保存当前进程的上下文
- 恢复某个先前被抢占的进程被保存的上下文
- 将控制传递给这个新恢复的进程
而系统调用进行的是模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。
那么进程切换何时发生呢?
进程切换一定发生在中断/异常/系统调用处理过程中,常见的有以下情况:
1、阻塞式系统调用、虚拟地址异常。
导致被中断进程进入等待态。
2、时间片中断、I/O中断后发现更改优先级进程。
导致被中断进程进入就绪态。
3、终止用系统调用、不能继续执行的异常。
导致被中断进程进入终止态。
但是并不意味着所有的中断/异常都会引起进程切换。
有一些中断/异常不会引起进程状态转换,不会引起进程切换,只是在处理完成后把控制权交还给被中断进程。
以下是处理流程:
1、(中断/异常等触发)正向模式切换并压入PSW/PC 。
2、保存被中断进程的现场信息。
3、处理具体中断、异常。
4、恢复被中断进程的现场信息。
5、(中断返回指令触发)逆向模式转换并弹出PSW/PC。