处理机调度——进程调度/作业调度算法

2024-03-13 12:38

本文主要是介绍处理机调度——进程调度/作业调度算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在多道程序系统中,主存中有着多个进程,其数目往往多于处理机数目,这就要求系统能按照某种算法,动态地将处理机分配给就绪队列中的某个进程,使之执行。
对于批量型作业而言,通常需要经历作业调度(又称为高级调度或长程调度)和进程调度(又称为低级调度或短程调度)两个过程后方能获得处理机;对于终端型作业,通常只需要经过进程调度即可获得处理机。

高级调度的对象是作业,作业和进程是不同的东西。 作业是一个更为广泛的概念,作业不仅包含了通常的程序和数据,还应该包含一份作业说明书,系统根据说明书来对程序的运行进程控制。

进程调度:是指对处于就绪状态的多个进程,按照一定的策略选出一个进程使之从就绪状态变成执行状态,真正获得CPU来运行程序。

进程调度方式:

1.非抢占式:采用这种调度方式时,一旦处理机分配给某个进程后,不管该进程运行多长时间,都会让它一直运行下去,不会因为其他原因而抢占正常运行进程的处理机。

引起原因:
1)正在执行的进程执行结束,或因某个原因该进程不再执行。

2)该进程执行过程中因为提出I/O请求而暂停执行。

3)在进程通信或同步过程中执行了某个原语操作,如P操作。

2.抢占式:这种调度方式允许调度程序按照某种原则去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另外一个进程。

引起原因:
1)优先权原则。当一些优先权较高的进程或作业到达时,正在执行的进程会停止,调度程序将处理机分配给优先权更高的进程。

2)短作业(进程)优先原则。当新到达的进程或作业比正在执行的进程或作业执行时间短,调度程序将处理机分配给短进程。

3)时间片原则。各进程按照时间片轮流运行,当前时间片用完之后,该进程便停止执行,调度程序进程重新调度。

调度算法

作业调度:FCFS、SJF、高优先权优先、高响应比优先
进程调度:FCFS、SJF、高优先权优先、时间片轮转

1.先来先服务(FCFS)调度算法

该算法根据名字就很好理解,先来后到,始终选队首进程(作业),进程获得CPU,直至执行完毕或发生某个等待事件,释放CUP。
该调度算法有利于长进程(作业),不利于短进程(作业)。

2.短作业(进程)优先(SJF)调度算法

和FCFS类似,只是在进行选择的时候,从后备队列中选择一个运行时间最短的进程(作业)。
该调度算法不利于长进程(作业),也没有考虑到进程的紧迫程度。

3.高优先权优先调度算法

1)静态优先级 调度算法:进程创建时被赋予优先级,而且在进程的运行过程中保持不变,优先级最高的进程率先被调度,优先级相同的进程采用FCFS调度算法

2)动态优先级 调度算法:进程创建时赋予优先级,但是优先级在运行过程中可以改变,以便获得更好的调度性能。 优先级最高的先被调度,优先级相同的进程采用FCFS调度算法。

4.高响应比有限调度算法

优先权 = (等待时间 + 要求服务时间)/ 要求服务时间

从上面的式子可以看出:
1)当作业的等待时间相同时,如果要求服务的时间越短,优先权越大,所以该算法更有利于短作业。

2)当作业的要求服务时间相同时,等待时间越长,优先权越高,此时它实现的是FCFS。

3)对于长作业而言,作业的优先级可以随着等待时间的增加而提高,,当期等待时间达到一定程度时,其优先级也能提升到很高,从而也能获得处理机。

5.时间片轮转调度算法

每个进程按照先进先出的原则进入就绪队列,每次调度时,调度程序将CPU分配给队首的进程,让其执行一个时间片q,该进程运行完时间片q后,有以下几种情况:
1)该进程执行完毕,调度下一个进程运行

2)该进程未执行完,进程执行被时钟中断,排到就绪队列队尾,特别注意:如果这个时候有一个新到达的进程,则刚才时间片用完的进程排在新到达进程的后面。然后调度就绪队列中的下一个进程执行。

3)该进程I/O等原因而被阻塞,该进程进入阻塞队列,调度就绪队列的下一个进程执行,等该进程被解封后,再从阻塞队列进入就绪队列队尾。

这篇关于处理机调度——进程调度/作业调度算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804906

相关文章

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是