2.1 处理器
一、寄存器
寄存器与操作系统的关系——处理器现场管理
- 处理器属于分时复用型的共享资源,其中的寄存器被操作系统和各个进程所共享,任意瞬时的寄存器内容构成处理器工作现场。
- 当进程或任务发生切换时,寄存器内容必须被保存,以便进程或任务恢复执行时,还原处理器工作现场。
寄存器类型
寄存器在处理器与内存及I/O设备之间的通信作用
二、指令系统、特权指令与非特权指令
1.指令分类
①数据传输类:完成处理器与存储器之间、处理器与I/O设备之间的数据传送操作
②数据处理类:完成运算器对数据的算术操作、逻辑操作等计算功能
③控制类指令:改变指令执行顺序以及控制资源的使用权限
2.特权指令与非特权指令
三、处理器状态及切换
1.处理器状态(处理器运行模式)分类
2.实际处理器的状态(运行模式)数目
Intel Pentium处理器状态(保护级别)的另一种描述形式
Intel Pentium处理器状态(保护级别)的工作原理:程序本身的保护级别限制了它所能够执行的指令集;限制了它所能调用的其它过程集;
2.处理器状态之间的转换
(1)用户状态向管理状态的转换
(2)管理状态向用户状态的转换
执行加载程序状态字LPSW(Load PSW)指令,处理器由执行操作系统指令的管态切换为执行用户程序的用户态。
Intel Pentium提供的中断返回指令为IRET
四、程序状态字寄存器
1.程序状态字寄存器——处理器工作状态的记录者
- 处理器的工作状态记录在程序状态字(PSW)寄存器中;
- 每个正在执行的程序都有一个与其执行相关的PSW;
- 每个处理器都设置一个程序状态字寄存器。
进程与程序状态字之间的一一对应关系
2.程序状态字寄存器的主要内容
3.Intel Pentium程序状态字寄存器的组成
2.2 中断
一、中断概念
中断是指程序执行过程中,当发生某个事件时,中止CPU上现行程序的运行,引出处理该事件的程序执行的过程。
中断的重要用途:中断是改变指令执行流程、实现操作系统并发多任务功能的重要硬件机构,也是操作系统实现计算机控制的重要途径
检测中断的时机:在每两条指令或某些特殊指令执行期间
中断源:是引起中断的事件
中断装置:是发现中断源并产生中断的硬件
中断机制的重要特征:当中断事件发生后,它能改变处理器内操作执行的顺序。
二、中断源分类
1.从中断事件的性质和激活的手段进行分类
强迫性中断事件
强迫性中断事件不是正在运行的程序所期待的,而是由于随机发生的某种事故或外部请求信号所引起的。正在运行的程序不可预知强迫性中断事件发生的时机。
强迫性中断演示——进程被迫中断
自愿性中断事件
自愿性中断事件是正在运行的程序所期待的事件。这种事件由程序执行访管指令而引发,表示用户进程请求操作系统服务。
自愿性中断演示——进程主动中断
2.按照中断信号的来源对中断源分类
外中断:是指来自处理器和主存之外的中断
内中断:是指来自处理器和主存内部的中断
中断和异常的区别
中断和异常的区别总结
- 对于正在执行的程序(进程)来说,异常是现行程序主动发出的,目的是请求操作系统提供服务;
- 中断不是现行程序主动发出的,而是由其它资源主体发出的,中断处理程序提供的服务一般不是现行程序需要的
3.硬中断与软中断
- 硬中断:由硬件设施产生的中断信号;硬中断发生时会立刻响应
- 软中断:利用软件模拟产生的中断信号,用于实现内核与进程或进程与进程之间的通信;接收软中断的进程运行时才能响应
硬中断与软中断的发出者及接收者
三、中断处理
中断处理系统组成
1.硬件中断装置处理过程
硬件中断装置处理过程实例——设备I/O操作完成后中断装置的典型操作
2.软件中断处理程序
3.中断处理程序入口地址的寻找
中断为操作系统控制计算机系统提供了机会
中断使得处理器在进程和操作系统之间频繁的来回切换,但是处理器的控制权掌握在操作系统手中,而不是进程手中。
中断也提供了任务切换的机会
问题1:在系统中只有一个进程运行时,该进程会不间断地运行吗?
答:该进程不可能会不间断的运行,因为操作系统中还有系统功能调用处理程序,时钟中断处理程序,进程结束系统功能调用处理程序,会发生中断
问题2:在系统中没有任何进程运行时,操作系统在干什么?系统会静止吗?
答:操作系统在等待服务程序和时钟中断处理程序之间切换,系统不会静止
中断也像刹车,可以使用户程序及系统程序适时停止运行,以便重新分配系统资源,尤其是处理器资源,避免某些程序过长时间地垄断系统资源,破坏系统资源使用的公平性。
中断犹如计算机系统的心脏,无论何时不能停止跳动,否则,计算机系统将失去驱动力。
2.3 进程及其实现
一、引入进程概念的必要性
进程与程序是两个不同的概念
进程与程序都包含程序,但是程序是静态的,进程是动态的
同一个程序在一段时间内可以同时存在多个执行活动(即进程)分别对不同的数据进行处理
比如:
图中是两个记事本程序吗?
是两个相同的记事本程序还是不相同的两个记事本程序?
同一个记事本程序存在两个进程分别用于编写不同的两个文件
同样的程序做不同的事情,每一件事情对应一个进程
两件事情对应一个程序,“程序”这个名字已经无法将两件事情区分开来。
进程与程序容易混淆的原因总结:
1.两者主体内容几乎完全相同,程序与进程的主体几乎完全由相同的指令代码及数据空间组成,进程的指令代码及数据空间派生自程序;
2.两者在相同的介质上存在或活动,共存于计算机系统中,均可存放在外存和内存上。
二、进程定义和属性
1.进程的概念
进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位
2.进程的属性
(1)结构性
(2)共享性——同一程序运行于不同数据集合上构成不同的进程
(3)动态性——进程的内容(主要是数据)是动态的,随着指令的执行而变化;程序的内容是固定的。
4.独立性——进程是系统中资源分配和保护的基本单位,也是系统调度的独立单位。
合法的用户程序段应该属于某个进程,脱离任何进程的非操作系统程序段不被操作系统所感知,因而也无法作为资源分配和保护的单位以及处理器调度的单位。
(5)制约性——并发进程之间存在同步、互斥关系;
- 同步:存在协作关系的一个进程在某些执行点需要等待另一个进程发来的同步信号;
- 互斥:共享某些资源的进程需要依次排队使用这些资源。
(6)并发性——在单处理器系统环境下,各个进程轮流占用处理器,即交替、穿插使用处理器。
三、进程状态与切换
为什么要对进程划分状态?
系统中可以有非常多的进程,每个进程的执行都是走走停停,不是一贯到底的。
进程至少可以划分“走”和“停”两大类状态。“停”的状态又可根据“停”的原因细分。
划分进程状态对于简洁、条理地分类管理进程、合理调度系统资源非常必要。
1.三态模型
进程创建后,就处于就绪状态
2.五态模型
3.七态模型
(1)挂起——将进程从内存对换到外存,暂不参与进程调度,起到平滑系统负荷的目的。
(2)引起进程挂起的主要原因
①系统中的进程均处于等待状态
②系统负荷过重
③用户或者父进程挂起自己创建的进程,以便调试、检查和改正
④操作系统挂起进程,以便检查资源使用情况,或者排除故障
(3)引起进程状态转换的具体原因
(4)挂起进程的特征
①挂起进程不能立即被执行
②进程的挂起者可以是操作系统、父进程或进程自身
③结束进程挂起状态的命令只能由操作系统或父进程发出
④挂起进程所等待的事件独立于挂起条件,事件结束并不能导致进程具备执行条件
四、进程描述
1.操作系统的控制结构
操作系统的控制结构是控制进程、管理系统资源的数据结构,同样类型的数据结构组成表,称为控制表。
进程控制表
内存表、I/O表和文件表与进程表关联,以便操作系统跟踪进程对资源的使用情况。
2.进程实体(进程映像)的组成
(1)进程控制块(PCB)
每一个进程都捆绑一个进程控制块
PCB用途:标志信息、现场信息、控制信息
PCB创建于撤销时机:进程创建时建立进程控制块,进程撤销时回收进程控制块,进程控制块与进程一一对应
(2)进程程序块
即被执行的程序,规定了进程一次运行应完成的功能。
程序块通常是纯代码,可被多个进程共享。
纯代码:在执行时本身不会发生改变的程序,这样的程序可被多个程序同时调用。调用它的所有程序需自备工作区。
(3)进程数据块
进程数据块是进程的私有地址空间,是程序运行时加工处理的对象。
(4)进程核心栈
每一个进程都将捆绑一个核心栈,进程在核心态工作时使用。
进程映像:进程实体的内容随着进程的执行不断发生变化,某时刻进程实体的内容及其状态集合称为进程映像。(类似快照)
3.进程上下文
进程上下文(context)——进程物理实体和支持进程运行的环境合称为进程上下文。
UNIX进程上下文
4.进程控制块(PCB)
进程组成:
- 进程控制块
- 程序块
- 数据块
- 核心栈
进程控制块用途
①记录和刻划进程状态及有关信息的数据结构
②掌握进程的唯一资料结构
③控制和管理进程的主要依据
④是进程存在的唯一标识
⑤每个进程都有且只有一个进程控制块
⑥包括进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息。
进程控制块中的指针连接关系
进程控制块的使用权和修改权
进程控制块的使用权和修改权属于操作系统程序,包括:
- 调度程序
- 资源分配程序
- 中断处理程序
- 性能监视和分析程序
5.进程队列及其管理
进程队列:处于同一状态的所有PCB链接在一起的数据结构称为进程队列。
进程队列排队原则:
- 同一状态进程的PCB按先来先到、优先数或其它原则排成队列
- 等待态进程队列按照等待原因细分为多个队列
进程队列结构
进程状态转换与队列管理
五、进程切换
进程切换:进程切换即中断一个进程的执行转而执行另一个进程。
进程切换时系统需要完成的处理工作:需要完成进程上下文切换,即保存被中断进程上下文到其进程控制块中,然后装入新进程上下文,使其从上次断点恢复执行,或者调度一个新的进程。
1.允许发生进程上下文切换的4种情况(即进程调度时机)
(1)当进程进入等待态时;
等待了就把处理器等资源让出来去一边等待,别占着资源等待,进程切换由此发生。
(2)当进程完成其系统调用返回用户态,但不是最有资格获得CPU时;
既然一个进程不是最有资格获得CPU的进程,那么就把处理器分配给最有资格获得它的进程,进程切换由此发生。
(3)当内核完成中断处理,进程返回用户态但不是最有资格获得CPU时;(情况分析类似于(2))
(4)当进程执行结束时。
既然进程执行结束了,不再需要处理器等资源了,这些资源理应分配其它需要的进程,进程切换(包含进程创建)由此发生。
2.Linux进程调度时机
3.进程切换的步骤
六、模式切换
模式切换:CPU模式切换即处理器管态(核心态)与目态(用户态)之间的切换。
模式切换的步骤
进程切换
七、进程控制与管理
原语是在管态下执行、完成系统特定功能的不可中断的过程,具有原子操作性。
原语的执行不可中断
原语的执行是顺序的而不可能是并发的
原语的实现方法及其与系统调用的区别:
原语可以采用屏蔽中断的系统调用来实现,以保证原语操作不被打断的特性。
即原语和系统调用都使用访管指令实现,具有相同的调用形式。
但普通系统调用可以被中断,原语不可中断。
1.进程的创建
进程创建的事件来源:
- 提交一个批处理作业——批处理用户
- 交互式作业登录——联机用户
- 操作系统创建一个服务进程——系统程序
- 存在的进程(父进程)创建(孵化)新的进程(子进程)——用户程序
进程的创建过程
①在主进程表中增加一项,并从PCB池中取一个空白PCB,为新进程分配唯一的进程标识符
②为新进程的进程映像分配地址空间,装入程序和数据。
③为新进程分配内存空间外的其它资源
④初始化进程控制块,如进程标识符、处理器初始状态、进程优先级等
⑤把进程状态置为就绪态并加入就绪进程队列
⑥通知操作系统的某些模块,如记账程序、性能监控程序
进程创建涉及到的实体(数据结构或程序)
2.进程的阻塞和唤醒
进程阻塞:进程阻塞是指一个进程让出处理器,去等待一个事件。
进程阻塞的步骤
①停止进程执行,保存现场信息到PCB
②修改PCB的有关内容,如进程状态由运行改为等待,并把修改状态后的PCB加入相应等待队列
③转入进程调度程序调度其他进程运行
进程唤醒的步骤
①从相应等待队列中移出进程
②修改进程PCB有关信息,如进程状态改为就绪并把修改PCB后的进程加入就绪队列
③若被唤醒进程优先级高于当前运行进程,则重新设置调度标志
3.进程的撤销
进程撤销的主要原因
- 进程正常运行结束
- 进程执行了非法指令、在常态下执行了特权指令
- 进程运行时间或等待时间超越了最大限定值
- 进程申请的内存超过最大限定值
- 越界错误、算术错误、严重的输入输出错误
- 操作员或操作系统干预
- 父进程撤销其子进程、父进程撤销、操作系统终止
进程撤销的步骤
①根据撤销进程标识号,从相应队列找到它的PCB
②将该进程拥有的资源归还给父进程或操作系统
③若该进程拥有子进程,则先撤销它的所有子孙进程,以防它们脱离控制
④撤销进程出队,将它的PCB归还到PCB池
4.进程的挂起和激活
挂起原语执行过程:
检查要被挂起进程的状态,若处于活动就绪态就修改为挂起就绪态,若处于阻塞态,则修改为挂起阻塞态。
被挂起进程PCB的非常驻部分要交换到磁盘对换区。
激活原语主要处理过程:
把进程PCB非常驻部分调进内存,修改它的状态,挂起等待态改为等待态,挂起就绪态改为就绪态,加入相应队列中。
挂起原语既可由进程自己也可由其他进程调用,但激活原语只能由其它进程调用。
八、Linux进程控制实验
1.使用kill杀死进程,使用sleep使进程自己睡眠,使用waitpid等待子进程结束。
2.获取进程标识符信息
3.注意观察父子进程执行的时序关系
2.4 线程及其实现
一、多线程的引入
计算成本、计算效率原因驱使
有时需要把分布在不同进程中、由不同进程承担的任务(即多进程任务)整合到一个进程中,把运行在多个进程中的并发任务转变为运行在同一个进程中的并发任务(即多线程任务),这样能够降低计算成本、提高计算效率。
线程概念的引入——任务分解整合的结果
- 运行在同一个进程中的各个并发任务称为该进程的线程。
- 每个线程分别是进程中的一个执行流。
- 线程代表从进程划分出来的更小的任务单元。
- 在多线程进程中,进程是系统进行资源分配的基本单位,线程是处理器调度的基本单位。
传统进程的特征
- 传统进程中只有一个执行流,属于单线程进程,进程所代表的任务仅由一个执行流承担。
- 在单线程进程中,进程既是系统进行资源分配的基本单位,也是处理器调度的基本单位,两者合二为一。
多进程任务向多线程任务演变的形式1——任务整合
多进程任务向多线程任务演变的形式2——任务分解
多线程进程的应用
二、多线程环境中的进程与线程
1.多线程环境中的进程
在多线程环境中,进程被定义为资源分配和保护的单位,多线程进程不再作为处理器调度和分派的基本单位,线程不是资源分配和保护的基本单位,而是处理器调度和分派的单位。
单线程和多线程进程实体结构
2.多线程环境中的线程
线程是进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。
3.线程的状态及进程级状态
线程的关键状态有:运行、就绪、阻塞
进程级状态:挂起
线程状态与进程状态之间的某些关系
4.线程的控制
(1)创建
- 进程创建时系统会缺省创建并启动一个线程
- 已经启动的线程可以再创建和启动同一进程中的其它线程。
(2)阻塞——即等待,暂停线程执行
(3)恢复——被阻塞线程等待的事件发生时,线程变成就绪态或相应状态
(4)结束——线程终止,撤销线程
5.并发多线程程序设计的优点
(1)切换速度快、切换开销小
(2)易于实现任务间的通信协作
(3)提高并发度
三、多线程实现方法
1.用户级线程
(1)用户级线程实现原理
用户级线程是在一个进程内部实现了类似进程调度、进程切换功能的一层进程内多任务应用支持软件。
用户级线程不是由操作系统提供的,因而,操作系统不参与用户级线程的调度。
(2)用户级线程的优点
①线程切换不需要内核特权方式
②针对不同进程按需选择不同的线程调度算法
③用户级线程可以运行在任何操作系统上,不需对内核做任何改造
(3)用户级线程的缺点
①线程执行系统调用时,不仅该线程被阻塞,且进程内的所有线程均被阻塞。
②纯用户级线程不能利用多处理器技术
2.内核级线程
(1)内核级线程实现原理
内核级线程是在操作系统内核层对进程实现的多线程功能,操作系统以线程作为处理器调度和分派的基本单位
(2)内核级线程主要优点
①内核可以同时把同一进程中的多个线程调度到多个处理器上并行执行;
②进程中的一个线程被阻塞了,内核能调度同一进程的其它就绪线程运行;
③内核线程数据结构和堆栈小,切换速度快,内核自身也可采用多线程技术实现,提高系统执行速度和效率。
3.混合式线程
某些操作系统提供了同时支持用户级线程与内核级线程的混合式线程设施,线程的创建、调度和同步在用户空间进行。
一个应用程序中的多个用户级线程被映射到一些(小于或等于用户级线程的数目)内核级线程上。
混合式线程原理示意
四、Linux多线程实验1: 无共享变量多线程随机并发运行实例
无并发互斥、无共享变量的多线程运行试验
五、Linux多线程实验2: 有共享变量、结果不唯一的多线程并发运行实例
有共享变量、无并发互斥的多线程运行试验
六、 Linux多线程实验3:多线程共享资源并发访问控制
有并发互斥的多线程运行试验设计方案
2.5 处理器调度系统
三级调度
从系统接收到运行结束退出系统为止,作业可能要经历三级调度过程,即:
一、高级调度
- 高级调度从磁盘后备作业队列中挑选若干作业进入内存,为其分配资源,创建进程;作业完成后还要做善后处理工作。
- 高级调度根据CPU空闲时间控制多道程序的道数,每当作业结束后,补充装入新的作业到内存。
- 高级调度配置在批处理系统或者操作系统的批处理部分中。
二、中级调度
- 中级调度决定哪些进程参与竞争处理器资源,途径是把一些进程换出主存,使之进入“挂起”状态,不参与进程调度;或者将进程对换到内存,解除挂起状态。
- 中级调度起到平滑和调整系统负荷的作用,提高主存利用率和系统吐吞率。
三、低级调度
- 低级调度的主要功能是按照某种原则决定就绪队列中的哪个进程或内核级线程获得处理器,并将处理器出让给它进行工作。
- 低级调度程序是操作系统最为核心的部分,执行十分频繁。
- 低级调度策略的优劣直接影响到整个系统的性能。
- 中断是执行低级调度的时机
三级调度配置情况
- 低级调度是各类操作系统必须具有的功能;
- 在纯粹的分时或实时操作系统中,通常不需要配备高级调度,而仅配置低级调度;
- 一般的操作系统都配置高级调度和低级调度;
- 引进中级调度有利于提高主存利用率和作业吞吐量
四、选择调度算法的原则
选择调度算法的原则
①资源利用率
②吞吐率
③公平性
④响应时间
⑤周转时间
(1)资源利用率
CPU利用率 = CPU有效工作时间 / CPU总的运行时间
CPU总的运行时间 = CPU有效工作时间 + CPU空闲等待时间
(2)吞吐率
吞吐率是单位时间内CPU处理的作业数
(3)公平性
调度算法要确保每个用户每个进程获得合理的CPU份额或其他资源份额,不会出现饥饿现象。
(4)响应时间
交互式进程从提交一个请求到接收到响应之间的时间间隔称为响应时间。
响应时间 = 命令传输到CPU的时间 + CPU处理命令的时间 + 处理结果返回终端的时间
(5)周转时间
批处理用户从作业提交给系统开始,到作业完成为止的时间间隔称为作业周转时间。
周转时间 = 作业在后备队列等待时间 + 作业进程在就绪队列等待时间 + 进程在CPU上运行时间 + 等待事件(在等待队列)时间
周转时间
平均周转时间
带权周转时间
平均带权周转时间
五、操作系统中的任务调度单位——作业、进程和线程
任务单位:作业、进程和线程是操作系统中不同级别的任务单位。
作业和作业步:作业对应一个完整的业务处理过程,该过程包含若干个相对独立又相互关联的顺序加工步骤,每个加工步骤称为一个作业步。
进程或线程对应一个作业步的处理过程。
任务单位分解关系
作业实例——一个完整业务处理过程:开发和运行程序
六、批处理作业的组织和管理
(1)批处理作业的组成结构
(2)批处理作业的创建
多道批处理操作系统的作业管理模块为每一个作业建立作业控制块(JCB)。
批作业进入系统时,Spooling系统建立JCB,它是作业存在于系统的标志,作业撤离时,JCB也被撤销。
作业控制块的内容
①作业情况(用户名、作业名、语言名)
②资源需求(估计CPU运行时间、最迟截止期、主存量、设备类型/台数、文件数和数据量、函数库/实用程序等)
③资源使用情况(进入系统时间、开始运行时间、己运行时间),作业控制(优先数、控制方式、操作顺序、出错处理等)、作业类型(CPU繁忙型、I/O繁忙型、批量型、终端型)等信息。
(3)批处理作业的调度
七、交互型作业的组织和管理
- 操作系统启动时,为连接至系统的每个终端创建一个终端进程,该进程接收用户输入的交互型命令、解释和执行命令。
- 用户输入退出命令则结束本次上机过程。
2.6 处理器调度算法
一、低级调度的主要功能
处理器调度算法的功能:
处理器调度算法是对一批进程或者线程确定处理器分配顺序的方法,即在众多进程或者线程中,当前选择哪个进程或者线程运行
处理器调度算法执行的时机
低级调度的主要功能:
1.调度:调度实现进程/线程选择算法,选中者获得处理器。
2.分派:分派实现处理器的分配和绑定工作,将处理器分配给被选中的进程或线程,处理进程或线程上下文交换细节。
二、调度机制的逻辑功能模块
1.队列管理程序:进程/线程状态变化时,该进程/线程被加入不同队列。
2.上下文切换程序:负责进程/线程上下文切换。
3.分派程序:从就绪队列中选择下个运行的进程/线程。
三、低级调度的基本类型
1.剥夺方式:剥夺是有条件执行下去,但被迫放弃处理器
高优先级剥夺原则和时间片剥夺原则
2.非剥夺方式:非剥夺是因自身原因无法执行下去,主动放弃处理器
一旦某个进程或线程开始执行便不再出让处理器,除非该进程或线程运行结束或发生了某个事件不能继续执行。
剥夺和非剥夺调度各自适用的资源:
四、作业调度和低级调度算法
作业调度和低级调度算法执行的时机:
1.先来先服务算法(FCFS):先进入系统的作业优先被挑选。
FCFS算法举例:设三个作业到达系统的时刻和所需CPU时间如表所示:
三个作业的调度时序如图所示:
2.最短作业优先算法(SJF):最短作业优先算法选取估计计算时间最短的作业投入运行
SJF算法举例:设四个作业到达系统的时刻和所需CPU时间如表所示:
四个作业的调度时序如图所示:
3.最短剩余时间优先算法(SRTF):最短剩余时间优先算法是剥夺式的最短时间优先调度算法。如果新作业需要的CPU时间比当前正在执行的作业剩余所需CPU时间短,新作业将抢占当前作业的处理器。
SRTF算法举例:设四个就绪作业到达系统和所需CPU时间如表所示:
四个作业的调度时序如图所示:
4.响应比最高者优先算法(HRRF)
响应比最高者优先算法选择等待时间和需要CPU时间都较短的作业优先调度,非剥夺调度
响应比 = 作业的响应时间 / 作业处理时间 = 1 + 已等待时间 / 作业处理时间
作业处理时间由用户给出,是一个常量
HRRF算法举例:如下表所示的四个作业先后到达系统进入调度:
响应比的计算和作业调度过程:
5.优先级调度算法
优先级调度算法根据确定的优先级选取进程/线程,每次总是选择就绪队列中优先级最高者运行。
用户进程/线程优先级的规定者有两种:
(1)用户:用户自己提出优先级,称为外部指定法。优先级越高,费用越高。
(2)系统:由系统综合考虑有关因素来确定用户进程/线程的优先级,称为内部指定法。
根据优先级是否随时间而变,进程/线程优先级的确定有静态和动态两种方式。
(1)静态优先级在进程/线程创建时确定,此后不再改变。
(2)动态优先级随时间而变,基本原则是:
①正在运行的进程/线程随着占有CPU时间的增加优先级逐渐降低;
②就绪队列中等待CPU的进程/线程随着等待时间增加优先级逐渐提高。
6.轮转调度算法
(1)算法思想
调度程序每次把CPU分配给就绪队列首进程/线程使用一个时间间隔(称为时间片),就绪队列中的每个进程/线程轮流运行一个时间片。
(2)实现原理
实现轮转调度要使用一个间隔时钟。当一个进程开始运行时,将时间片的值置入间隔时钟内,当发生间隔时钟中断时,中断处理程序就通知处理器调度程序切换处理器。
(3)常用轮转法
- 最常用的轮转法是等时间片轮转法,每个进程轮流运行相同时间片。
- 改进的轮转法对于不同的进程分配不同的时间片,时间片的长短可以动态修改。
(4)时间片的选取
时间片大小的确定要从进程个数、切换开销、系统效率和响应时间等方面考虑。
7.多级反馈队列调度算法(反馈循环队列或多队列策略)
建立两个或多个就绪进程队列,每个队列赋予不同优先级,较高优先级队列一般分配给较短的时间片。
处理器调度每次先从高优先级就绪队列中选取可占有处理器的进程,只有在选不到时,才从较低优先级就绪队列中选取进程。
同一队列中的进程按先来先服务原则排队。
三级反馈队列调度模型