Linux 进程调度分析

【Linux 内核源码分析】进程调度 -CFS 调度器 在CFS(Completely Fair Scheduler)调度器中,任务的权重值由其nice值决定,通过对比不同任务的权重值,CFS会分配合理的CPU时间片给每个任务。这种方式实现了一种类似于多态的效果,即不同的任务可以使用不同的调度算法,而调度器的函数指针则根据具体的调度器类型来指向对应的函数。通过这种方式,Linux 内核可以根据任务的调度器类型来调用相应的调度函数,实现了灵活的调度策略,并且能够方便地扩展和切换不同的调度器。高优先级的任务会获得更多的虚拟运行时间,在排序和选择调度时更容易被选中。 阅读详情

系统中存在很多进程,它们由进程调度组件调度交替运行,多个进程共享CPU时间,每个进程使用CPU时间的一部分(时间片),由于时间很快,造成了并行执行的错觉。

  • 两种调度器 -管理调度流程
  1. 直接调度器: 用于进程睡眠或主动让出CPU资源
  2. 周期调度器:使用定时器,以指定频率运行,周期性的检测是否需要进行进程调度
  • 调度类- 负责进程调度底层算法支持
  1. 完全公平调度类(CFS):Linux 中主要使用的调度类
  2. 实时调度类: 用于支持POSIX标准的实时进程

 

  • 调度器和调度类之间的关系

     调度器周期性调用当前进程调度器类,选择将要运行的进程,并更新统计信息及切换调度。

 

  • 进程优先级

优先级用于进程调度算法,它影响一个进程是否有更多的机会被调度,进程优先级通过nice系统调用设定,其值范围为 -20到+19间,值越低表示优先级越高。

内核提供优先级辅助宏,可以在nice和prio之前转换

#define MAX_NICE	19
#define MIN_NICE	-20
#define NICE_WIDTH	(MAX_NICE - MIN_NICE + 1)

/*
 * Priority of a process goes from 0..MAX_PRIO-1, valid RT
 * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
 * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority
 * values are inverted: lower p->prio value means higher priority.
 */

#define MAX_RT_PRIO		100

#define MAX_PRIO		(MAX_RT_PRIO + NICE_WIDTH)
#define DEFAULT_PRIO		(MAX_RT_PRIO + NICE_WIDTH / 2)

/*
 * Convert user-nice values [ -20 ... 0 ... 19 ]
 * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ],
 * and back.
 */
#define NICE_TO_PRIO(nice)	((nice) + DEFAULT_PRIO)
#define PRIO_TO_NICE(prio)	((prio) - DEFAULT_PRIO)

 

计算进程优先级,进程有3个优先级,静态优先级(static_prio)、普通优先级(normal_prio)、动态优先级(prio),静态优先级是进程优先级计算的基础,系统中有 普通进程、实时进程、空闲进程,它们之间的优先级为 实时进程》普通进程》空闲进程

int				prio;
	int				static_prio;
	int				normal_prio;

内核计算优先级函数

static int effective_prio(struct task_struct *p)
{
	//计算进程普通优先级
	/*
	实时进程: MAX_RT_PRIO-rt_priorit
	普通进程: 默认返回static_prio
	空闲进程: MAX_DL_PRIO-1
	*/
	p->normal_prio = normal_prio(p);
	/*
	 如果进程优先级在实时进程优先级范围内,则保持优先级不变
	 */
	if (!rt_prio(p->prio))
		return p->normal_prio;
	return p->prio;
}

 

  • 负荷权重

       优先级只是影响进程重要性的一个方面,进程的负荷权重也是影响进程重要性的一个指标,它根据进程的静态优先级计算。

      进程通过调整nice值来增加或减少获取的CPU时间,内核通过一个转换表将优先级转换为权重

const int sched_prio_to_weight[40] = {
 /* -20 */     88761,     71755,     56483,     46273,     36291,
 /* -15 */     29154,     23254,     18705,     14949,     11916,
 /* -10 */      9548,      7620,      6100,      4904,      3906,
 /*  -5 */      3121,      2501,      1991,      1586,      1277,
 /*   0 */      1024,       820,       655,       526,       423,
 /*   5 */       335,       272,       215,       172,       137,
 /*  10 */       110,        87,        70,        56,        45,
 /*  15 */        36,        29,        23,        18,        15,
};

