409操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(二)

简介: 409操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁

2.处理机调度

2.1.调度的概念、层次

1.调度:处理机有一堆程序需要处理,根据某种规则决定处理的顺序

2.调度的三个层次:

①高级调度(作业调度):从外存的作业中选择一个作业调入内存,并创建进程;每个作业只调入和调出一次;调入时建立PCB,调出时撤销PCB

②低级调度(进程调度/处理机调度):从就绪队列中选择一个进程上处理机;频率很高

③中级调度(内存调度):将处于挂起状态进程重新调入内存

挂起状态:内存不够,将某些进程的数据调入外存79aa6187b398407c97e6b043e34158b8.png

2.2.进程调度的时机、切换与过程、方式

2.2.1.进程调度的时机

1.正在运行的进程主动请求:①正常终止 ②发生异常终止 ③请求阻塞

2.正在运行的进程被动放弃:①时间片用完 ②更紧急事件需要处理(I/O中断等) ③更高优先级进程进入就绪队列

3.不能进行调度的时机:①处理中断的过程中 ②操作系统内核临界区中 ③原子操作过程中

4.临界资源:一段时间内只允许一个进程使用的资源互斥访问

临界区:访问临界资源的代码(各个进程需要互斥的进入临界区)

内核程序临界区一般用来访问某种内核的数据结构:例如进程的就绪队列

5.设进程A处于内核程序临界区,并且该临界区访问的是进程的就绪队列,在访问前进程A将会将就绪队列上锁(达到互斥访问的效果);此时若发生进程调度,就需要访问就绪队列,但是就绪队列被A上锁,因此无法发生进程调度——因此,进程在操作系统内核临界区中不能进行调度和切换

6.本质上是若进程访问的是操作系统内核的临界区,操作系统希望进程能够尽快的完成访问操作,从而不影响操作系统的正常工作,因此,通过不允许进程调度和切换的方式达到这一目的;而若进程访问的是慢速I/O设备,即不会影响操作系统的情况下,就允许进行进程调度和切换并且还有一个角度可以解释,即此情况下若不允许进行进程的调度和切换,将会严重影响操作系统的运行效率,其他进程需要等待此慢速I/O设备的完成

2.2.2.进程调度的切换过程

1.狭义的进程调度:从就绪队列中选择一个要运行的进程

广义的进程调度:①选择一个进程 ②进程切换

2.进程切换:一个进程让出处理机,另一个进程使用处理机

进程切换的过程:①对原进程各种数据的保存 ②对新进程各数据的恢复

进程切换带有系统开销,频繁的进程切换将会导致系统效率降低

2.2.3.进程调度的方式

1.非剥夺调度方式(非抢占式):只允许进程主动放弃处理机

缺点:无法及时处理紧急事件

2.剥夺调度方式(抢占式):进程可以被更高优先级的进程剥夺处理机使用权

优点:可以优先处理紧急事件,并且可以实现进程按时间片轮流执行74e381a88f094675964389f0e9058b83.png

2.3.调度器和闲逛进程

2.3.1.调度器/处理程序

1.调度器/调度程序是操作系统的一个程序模块

2.①就绪态→运行态:被调度程序选中

②运行态→就绪态:时间片用完

①和②的状态的转换由调度程序完成

3.调度程序根据调度算法决定让哪个进程运行,根据时间片大小决定让该进程运行多长时间

4.调度时机,即什么事件会触发调度程序

①创建新进程:就绪队列发生改变,新进程若优先级更高,可能抢占处理机

②进程退出:进程退出导致处理机空闲,调度程序需要决定接下来让哪个进程上处理机运行

③正在运行的进程阻塞:阻塞导致处理机空闲,调度程序需要决定接下来让哪个进程上处理机运行

④I/O中断发生:某个之前处于阻塞态的进程转换到就绪态,就绪队列发生改变,该进程若优先级更高,可能抢占处理机

若是非抢占式调度策略,则仅②③会触发调度程序;抢占式,则每间隔若干个时钟周期就会触发一次调度程序(用于检查就绪队列是否有新进程出现)

