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



相关文章
|
1天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
15 4
|
1天前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
9 2
|
1天前
|
消息中间件 算法 Linux
深入理解操作系统之进程管理
【10月更文挑战第30天】在数字时代的浪潮中,操作系统作为计算机系统的核心,扮演着至关重要的角色。本文将深入浅出地探讨操作系统中的进程管理机制,从进程的概念入手,逐步解析进程的创建、调度、同步与通信等关键过程,并通过实际代码示例,揭示这些理论在Linux系统中的应用。文章旨在为读者提供一扇窥探操作系统深层工作机制的窗口,同时激发对计算科学深层次理解的兴趣和思考。
|
2天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
2天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度策略
【10月更文挑战第29天】本文将带领读者深入探讨操作系统中的核心组件之一——进程,并分析进程管理的重要性。我们将从进程的生命周期入手,逐步揭示进程状态转换、进程调度算法以及优先级调度等关键概念。通过理论讲解与代码演示相结合的方式,本文旨在为读者提供对进程调度机制的全面理解,从而帮助读者更好地掌握操作系统的精髓。
10 1
|
2天前
|
算法 调度 UED
深入理解操作系统中的进程调度
【10月更文挑战第29天】探索进程调度的奥秘,本文将带你深入了解在操作系统中如何管理和控制多个并发执行的程序。从简单的调度算法到复杂的多级反馈队列,我们将逐步揭示如何优化系统性能和提高资源利用率。准备好一起揭开进程调度的神秘面纱吧!
|
2天前
|
算法 调度 开发者
探索操作系统的核心:进程管理与调度
【10月更文挑战第29天】本文深入探讨了操作系统中至关重要的一环——进程管理。通过浅显易懂的语言,我们将了解到什么是进程,进程如何被创建和管理,以及操作系统如何决定哪个进程应该获得CPU时间。文章还将揭示进程调度对系统性能的影响,并分享一些优化技巧。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识。
|
27天前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
38 1
C++ 多线程之初识多线程
|
11天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
12 3
|
11天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
10 2