CPU调度(进程调度)策略

Linux内核--进程管理(六)内核进程管理几种CPU调度策略 我们知道,程序需要获得CPU的资源才能被调度和执行,那么当一个进程由于某种原因放弃CPU然后进入阻塞状态,下一个获得CPU资源去被调度执行的进程会是谁呢?下图中,进程1因为阻塞放弃CPU资源,此时,进程2刚IO操作结束,可以获得CPU资源去被调度,进程3的时间片轮转结束,也同样可以获得CPU资源去被调度,那么,此时的操作系统应该安排哪个进程去获得CPU资源呢?这就涉及到我们操作系统的CPU调度策略了。 阅读详情

CPU调度

CPU调度是多道程序操作系统的基础。通过在进程之间切换CPU,操作系统可以提高计算机的吞吐率。

每当CPU空闲时,操作系统必须按照一定的策略从就绪队列当中选择一个进程来执行。
调度的对象:进程或线程。其方式与原则是一样的。所以经常以进程来说明。
那么说CPU调度<=>进程调度

调度算法的设计目标

面对客户:调度算法的设计目标应该是用户满意。
面对进程:CPU调度的目标应该是进程满意。

而让进程满意的关键就是时间,我们要做的事:

  • 尽快结束任务:周转时间(从任务进入到任务 )短
  • 用户操作尽快响应:响应时间(从操作发生到响应)短
  • 系统内耗时间少:吞吐量(完成的任务量)大

一个系统中存在多个任务,会存在调度的矛盾。

  • 吞吐量和响应时间有矛盾
    响应时间小=>切换次数多=>系统内耗大=>吞吐量小

  • 前台任务和后台任务的关注点不同
    前台任务关注响应时间,后台任务关注周转时间

  • IO约束型程序和CPU约束型程序各有特点
    CPU约束型程序以计算为主,CPU区间会较多,还会有少量长的CPU区间。如gcc。
    I/O约束型程序以I/O为主,但配合I/O处理会有大量短的CPU区间。如word。

所以调度算法的设计需要折中,综合。

各种调度算法

这里写图片描述

(1)First Come,First Served(FCFS)先来先服务

这里写图片描述

平均周转时间:
(10+39+42+49+61)/5=40.2

(2)SJF短作业优先

这里写图片描述

平均周转时间:
(10+13+42+49+61)/5=35

短作业优先:如果存在i < j,而pi>pj,交换pi,pj。

短作业优先的周转时间是最小的。
如果调度结果为p1,p2,…,pn,则周转时间为:
p1+(p1+p2)+(p1+p2+p3)+…=∑(n+1-i)pi=n*p1+(n-1)*p2+…

p1乘的最大,如果按短作业优先来的话,调度的结果是p1最小,p2次之…
所以短作业优先的周转时间是最小的。

(3)round robin,RR轮转调度

按短作业优先:

这里写图片描述

但是此时就有一个问题了,P2用户的操作,要等前面所有的任务都执行完了,才会响应。这样响应时间就不能保证了。

所以有了轮转调度,按时间片来轮转调度。

这里写图片描述

时间片T=10
假设有n个,那么这里最长的响应时间为nT,这样响应时间就可以保证了。

对于轮转调度,时间片大,响应时间太长;时间片小,吞吐量小。折中的话,时间片10~100ms,切换时间0.1~1ms(1%)。

(4)优先级调度

系统中存在多种任务,比如Word关心响应时间,gcc关心周转时间,这两类任务同时存在怎么办呢。
直观的想法是:定义前台任务和后台任务队列,前台RR,后台SJF,在前台任务没有时才调度后台任务。

这里写图片描述

但是这样的绝对优先级调度问题很大啊,如果前台一直有任务,后台就一直不能被调度了。所以后台任务优先级必须动态升高。

但是后台任务(用SJF调度)一旦执行,前台的响应时间又不能保证了(后台任务 一般是CPU区间很长的任务,CPU在很长一段时间都不会被让出)。

所以说后台任务也要有时间片,如果前后台都单纯的用时间片,这又退化到了RR,后台任务的SJF又该怎么体现呢。

