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

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

相关文章

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各