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



相关文章
|
17天前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第16天】进程、线程和协程是计算机程序执行的三种基本形式。进程是操作系统资源分配和调度的基本单位,具有独立的内存空间,稳定性高但资源消耗大。线程是进程内的执行单元,共享内存,轻量级且并发性好,但同步复杂。协程是用户态的轻量级调度单位,适用于高并发和IO密集型任务,资源消耗最小,但不支持多核并行。
35 1
|
1天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
3天前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
13 2
|
5天前
|
调度 Python
深入浅出操作系统:进程与线程的奥秘
【10月更文挑战第28天】在数字世界的幕后,操作系统悄无声息地扮演着关键角色。本文将拨开迷雾,深入探讨操作系统中的两个基本概念——进程和线程。我们将通过生动的比喻和直观的解释,揭示它们之间的差异与联系,并展示如何在实际应用中灵活运用这些知识。准备好了吗?让我们开始这段揭秘之旅!
|
15天前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
18天前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第15天】进程、线程和协程是操作系统中三种不同的执行单元。进程是资源分配和调度的基本单位,每个进程有独立的内存空间;线程是进程内的执行路径,共享进程资源,切换成本较低;协程则更轻量,由用户态调度,适合处理高并发和IO密集型任务。进程提供高隔离性和安全性,线程支持高并发,协程则在资源消耗和调度灵活性方面表现优异。
42 2
|
9天前
|
Linux 调度
探索操作系统核心:进程与线程管理
【10月更文挑战第24天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是计算机硬件与软件之间的桥梁,更是管理和调度资源的大管家。本文将深入探讨操作系统的两大基石——进程与线程,揭示它们如何协同工作以确保系统运行得井井有条。通过深入浅出的解释和直观的代码示例,我们将一起解锁操作系统的管理奥秘,理解其对计算任务高效执行的影响。
|
3天前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
12 0
Vanilla OS:下一代安全 Linux 发行版
|
6天前
|
人工智能 安全 Linux
|
26天前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。