1. 线程的转化
线程的状态转化只关注三种状态
运行态,阻塞态,就绪态
线程的状态转化与进程状态转化类似。
2. 线程的组织与控制
线程通过TCB(线程控制块来组织维护),线程控制块的结构如下:
发生线程切换时,需要保存的信息如上图(括号内)
多个线程组合起来形成线程表,线程表的组织可以又多种。取决于具体的操作系统
3. 处理机调度的概念与层次
调度: 由于资源优先,任务无法同时被执行,需要确定某种规则来决定任务处理顺序。
作业: 一个具体的任务
处理机调度的三个层次
- 高级调度:(作业调度)按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。(多个程序要启动,先启动哪一个,外存->内存)
- 低级调度:(进程调度、处理机调度)按照某种策略从就绪队列中选取一个进程,将处理机资源分配给它。操作系统最基本的调度(内存->CPU,面向进程)
- 中级调度:(内存调度)按照某种策略决定将哪个处于挂起状态的进程重新调入内存。(外存->内存,面向进程)
如果计算机内存不足时,会考虑先将一部分进程从内存调出外存。等内存空闲时再重新调回内存。
暂时调到外存等待的进程状态为挂起状态。被挂起的进程PCB会被组织成挂起队列
进程的挂起态与七状态模型
暂时调到外存等待的进程状态为挂起状态(挂起态)挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态。
挂起与阻塞的区别:
两种状态都是暂时不能获得CPU的服务,但挂起态是将进程映像调到外存去了,而阻塞态下进程映像还在内存中。
4. 低级调度(进程调度)
进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。
进程调度时机
当前CPU运行的进程主动放弃CPU
- 进程正常结束
- 运行过程中因为异常终止
- 进程等待某种资源主动进入阻塞态。
当前进程被动放弃CPU
- 进程时间片到
- 优先级更高的进程进入就绪队列
- 中断等
需要注意:
-
在处理中断的过程中,中断处理过程复杂,期间不能进行进程的调度。
-
进程在操作系统临界区时不能进行进程调度。
临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。
内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成) -
原子操作时不能进行进程调度。
进程调度方式
非剥夺式:(非抢占式)只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
剥夺式:(抢占式)当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。
剥夺式进程调度方式可以让进程以时间片轮转的方式来进行调度,同时也具备优先处理任务的能力。
进程调度与进程切换的区别:
狭义上讲:
- 进程调度指的是从就绪队列中选中一个要运行的进程。(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换)
- 进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程。
广义上讲: - 进程调度包含了选择一个进程和进程切换两个步骤。
注意:
进程切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少。