2.3.2.闲逛进程

1.若就绪队列中没有其他进程,调度程序则选择闲逛进程上处理机运行

2.闲逛进程特点:①优先级 ②0地址指令(占用完成的指令周期,即带有中断周期,在中断周期例行唤醒调度程序,用来检查就绪队列中是否有新进程出现) ③能耗低

2.4.调度算法的评价指标

1.CPU利用率 = 忙碌时间 / 总时间

2.系统吞吐量 = 总共完成多少作业 / 总共花了多少时间(表示单位时间内完成作业的数量)

3.周转时间:指从作业被提交给系统开始到作业完成为止的时间

周转时间由四个部分组成:

①作业在外存中等待作业调度(高级调度)的时间

②进程在就绪队列上等待进程调度(低级调度)的时间(就绪态)

③进程在CPU上运行的时间(运行态)

④进程等待I/O操作完成的时间(阻塞态)

②③④可能发生多次,而①只会有一次

(1)周转时间 = 作业完成时间 - 作业提交时间

(2)平均周转时间 = 各作业周转时间之和 / 作业数

(3)带权周转时间 = 作业周转时间(即作业完成时间 - 作业提交时间) / 作业实际运行的时间

(4)平均带权周转时间 = 各作业带权周转时间之和 / 作业数

4.等待时间:作业/进程等待处理机时间之和

①对于进程:等待I/O完成的期间(阻塞态)也是在被服务的,因此不计入等待时间

②对于作业:不仅需要考虑作业建立进程后的等待时间,还要考虑调入内存前的等待时间

5.响应时间:从提出请求到首次响应的时间45443e08a265429eb8610d440dcb8fda.png

2.5.调度算法

2.5.1.先来先服务(FCFS)23c640481d764f3cb6b999b24b03f4a2.png52c530bc48e042fc84e4886514d56790.png421a3f7ef1c647b0bbb5acee6eb09b2f.png

2.5.2.短作业优先(Shortest Job First)0bae0eeb473048c096fdaad81a367a38.png

1.非抢占式短作业优先20c9ebda3f65402f92abbab80b275f72.png

2.抢占式短作业优先(最短剩余时间优先)755a7552c9204b4aa454c5d8d0ef0ec1.png445edb3aeae94fffa694bc77fb7e9706.pngimage.png

2.5.3.高响应比优先(Highest Response Ratio Next)

image.pngimage.png

2.5.4.时间片轮转调度算法(Round-Robin)

image.png

1.时间片大小为2:时间片设置太小将会导致频繁切换,从而系统开销增大

446d833de9264ddaafb715fdac6584ac.png

7f4967dbee914b4583fe4ab34be44b92.png

image.png

2.时间片大小为5:时间片选择太大,则会退化成FCFS算法

a98717a838f647c5918060e1c3929198.pngd714c2c3fbb747ca951d2afe7c2c87d8.png


2.5.5.优先级调度算法image.png

1.非抢占式:仅进程主动放弃处理机时调度896d70396d574b3ab7f2c64f9d4d91ca.png

2.抢占式:①进程主动放弃处理机时 ②就绪队列发生改变时

93de2ebe4848467e86fd1dc32c2e78b7.png

3.补充

cac2c89f3e62409a8474f637145dbf0c.png

2.5.6.多级反馈队列调度算法e4c159b5342a43e1a9a70729796e5c4c.png

1.P1(1):0时刻,P1到达,放入第一级队列,P1执行1个时间片后,放入第二级队列队尾

2.P2(1):1时刻,P2到达,放入第一级队列,P2执行1个时间片后,放入第二级队列队尾(第二级:P1→P2)

3.P1(2):2时刻,第一级队列为空,执行第二级队列的队首进程,P1执行2个时间片后,放入第三季队列队尾(第二级:P2;第三级:P1)

4.P2(1):4时刻,第一级队列为空,执行第二级队列的队首进程,P2执行1个时间片后,P3到达,P3优先级大于P2,P2被剥夺处理机的使用权,并放回第二级队列队尾(第二级:P2;第三级:P1)

