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



相关文章
|
16天前
|
算法 调度 Python
深入理解操作系统:进程调度的奥秘
【8月更文挑战第4天】操作系统是计算机系统的核心,其中进程调度是其重要的组成部分。本文将深入探讨进程调度的原理和实现,包括进程调度的目标、常用的调度算法以及如何在实际中应用这些知识。我们将通过代码示例来展示进程调度的具体实现,帮助读者更好地理解和掌握这一关键技术。
|
6天前
|
算法 调度
操作系统中的进程管理与调度
【8月更文挑战第14天】在现代计算机系统中,操作系统扮演着至关重要的角色。它不仅负责管理硬件资源,还提供了进程管理的机制来协调多个程序的执行。本文将深入探讨操作系统如何通过进程管理与调度来优化资源使用和提高系统响应性。我们将从进程的概念出发,分析进程状态转换、进程调度算法及其对系统性能的影响。通过理解这些概念,读者将能够更好地把握操作系统的核心原理及其在实际场景中的应用。
|
10天前
|
Java 调度 开发者
Java并发编程:解锁多线程同步的奥秘
在Java的世界里,并发编程是提升应用性能的关键所在。本文将深入浅出地探讨Java中的并发工具和同步机制,带领读者从基础到进阶,逐步掌握多线程编程的核心技巧。通过实例演示,我们将一起探索如何在多线程环境下保持数据的一致性,以及如何有效利用线程池来管理资源。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你对Java并发编程有更深入的理解和应用。
|
19天前
|
算法 调度 Python
探索操作系统的心脏:深入理解进程调度
【8月更文挑战第1天】在数字世界的每一次跳动中,有一个不可见的手在操纵着一切——那就是进程调度。本文将带你穿梭于现代操作系统的核心,揭开进程调度机制的神秘面纱。通过直观的代码示例和详细的分析,我们将共同见证这一技术如何在微观层面影响宏观世界的运行。让我们开始这场深入操作系统内核的探险之旅吧!
|
20天前
|
算法 调度
探索操作系统的心脏:深入理解进程调度
【7月更文挑战第31天】在数字世界的脉络中,操作系统扮演着至关重要的角色,它如同一台精密的时钟,确保了计算资源的高效与有序。本文将通过浅显的语言和实例代码,带领读者走进操作系统的核心——进程调度。我们将一起探索它是如何在多任务环境中协调资源、管理进程,并保证系统的流畅运行。文章不仅阐释进程调度的基本概念,还将通过实际代码示例揭示其背后的原理,使读者对这一复杂机制有一个清晰的认识。
27 10
|
18天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级反转
【8月更文挑战第2天】在操作系统的心脏中,进程调度是维持多任务并发执行的关键机制。本文将通过一个简化的Python代码示例,揭示进程调度背后的逻辑,并探讨优先级反转现象及其对系统性能的影响。我们将从基础概念出发,逐步深入到进程调度算法的实现,最终讨论如何优化调度策略以提升系统响应性和效率。
|
20天前
|
算法 Linux 调度
深入理解操作系统:进程调度与优先级
【7月更文挑战第31天】在计算机科学中,操作系统是连接用户和硬件的桥梁。它管理着计算机的资源,并确保资源的公平分配。本文将深入探讨操作系统的一个重要组成部分——进程调度,以及如何通过优先级来优化系统性能。我们将通过代码示例,展示如何在Linux系统中实现一个简单的优先级调度算法。
24 4
|
5天前
|
Java UED
基于SpringBoot自定义线程池实现多线程执行方法,以及多线程之间的协调和同步
这篇文章介绍了在SpringBoot项目中如何自定义线程池来实现多线程执行方法,并探讨了多线程之间的协调和同步问题,提供了相关的示例代码。
32 0
|
5天前
|
NoSQL Redis
Lettuce的特性和内部实现问题之在同步调用模式下,业务线程是如何拿到结果数据的
Lettuce的特性和内部实现问题之在同步调用模式下,业务线程是如何拿到结果数据的
|
20天前
|
算法 调度 UED
深入理解操作系统之进程调度算法
【7月更文挑战第31天】在操作系统的设计中,进程调度是核心功能之一,它直接关系到系统性能和用户体验。本文将探讨几种常见的进程调度算法,并通过代码示例加深理解。我们将从理论到实践,一探究竟。
12 0