可以看到每个数组元素之间的乘数因子为1.25,如nice=0的进程 A和B,得到的CPU时间为各50% ,1024/(1024+1024)=0.5,假如我们调整进程A的nice=1 ,此时进程权重为820,那么A进程获得的CPU时间为 820/(1024+820)=0.45(约等于),那么A进程CPU时间为45%,B进程为6=55% 1024/(1024+820)。

后续涉及就绪队列、抢占、SMP等 未完待续。。。

Linux进程调度——schedule()函数分析 刘森林 原创作品转载请注明出处 《Linux内核分析》MOOC课程 打开终端中输入qemu –kernel linux-3.18.6/arch/x86/boot/bzImage –initrd rootfs.img –S –s 然后打开另一个终端输入gdb (gdb)file linux-3.18.6/vmlinux (gdb)target remote:1234 (gdb)b schedul 阅读详情

相关推荐

C语言实现贪吃蛇小游戏!(超简单详细)详细思路+源码分享

我们的今天的目标就是:用C语言来实现一个贪吃蛇项目,也不用太复杂,初学者能看懂就行!

致力于C语言C++知识分享! 1万+

linux调度优先级备忘

Linux 调度器 BFS 简介 https://www.ibm.com/developerworks/cn/linux/l-cn-bfs/   http://blog.chinaunix.net/uid-24774106-id-3372932.html 原文如下: https://blog.youkuaiyun.com/flyingleo1981/article/details/9624103 ...

baidu_38316985的博客 202

Python爬虫实战:如何优雅地处理BOSS直聘的反爬机制与Cookie失效问题

本文详细介绍了如何通过Python爬虫技术优雅应对BOSS直聘的反爬机制与Cookie失效问题。从多账号轮换、动态请求头生成到代理IP管理,提供了一套完整的解决方案,帮助开发者构建稳定高效的数据采集系统,有效提升爬虫成功率与数据质量。

weixin_30733003的博客 1562

MAX_PRIO MAX_RT_PRIO

MAX_PRIO = 140#define MAX_PRIO            (MAX_RT_PRIO + 40)     MAX_RT_PRIO = 100#define MAX_RT_PRIO         MAX_USER_RT_PRIO       #define MAX_USER_RT_PRIO    100

kernel_details的专栏 3245

MacOS蓝牙连接疑难杂症:从基础排查到高级修复全攻略

本文提供了一份全面的MacOS蓝牙故障排查与修复指南。从基础的菜单栏检查、终端命令诊断,到软/硬重启蓝牙服务、删除配置文件,再到使用blueutil工具、重置NVRAM等高级方法,系统性地解决了蓝牙无法连接、连接不稳定等常见问题。最后还分享了环境干扰排查、预防措施及硬件故障自检方法,帮助用户彻底解决Mac蓝牙连接难题。

weixin_29271263的博客 450

1.2 重叠因子:双重指数移动平均(Double Exponential Moving Average, DEMA)概念与Python实战

双重指数移动平均(Double Exponential Moving Average, DEMA)是一种改进的移动平均线指标,由Patrick Mulloy在1994年开发。相比传统的指数移动平均线(EMA),DEMA通过减少滞后性来提供更快的市场反应。它通过两次计算EMA并进行特殊组合来实现这一目标,可以在保持平滑性的同时减少滞后。

Kewin的博客 2168

Linux进程调度(4):实时调度

4、实时调度算法     linux内核中提供了两种实时调度策略:SCHED_FIFO和SCHED_RR,其中RR是带有时间片的FIFO。这两种调度算法实现的都是静态优先级。内核不为实时进程计算动态优先级。这能保证给定优先级别的实时进程总能抢占优先级比他低得进程。linux的实时调度算法提供了一种软实时工作方式。实时优先级范围从0到MAX_RT_PRIO减一。默认情况下,MAX_RT_PRIO为

Jack Zhou的专栏 6829

新手必看:Infineon Memtools烧录配置全流程(附常见错误解决方案)

本文为嵌入式开发新手提供了Infineon AURIX开发环境搭建与Memtools烧录的全流程实战指南。详细解析了ADS、DAS和Memtools三大核心工具的角色与协同关系,并重点讲解了Memtools的图形界面配置步骤、烧录操作流程,以及针对“无法连接设备”、“编程失败”等常见错误的系统性排查与解决方案,帮助开发者快速上手并规避典型陷阱。

weixin_29189377的博客 634

进程调度之实时调度策略(SCHED_FIFO、SCHED_RR、MAX_RT_PRIO实时优先级)