5.P3(1):5时刻,P3到达,放入第一级队列,P3执行1个时间片后,P3进程结束,调出内存(第二级:P2;第三级:P1)

6.P2(2):6时刻,第一级队列为空,执行第二级队列的队首进程,P2执行2个时间片后,P2进程结束,调出内存(第三级:P1)

7.P1(4):8时刻,第一级、第二级队列为空,执行第三级队列的队首进程,P1执行4个时间片后,将P1重新放回第三级队列的队尾(第三级:P1)

8.P1(1):12时刻,第一级、第二级队列为空,执行第三级队列的队首进程,P1执行1个时间片后,P1进程结束,调出内存ccb8e38ee3ff4e7193d7777057328567.png

2.5.7.调度算法的对比9ec085d3a42343fbbb65b4b7c4871199.png5ac1326ca9724e33b9809baed9224e6e.png

2.5.8.多级队列调度算法

1.系统设置多个就绪队列,调度方式:①选中队列→②选中该队列中进程

2.选中队列的方式:①优先级高低 ②时间片轮转

3.每个队列中选中进程的方式可以不同e181cdd2da9a4ce98d57528672ce3da5.png



相关文章
|
算法 安全
操作系统中的死锁
【8月更文挑战第23天】
330 0
|
算法 Unix Linux
linux线程调度策略
linux线程调度策略
549 0
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
630 16
|
开发框架 Java .NET
.net core 非阻塞的异步编程 及 线程调度过程
【11月更文挑战第12天】本文介绍了.NET Core中的非阻塞异步编程,包括其基本概念、实现方式及应用示例。通过`async`和`await`关键字,程序可在等待I/O操作时保持线程不被阻塞,提高性能。文章还详细说明了异步方法的基础示例、线程调度过程、延续任务机制、同步上下文的作用以及如何使用`Task.WhenAll`和`Task.WhenAny`处理多个异步任务的并发执行。
408 1
|
存储 Java 数据处理
进程中的线程调度
进程是应用程序运行的基本单位,包括主线程、用户线程和守护线程。计算机由存储器和处理器协同操作,操作系统设计为分时和分任务模式。在个人PC普及后,基于用户的时间片异步任务操作系统确保了更好的体验和性能。线程作为进程的调度单元,通过覆写`Thread`类的`run`方法来处理任务数据,并由系统调度框架统一管理。微服务架构进一步将应用分解为多个子服务,在不同节点上执行,提高数据处理效率与容错性,特别是在大规模数据存储和处理中表现显著。例如,利用微服务框架可以优化算法,加速业务逻辑处理,并在不同区块间分配海量数据存储任务。
|
程序员 数据库
深入剖析操作系统死锁:不可不知的四大条件!
大家好,我是小米。今天探讨操作系统中的死锁问题——两个或更多进程因争夺资源陷入相互等待的状态。死锁有四个必要条件:互斥、请求与保持、非剥夺及循环等待。解决策略包括:使用乐观锁破坏互斥条件;资源一次性分配避免请求与保持;允许资源剥夺;以及采用资源有序分配法消除循环等待。通过这些方法,可以有效预防和解决死锁,提升系统稳定性和效率。希望本文能帮助你更好地理解并处理死锁问题!
689 4
|
安全 调度 C#
STA模型、同步上下文和多线程、异步调度
【10月更文挑战第19天】本文介绍了 STA 模型、同步上下文和多线程、异步调度的概念及其优缺点。STA 模型适用于单线程环境,确保资源访问的顺序性;同步上下文和多线程提高了程序的并发性和响应性,但增加了复杂性;异步调度提升了程序的响应性和资源利用率,但也带来了编程复杂性和错误处理的挑战。选择合适的模型需根据具体应用场景和需求进行权衡。
452 0
|
监控 安全 Java
Java中的线程调度与性能优化技巧
Java中的线程调度与性能优化技巧
|
算法 安全 调度
操作系统中的死锁、饥饿和优先级反转
【8月更文挑战第23天】
791 0
|
安全 算法 C++
操作系统---死锁相关
操作系统---死锁相关

热门文章

最新文章

推荐镜像

更多