所以说我们的调度算法既要有轮转调度为核心,又要在轮转调度的基础上增加一些优先级,而这个优先级又要考虑到短作业优先,又要考虑到前台的任务先做。

CPU调度实例–schedule函数

Linux 0.11中的schedule()

void Schedule(void)
{
   ...
   while(1)
   {
      c=-1;
      next=0;
      i=NR_TASKS;
      p=&task[NR_TASKS];//把数组中的最后一个给p
      while(--i)
      {     
         if(!*--p)
         {
             continue;
         }
         //TASK_RUNNING代表就绪
         if((*p)->state==TASK_RUNNING && (*p)->counter>c)
         {
            c=(*p)->counter;
            next=i;
         }
      }//找到最大的counter,counter本身作为时间片,但又作为优先级
      if(c) break;//找到就跳出

      //如果就绪态的进程counter都用完了,那么执行下面的代码
      for(p=&LAST_TASK;p>&FIRST_TASK;--p)
      {
         if(*p)
         {
            //(*p)->priority代表counter的初值
            (*p)->counter=((*p)->counter>>1)+(*p)->priority;
         }
      }
   }
   switch_to(next);
}
for(p=&LAST_TASK;p>&FIRST_TASK;--p)
{
    if(*p)
    {
      (*p)->counter=((*p)->counter>>1)+(*p)->priority;//①
    }
 }

对于这段代码,如果是就绪态的进程进来,此时就绪进程的counter都为0了,执行①处代码,相当于又重置回复了进程的counter。而如果是阻塞态的进程进来,当前counter/2后,又加上初值肯定比之前大,counter又作为优先级,一旦进程由阻塞态变成就绪态,那么它的优先级就会很高了。

下面具体的说一下counter的作用:

counter的作用:时间片

counter是典型的时间片,完成轮转调度,保证响应时间

void do_timer(...) //kernel/sched.c
{
   if(--current->counter>0) return;
   current->counter=0;
   schedule();//时间片用完了,开始切换
}

_timer_interrupt: //kernel/system_call.s
 ...
 call _do_timer

void sched_init(void)
{
   set_intr_gate(0x20,&timer_interrupt);
}

counter的另一个作用:优先级

//找到counter最大的任务调度,counter代表优先级
while(--i)
{     
   if(!*--p)
   {
      continue;
   }
   if((*p)->state==TASK_RUNNING && (*p)->counter>c)
   {
      c=(*p)->counter;
      next=i;
   }
}
//counter代表的优先级进行动态调整
for(p=&LAST_TASK;p>&FIRST_TASK;--p)
{
    if(*p)
    {
      (*p)->counter=((*p)->counter>>1)+(*p)->priority;//①
    }
 }

在I/O的进程的那些优先级会升高,而且I/O时间越长的,优先级越高,因为每次c=0了,都要执行counter/2+初值。
经过I/O进程的counter一定会比只执行CPU进程的counter大,所以I/O约束型任务的优先级就上去了,而I/O约束型正是前台进程的特征。即认为经过了I/O就具有前台进程的特征,那么优先级就比只执行CPU的后台进程高。在阻塞队列待得越久,优先级就越高。

综上整理counter的作用

  • counter保证了响应时间的界

  • 经过IO后,counter就会变大,IO时间越长,counter越大,照顾了IO进程,变相的照顾了前台进程

  • 后台进程一直按照counter轮转,近似SJF调度

  • 每个进程只用维护一个counter变量,简单、高效
手把手教你解决Realsense D455在ROS下IMU数据不输出的问题(附固件降级指南) 本文详细解析了Realsense D455在ROS环境下IMU数据不输出的问题,提供了固件降级和ROS配置的完整解决方案。通过版本兼容性分析和实战操作指南,帮助开发者快速恢复IMU数据流,优化机器人开发体验。 阅读详情

相关推荐

ADS2016子电路封装避坑指南:手把手教你制作可复用的自定义Symbol