Linux提供了两种实时调度策略:SCHED_FIFO和SCHED_RR普通的、非实时的调度策略是SCHED__NORMAL借助调度类的框架,这些实时策略并不被完全公平调度器来管理, 而是被一个特殊的实时调度器管理。具体的实现定义在文件kernel/sched_rt.c中,在接下来的内容中我们将讨论实时调度策略和算法。

sinat_32152141的博客 3216

别光看Demo了!用UE5 Lyra框架快速搭建你的多人对战游戏原型(含完整配置流程)

本文详细介绍了如何利用UE5 Lyra框架快速搭建多人对战游戏原型,包含完整的配置流程和实战案例。Lyra作为可直接二次开发的游戏模板,内置了GAS技能系统、Enhanced Input输入控制等核心功能,大幅缩短开发周期。通过替换角色模型、调整武器数值和配置新地图规则,开发者可在48小时内完成科幻团队竞技游戏原型的搭建。

weixin_28717411的博客 457

NoUnityCN:绕过地域限制,从Unity官方CDN直链下载全版本编辑器

在软件开发和游戏制作领域,内容分发网络(CDN)是保障全球用户高速、稳定获取大型文件的核心基础设施。其原理是通过将资源缓存至遍布各地的边缘节点,使用户能从地理距离最近的服务器获取数据,从而显著提升下载速度并降低源站压力。这一技术对于需要频繁下载大型开发工具(如游戏引擎)的团队而言,价值在于能确保开发环境部署的一致性与效率,是构建自动化CI/CD流水线和团队协作的基础。然而,当开发者因网络策略或地域限制无法直接访问官方CDN时,获取安装文件便成为阻碍工作流的痛点。NoUnityCN项目正是针对此场景的工程实践

weixin_33473110的博客 312

Linux进程优先级的处理--Linux进程的管理与调度(二十二)

Linux进程优先级的处理 日期 内核版本 架构 作者 GitHub 优快云 2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 1 前景回顾1.1 进程调度内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来.调度器面对的情形就是这样, 其

OSKernelLAB(gatieme) 2万+

YOLOv11涨点改进| SCI一区2026 |独家创新首发、特征融合改进篇|引入FAFM特征对齐融合模块,通过特征对齐和融合两个阶段,助力多模态融合小目标检测,小目标检测,SAR图像目标检测高效涨点

🔥本文提出了一种改进YOLOv11网络模型的方法,通过引入FAFM(特征对齐融合模块)来解决多模态目标检测中的特征空间错位问题。FAFM模块采用可变形卷积和内容引导注意力机制,有效实现了跨模态特征对齐与融合,充分利用了不同模态间的互补信息。该方法在保持模型轻量化的同时,显著提升了目标检测精度和鲁棒性,特别是在复杂背景和模态差异较大的场景下表现突出。文章详细介绍了FAFM模块的结构、原理、优势,并提供了完整的代码实现和模型配置方案,为多模态目标检测任务提供了实用的技术参考。

Ai缝合怪、助力小伙伴高效发论文 267

linux分析进程,Linux进程调度分析

摘要:Linux系统作为能够应用于多平台的多任务操作系统,它被广泛应用于嵌入式电子产品中,linux系统的效率就成为电子产品性能的重要因素之一。文章从linux进程调度的角度来分析linux系统的性能,对linux进程调度的原理、算法以及过程进行了分析。关键词:进程调度;内核;多任务中图分类号:TP311文献标识码:A 文章编号:1009-3044(2011)01-0070-02Linux Pro...

weixin_31162247的博客 340

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

linux进程调度(四)-进程调度分析

不同的是,SCHED_RR会为每个进程分配固定的时间片,一旦时间片耗尽,当前进程便被置于队列的尾部,等待下一轮调度。task_tick_fair函数主要是遍历当前进程到当前进程到根任务组的每级公平调度实体,正常我们没有使用调度分组的话,只有一个调度实体,如果我们使用cgroup控制cpu的使用率,才会有多个调度实体,这些调度实体随着cgroup形成树状,我们只会往上遍历parent节点,针对每一个调度实体,我们会找到对应的cfs_rq后调用函数entity_tick更新进程的调度实体的状态;

jianjian的博客 752

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

linux进程调度采取的是,Linux进程组调度机制分析