本文详细介绍了在ADS2016中制作可复用的自定义Symbol的全流程,重点解析了子电路封装的常见问题与解决方案。从电路模块的标准化处理、Hierarchy创建技巧到Symbol视觉优化和库管理策略,帮助工程师提升射频与微波电路设计效率。特别针对Symbol比例适配和引脚优化等核心问题,提供了实用的避坑指南和工程验证方法。

weixin_30275415的博客 209

【操作系统】CPU(处理器)调度

1 概念 CPU调度是控制、协调进程对CPU的竞争,即按照一定的调度算法从就绪队列中选择一个进程把CPU的使用权交给该进程。如果没有就绪进程,则操作系统会安排一个系统空闲进程或idle进程。 表1-1 CPU调度需要解决的三个问题 问题 本质 具体工作 调度时机 内核对中断/异常/系统调用处理后返回到用户态 进程正常终止;新进程创建;进程从运行态进入阻塞态;进程从运行态进入就绪态 ...

少侠露飞的学习笔记 2万+

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

CPU调度策略

文章目录前言一、调度算法1.FCFS(First Come, First Served)2.SJF(Shortest Job First)3.RR(Round Robin)4.折中方案二、Schedule()1.counter(时间片)2.counter(优先级)总结 前言 问题引入: 当线程1阻塞,线程2 3都处于就绪态,该执行哪个呢?需要有调度策略 CPU调度的直观想法: 1.FIFO:先进先出 (排队) 2.Priority:优先级高的先执行 面对复杂的场景,这两种几乎行不通的。 CPU..

风间琉璃的博客 2400

MTK metadata中AF模块的移除与配置调整

本文详细介绍了在MTK平台Camera开发中如何移除metadata中的AF(自动对焦)模块。通过系统清理MTK_CONTROL_AF_REGIONS、MTK_CONTROL_MAX_REGIONS等关键配置项,并调整对焦模式及硬件特性声明,确保定制化设备在禁用自动对焦功能后的稳定运行。

q1w3e5r7t9y的博客 570

PayPal支付集成完全指南:开源库实践

本文介绍了如何从零开始集成PayPal支付功能。首先概述了PayPal提供的多语言SDK和开源库,包括PHP、Python、Node.js等版本。然后详细说明了准备工作,包括注册开发者账号、获取API凭证和使用沙盒环境测试。文章以Node.js为例,演示了安装SDK、基础配置和实现支付流程的完整代码,包括创建订单和捕获支付两个核心功能。最后提及了订阅支付等高级功能,为开发者提供了完整的支付集成方案。通过清晰的代码示例和步骤说明,帮助开发者快速实现PayPal支付功能集成。

2501_93501927的博客 1258

CPU调度基本策略

目标1:更小的(周转时间),任务从到达到整体完成的延迟(任务第一次调度与到达时间之差)Tresponse​Tfirstrun​−Tarrival​。

Love_Linmon的博客 1352

Response Instance 详解:在 ABAP OData Client Proxy 中读懂每一次响应

ABAP OData Client Proxy中的Response Instance是关键信息载体,封装了业务数据及调用上下文(如分页、delta link等)。响应实例在执行请求后自动生成,根据请求类型返回特定接口(如READ返回/IWBEP/IF_CP_RESPONSE_READ)。响应抽象与OData版本解耦,支持统一处理V2/V4服务。常见响应类型包括单实体读取、列表读取(支持分页和增量同步)、创建/更新/删除响应等。开发时可通过响应对象的安全类型方法获取数据,如get_business_data获

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 136

cpu调度策略

在 NUMA 架构中,一个 NUMA 节点上包含了连接在该节点上的 CPU,内存等硬件设备。基于 systemd 的服务提供了一种方便的方式,可以在服务单元中的[Service]段落中使用CPUAffinity,设置,该参数接受一个以空格为分隔符的 CPU 索引列表,例如 0 代表第-个CPU,1代表第二个CPU。默认情况下,调度策略可以将进程放置在任何一个CPU上去执行,但为了增加效率,可以将某个进程与哪些 CPU 进行绑定,提供了缓存命中率,提供了整体性能。该进程在执行期间,虚拟时间将开始减少。

phonenight的博客 821

ABAP 里解构引用操作符 ->* 的使用方法详解

解除引用操作符->*可用于将“类型为REF TO …的引用变量”的值(即该引用所指向内存)取出,从而访问其实际值或内部组件。具体地,若dref是一个“引用变量”,则表达式dref->*代表对该引用进行“解除引用”,使得程序按静态类型将其视为实际类型的值对象。例如,若lr类型声明为,则lr->*表示“将 lr 引用的INT4对象看作INT4类型并访问其值”。注:若 “数据引用变量” 的静态类型是通用类型DATA,则只能在这种上下文中使用->*。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 479

区块链技术概述:从比特币到Web3.0

区块链技术正重塑数字世界的信任机制。本文系统梳理了区块链的发展路径:从比特币的PoW共识和UTXO模型,到以太坊的智能合约和账户体系,直至Web3.0的去中心化互联网愿景。文章详细解析了区块链的核心特性(去中心化、不可篡改等)和数据结构,通过流程图展示了比特币交易生命周期和智能合约执行流程,并对比了Web2.0与Web3.0的关键差异。最后,用Python代码实现了包含区块类、交易处理和挖矿机制的简易区块链系统,为理解区块链底层原理提供了实践参考。

闲人编程的博客 455

现代处理器的调度策略,调度优先级,亲和性是什么意思?

调度策略决定了任务的调度方式(如是否抢占、是否有时间片等)。调度优先级决定了任务的执行顺序(高优先级任务优先执行)。亲和性决定了任务运行在哪一个或哪几个 CPU 核心上(优化缓存命中率和内存访问效率)。通过合理配置这三个维度,可以实现高效的多处理器调度,满足实时性、公平性和性能优化的需求。

qq_33775774的博客 1054

Autosar诊断实战系列23-NRC优先级解析

NRC分类,优先级判断逻辑及测试注意事项介绍。

initiallizer的博客 2617

CPU调度(进程调度)策略

目录一.引言 一.引言

m0_46550452的博客 1754

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android cpu调度策略_Linux进程组调度机制分析

嵌入式linuxQQ交流群:175159209,欢迎爱好者加入交流技术问题!又碰到一个神奇的进程调度问题,在系统重启过程中,发现系统挂住了,过了30s后才重新复位,真正系统复位的原因是硬件看门狗重启的系统,而非原来正常的reboot流程。硬件狗记录的复位时间,将不喂狗的时间向前推30s分析串口记录日志,当时的日志就打印了一句话:“sched:RTthrottlingactivat...

weixin_34596480的博客 470

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android cpu调度策略_Android进程调度

Linux系统将进程分为实时进程和普通进程,实时进程的优先级范围为0~99,普通进程为100~139,并且二者的调度策略也是不通的。Android系统是基于Linux系统之上开发的,其充分利用了Linux系统的一些特性,有些甚至可以做为开发范本。这篇文章分析一下Android系统是如何利用Linux进程调度策略来管理进程优先级的,源码参考Android 9.0。实时进程Android中对实时进程使...

weixin_39720865的博客 3161

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android cpu调度策略_android进程、线程调度简介

引言1、Audio、SurfaceFlinger等相关实时任务是如何调度的?2、怎样保证app的main thread、render thread等高优先级线程不会被其他低优先级的线程打断?3、app退到后台时,怎么限制其对cpu资源的占用?4、android是怎样支持ARM的big.LITTLE架构的?本文接下来将回答这几个问题。linux的调度策略android基于linux内核,androi...

weixin_39640417的博客 3258

内核模块打印task_struct的进程号,优先级,调度策略,状态,CPU和进程名

打印task_struct的进程号,优先级,调度策略,状态,CPU和进程名 pcb.c #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/sched.h> #include "policy.h" #include ...

weixin_44395686的博客 923

android cpu调度策略_随笔之Android平台上的进程调度探讨

http://blog.youkuaiyun.com/innost/article/details/6940136随笔之Android平台上的进程调度探讨一由来最近在翻阅MediaProvider的时候,突然想起之前碰到的一个问题,该问题是这样的:一个Pad上有很多媒体文件,然后每次开机后的一段时间内,Home Screen的反应都特别慢,有时候还会报出ANR的错误。从ANR文件/data/anr/trace...