又碰到一个神奇的进程调度问题,在系统重启过程中,发现系统挂住了,过了30s后才重新复位,真正系统复位的原因是硬件看门狗重启的系统,而非原来正常的reboot流程。硬件狗记录的复位时间,将不喂狗的时间向前推30s分析串口记录日志,当时的日志就打印了一句话:“sched: RT throttling activated”。从linux-3.0.101-0.7.17版本内核代码中可以看出,sched_r...

weixin_33347911的博客 391

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

linux操作的进程调度没有采用,Linux进程调度分析

Computer Knowledge and Technology 电脑知识与技术本栏目责任编辑:冯蕾网络通讯及安全第7卷第1期(2011年1月)Linux 进程调度分析钟诚,卢卫恒,李德勇(江南计算技术研究所,江苏无锡214083)摘要:Linux 系统作为能够应用于多平台的多任务操作系统,它被广泛应用于嵌入式电子产品中,linux 系统的效率就成为电子产品性能的重要因素之一。文章从linux ...

weixin_30651409的博客 201

Linux内核分析之理解进程调度时机跟踪分析进程调度与进程切换的过程

一、原理分析 1.调度时机 背景不同类型的进程有不同的调度需求第一种分类I/O-bond:频繁的进行I/O;通常会花费很多时间等待I/O操作的完成CPU-bound:计算密集型;需要大量的CPU时间进行运算 第二种分批处理进程(batch process):不必与用户交互,通常在后台运行;不必很快响应。典型的批处理程序:编译程序、科学计算实时进程(real-time process):...

diedun6115的博客 332

Linux进程调度——schedule函数分析

近期准备分析一下Linux进程调度相关内容,计划从以下几个方面来分析。

深海 3020

linux系统中进程调度所采用的策略,基于Linux系统中进程调度分析

《基于Linux系统中进程调度分析》由会员分享,可在线阅读,更多相关《基于Linux系统中进程调度分析(3页珍藏版)》请在人人文库网上搜索。1、基于Linux系统中进程调度分析作者:院 浩来源:商场现代化2010年第12期摘要Linux是一个多用户多任务的操作系统,Linux中实现了对多个进程公平、高效的调度,并不是采用单一的调度策略,而是几种调度策略有机地综合应用。关键词 进程调度 优先级 时间...

weixin_35943182的博客 412

linux0.11内核分析之进程调度

linux0.11内核分析之进程调度 文章目录linux0.11内核分析之进程调度引入进程调度策略概述1、first come first serve(FCFS)2、高优先级优先3、时间片轮转法进程调度相关源码阅读1、schedule2、sys_pause3、system_call进程调度策略特点分析进程调度流程图 引入 对于一个操作系统小白来说,最重要系统性能的衡量指标就是——流畅度,也就是俗称的“卡不卡”,而这个系统性能背后的支撑就是linux内核的重要组成部分——进程的调度。 进程调度策略概述 进程调

weixin_48066554的博客 1267

Linux进程调度实验需求分析,linux进程调度分析

linux进程调度分析 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.90 积分B Ê null b null!?# [ É ñ Ø s Ù Z + nnull? ? o, ¬ ^ ?%&null ÏS ý ñ þ Ø ù î ý ý Ð ý , ¹ + Í ?? ()? ?+ ? null 2 ? Y v Ð ? S Ð...

weixin_33260484的博客 210

Linux内核调度分析(进程调度)

在每个进程的平均运行时间大于最小粒度的情况下,CFS无疑是公平的,nice值用于计算一个进程在当前这个最小调度周期中所应获得的处理器时间占比,这样就算nice值不同,只要差值相同,总是能得到相同的时间片。,再简单一点,它是一种以树节点方式储存数据的结构,每个节点对应了一个键值,利用这个键值可以快速索引树上的数据,并且它可以按照一定的规则自动调整每个节点的位置,使得通过键值检索到对应节点的速度和整个树节点的规模呈指数比关系。这样,进程所获得的实际CPU时间就和系统的负载密切相关。

m0_74282605的博客 496

linux进程调度 源码分析,Linux进程调度源代码分析

Linux进程调度源代码sched.c分析/** linux/kernel/sched.c** Copyright (C) 1991, 1992 Linus Torvalds** 1996-12-23 Modified by Dave Grothe to fix bugs in semaphores and* make semaphores SMP (对称多处理...

weixin_36204992的博客 890
上一篇: Linux 读写进程物理内存
下一篇: X86架构保护模式研究
IT回忆录
博客等级 码龄16年 42粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值