weixin_39949776的博客 1039

进程与线程:07 CPU调度策略

进程与线程:07 CPU调度策略

weixin_44399845的博客 701

操作系统学习-常见的CPU调度进程的策略

下面我们分别就单核和多核的情况加以分析: 1.单核: 1.1 FCFS (first come first service)先到先处理方式 顾名思义,这种调度方法就是CPU按照先到先处理的方式对进程进行处理,非抢占式 优点:简单,一般结合其他策略使用 缺点:平均等待时间较长,举例:三个进程 P1的cpu时间是24s,P2是3s,P3也是3s,这样P2和P3分别需要等待24s和27......

liuxingrui4p的专栏 3090

进程调度是操作系统核心功能之一,指**按一定策略从就绪队列中选择进程并分配CPU资源**的过程

进程调度是操作系统中的重要功能,它直接影响到系统的性能和效率。通过合理选择调度方式、调度算法以及确定进程优先级,可以提高系统的资源利用率、吞吐量和实时性。在实际应用中,需要根据系统的特点和需求,综合考虑各种因素,选择合适的调度策略。

[Blog][Domain] programb.blog.youkuaiyun.com 1403

操作系统对CPU的虚拟化——进程调度策略

上一篇博客讲述了关于对CPU虚拟化中对进程的抽象、进程相关API以及进程的受限执行,接下来我们接着讲解操作系统中进程的调度策略。 想学习上部分内容的小伙伴可以去下边我的上一篇博客学习。 操作系统对CPU的虚拟化——进程的抽象、进程相关API以及进程的执行 ...

阳阳的博客 1422

Linux内核进程管理几种CPU调度策略

很简单,就是任务短的优先执行,但是此时又有问题了,任务虽然短,但是它的执行时间不一定短,就好比在一个银行业务中,客户填写一个表,这是一个非常短的任务吧——就单单填个表,但是这个表很长很长,那么这个短任务它的执行时间就很长了,我们怎么知道这个短的任务将来会执行多长的时间呢?所以,这样的策略还是依然有问题。那么,因为一个系统中,可能短任务占的比重较多,那些后来进入的短任务,就得等前面一大堆的任务执行完后,CPU才为这些短任务服务,这样的话,很多短任务即使服务时间短,但是它们的周转时间都比较长。

嵌入式Linux内核的博客 919

【ostep】04 虚拟化 CPU - 进程调度策略

进程调度策略 我们称系统中运行的进程为工作负载(workload),我们对工作负载的假设越具一般性,基于该假设设计的调度策略的表现就越优化。 下面的讨论均假设,工作负载仅占用 CPU,而不发出任何 I/O 操作。 调度指标 调度指标用来衡量不同调度策略的优劣 周转时间(turnaround time) 就是一个任务从交给操作系统到运行结束所用时间。 工作周转时间 = 工作完成时间 - 工作到达时间 该指标主要看的是平均周转时间:一段时间内多个任务周转时间的均值。 平均周转时间 = 周转时间之和 / 工作

高厉害 0w0 1026

【基础学习】操作系统学习笔记 - 进程与线程:实现内核级线程切换、CPU调度策略、调度算法实例

在中国大学MOOC上学习操作系统 希望看视频可以直接点击 哈工大-操作系统课程MOOC 操作系统的那棵“树”(The Tree of OS) ideas CPU运转,需要将一段程序然后设好PC交给CPU去执行。将CPU用于执行程序 但是CPU并没有好好运转,因为它遇到I/O的阻塞。 解决这个问题,有了多进程,我们让PC跳转,就可以并发地让CPU执行程序。多进程出现了 我们使用栈结构来完成跳转的操作 结果遇到了一个栈 + Yield 造成混乱的问题,怎么让PC回到204代码段? 使用两个栈+两个用

SDUzzy的博客 791
上一篇: 内核级线程
下一篇: 求最长等差数列长度
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值