Linux 2.4进程调度分析 6

关于虚拟机中IPI中断的思考 其中,每个CPU的LAPIC接收到的中断是虚拟化的开销一个大头。外部中断源主要是IO设备,重度使用的IO设备比如有网卡,磁盘控制器等。目前,dpdk,spdk技术在虚拟化中的应用,已经把网络,存储中断减少到了0。内部中断源包括时钟,性能监控,错误检测,温度传感器。这几个中断,绝大多数日常使用虚拟机情况下发生频率极低。对虚拟化的开销影响很小。IPI中断是多核CPU系统中CPU彼此通信的唯一方法。主要使用在分布在不同CPU上的进程/线程彼此唤醒的情况中。 阅读详情

六. 其他核心应用的调度相关部分

系统中很多技术都和调度器相关,这里仅就其中几个稍作展开,并且不涉及该技术的细节,仅就其中与调度器相关的部分进行讨论,假定读者对于该技术有初步的了解。

1. IDLE进程

系统最初的引导进程(init_task)在引导结束后即成为cpu 0上的idle进程。在每个cpu上都有一个idle进程,正如上文所言,这些进程登记在init_tasks[]数组中,并可用idle_task()宏访问(见上"相关数据结构")。idle进程不进入就绪队列,系统稳定后,仅当就绪队列为空的时候idle进程才会被调度到。

init_task的task_struct是静态配置的,定义在[include/linux/sched.h]中的INIT_TASK()宏中,其中与调度相关的几个属性分别是:

  • state:TASK_RUNNING;
  • counter:10*HZ/100;i386上大约100ms
  • nice:0;缺省的优先级
  • policy:SCHED_OTHER;非实时进程
  • cpus_runnable:-1;全1,未在任何cpu上运行
  • cpus_allowed:-1;全1,可在任何cpu上运行

在smp_init()中(实际上是在[arch/i386/kernel/smpboot.c]中的smp_boot_cpus()中),init_task的processor属性被设为0,对应的schedule_data也设置好相应的值。在创建了一个核心线程用于执行init()函数之后([/init/main.c]rest_init()),init_task设置自己的need_resched等于1,然后调用cpu_idle()进入IDLE循环。

在cpu_idle()中,init_task的nice值被设为20(最低优先级),counter为-100(无意义的足够小),然后cpu_idle()进入无限循环:

/* 节选自[arch/i386/kernel/processs.c] cpu_idle() */

while (1) {

                    void (*idle)(void) = pm_idle;

                    if (!idle)

                               idle = default_idle;

                    while (!current->need_resched)

                               idle();

                    schedule();

                    check_pgt_cache();

}

 

初始化过程中第一次执行cpu_idle(),因need_resched为1,所以直接启动schedule()进行第一次调度。如上文所述,schedule()会清掉need_resched位,因此,之后本循环都将执行idle()函数,直至need_resched再被设置为非0(比如在reschedule_idle()中,见上"调度器工作时机")。

idle()函数有三种实现可能:

  • default_idle(),执行hlt指令;
  • poll_idle(),如果核心参数上定义了"idle=poll",则pm_idle会指向poll_idle(),它将need_resched设置为特殊的-1,然后反复循环直到need_resched不等于-1。因为poll_idle()采用更高效的指令,所以运行效率比default_idle()要高;
  • 电源管理相关的idle过程,例如APM和ACPI模块中定义的idle过程。

因为仅当就绪队列为空的时候才会调度到idle进程,所以,只有在系统完全空闲时才会执行check_pgt_cache()操作,清理页表缓存。

2. 进程创建

系统中除了init_task是手工创建的以外,其他进程,包括其他CPU上的idle进程都是通过do_fork()创建的,所不同的是,创建idle进程时使用了CLONE_PID标志位。

在do_fork()中,新进程的属性设置为:

  • state:TASK_UNINTERRUPTIBLE
  • pid:如果设置了CLONE_PID则与父进程相同(仅可能为0),否则为下一个合理的pid
  • cpus_runnable:全1;未在任何cpu上运行
  • processor:与父进程的processor相同;子进程在哪里创建就优先在哪里运行
  • counter:父进程counter值加1的一半;同时父进程自己的counter也减半,保证进程不能通过多次fork来偷取更多的运行时间(同样,在子进程结束运行时,它的剩余时间片也将归还给父进程,以免父进程因创建子进程而遭受时间片的损失)
  • 其他值与父进程相同

子进程通过SET_LINKS()链入进程列表,然后调用wake_up_process()唤醒(见上"调度器工作时机")。

多线程的调度,以及进程的调度 多线程的调度: 1.     调度时机: a.     当前执行的进程进入非执行的状态。 b.     抢占的方式,进程运行时,非预期的被剥夺CPU的使用权,出现了更高优先级的进程。 内核抢占:理想情况下,只要满足出现了优先级更高的进程,当前进程就应该立刻被抢占,但是,就像多线程需要用锁来保护临界区资源一样,内核中也存在很多这样的临界区,不大可能随时随地接收抢占。linux 2.4时的设计 阅读详情

相关推荐

TK抓包协议分析:So层逆向

第三个参数是一个回调函数,这里他的返回值1表示成功,0表示失败,那我们手动把他Hook为0,让他不支持quic协议,实现降级。等,我们是为了解决抓包问题,那很有可能是在net目录下(network),那来搜索一下。开了抓包以后APP直接是网络无连接了,并且抓到的请求也是不正常的,下面我们就开始定位。看了半天感觉也没啥有用的东西,那下面我们整理一下已经有信息,来猜测一下,后续怎么进行。那可以猜测,我们真正需要Hook的那个函数也有可能是这样加载的,可以字符串搜索一下。

2503_90751938的博客 3417

Linux内核源码分析-进程调度(五)-组调度

系统启动后默认有一个root_task_group,管理系统中最顶层CFS就绪队列cfs_rq(即cpu rq对应的CFS就绪队列)。 cfs组进程调度:pick_next_task_fair; 组进程抢占:task_tick_fair 调度组的时间分配

李白 5687

解决Docker拉取镜像报错:Get https://registry-1.docker.io/v2/: 报错

解决Docker拉取镜像报错: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection问题描述Get "https://registry-1.docker.io/v2/"是docker官方的镜像源,下载很慢的,一般会自己指定国内映射的加速镜像源。

qq_33650333的博客 4172

[linux]进程(三)——idle进程

9,linux进程切换 进程切换: 基本概念: 进程上下文:当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。 当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文, 运行于进程上下文的进程是可以被抢占的。 硬件上下文:进程恢复执行前必须载入寄存器的一组数据称为硬件上下文 linux内核在进程切换的时候是并不区

知了112的专栏 1万+

论文阅读——Bayesian Knowledge Fusion(贝叶斯知识融合)

该篇论文解决了不确定环境中的信息融合问题。想象一下,有多位专家针对同一情况构建概率模型,我们希望汇总他们提供的信息。直接合并每个信息可能会遇到几个问题。例如,专家们可能不同意某个事件发生的概率,或者他们可能不同意两个事件之间因果关系的方向(例如,一个人认为 A 导致 B,而另一个人认为 B 导致 A)。他们甚至可能不同意概率网络中一组变量之间的整个依赖结构。

qq_64164071的博客 1497

从零开始:小鼠Bulk RNA-seq全流程实战指南

本文提供了一份详尽的小鼠Bulk RNA-seq全流程实战指南,涵盖从软件环境搭建、原始数据质控与清洗、序列比对、基因定量到下游差异表达分析与功能富集。内容面向生物信息学新手,通过清晰的代码示例和步骤解析,帮助读者系统掌握Bulk RNA-seq数据分析的核心技能,并产出可靠的生物学洞见。

lake5的博客 715

浅谈Linux poll机制

poll是Linux的事件轮询机制函数,每个进程都可以管理一个`pollfd`队列,由poll函数进行事件注册和查询。

weixin_43389824的博客 3360

WEBGL Shader零基础教程(四):片元着色器核心逻辑

本文系统介绍了WebGL渲染管线中片元着色器的核心概念与应用。主要内容包括:1)片元着色器在渲染管线中的定位与作用,作为逐像素处理单元接收插值数据并计算最终颜色;2)输入数据类型与使用规则,重点讲解varying变量和uniform变量的应用场景;3)颜色计算的核心逻辑,涵盖基础色、渐变、纹理采样和颜色混合;4)进阶特效实现与性能优化技巧,包括交互效果、内置函数组合和GPU计算优化;5)通过综合案例演示了纹理、波纹与交互效果的整合实现。文章提供了完整的代码示例和调试建议,为后续学习光照模型、后期处理等高级渲

分享知识,拥抱变化 1374

Linux 内核引导参数简介

概述 内核引导参数大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导参数多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导参数。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导参数,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导参数说明。大多数参数是通过"__set...

weixin_30888413的博客 2090

【异常】OpenClaw LLM Request Timeout 超时问题的快速定位与落地解决

摘要:OpenClaw系统在执行任务时频繁出现"LLM request timed out"异常。通过分析发现主模型自动调度导致响应延迟,且缺乏超时配置兜底。解决方案包括:1)将主模型切换为低延迟的豆包2.0 Lite;2)保留豆包2.0 Pro和Kimi作为备用;3)重启Gateway服务验证。优化后系统响应速度显著提升,未再出现超时异常。后续建议增加显式超时配置、优化任务拆分和Prompt指令,并建立网络监控机制。(148字)

奶爸的编程之路,也就一周冷个三天 1159

Python从0到100(十九):Python标准库初探

哈希函数又称哈希算法或散列函数,是一种为已有的数据创建“数字指纹”(哈希摘要)的方法。哈希函数把数据压缩成摘要,对于相同的输入,哈希函数可以生成相同的摘要(数字指纹),需要注意的是这个过程并不可逆(不能通过摘要计算出输入的内容)。举一个简单的例子,用户注册时我们希望在数据库中保存用户的密码,很显然我们不能将用户密码直接保存在数据库中,这样可能会导致用户隐私的泄露,所以在数据库中保存用户密码时,通常都会将密码的“指纹”保存起来,用户登录时通过哈希函数计算密码的“指纹”再进行匹配来判断用户登录是否成功。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5003

Linux 2.4与2.6 进程调度程序的分析与研究

  摘 要:   本文分析了Linux 2.4和Linux 2.6进程调度程序,并对进程调度程序的执行时间和执行频率进行了分析和研究。      关键词:Linux 2.4 Linux 2.6 调度程序 执行时间 执行频率      1. 引 言      进程调度的研究是整个操作系统理论的核心[1],在多进程的操作系统中,进程调度是一个全局性的、关键性的问题...

weixin_33698043的博客 371

【RT-DETR有效改进】手把手带你调参RT-DETR,1:1复现官方版本实验环境

本文是带大家进行调参,利用ultralytics仓库1:1复现RT-DETR官方实验环境,从而在后期发表论文 的时候省去一些不必要的麻烦,例如被审稿人提出质疑,本文的调参内容均有依据,根据RT-DETR官方Github上发布的版本进行设置本文的调参以ResNet18为例,其余的何其的调参基本一致。RT-DETR剑指论文专栏,持续复现各种顶会内容——论文收割机RT-DETR。

Snu77的博客 9927

Linux的进程调度算法简介

文章目录一、调度算法的原理和分类1.进程调度简介2.按不同需求对调度的进程分类3.调度算法分类二、使用步骤1.引入库1.引入库总结 一、调度算法的原理和分类 1.进程调度简介   进程调度的研究是整个操作系统理论的核心,在多进程的操作系统中,进程调度是一个全局性的、关键性的问题,它对系统的总体设计、系统的实现、功能设置以及各方面的性能都有着决定性的影响。进程运行需要各种各样的系统资源,如内存、文件、打印机和最宝贵的CPU等,所以说,调度的实质就是资源的分配。系统通过不同的调度算法(Scheduling A

无知亦乐 8126

STM32F407中文手册

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

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

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

科普文:软件架构之Linux系列【Linux进程调度:探索内核核心机制】

进程调度是操作系统最重要的内容之一,也是学习操作系统的重点和难点。关于进程调度,我们首先就会问出一些问题,什么是进程调度,为什么要进程调度,如何进行调度。下面我们用一幅图把这些问题关联起来:这张图把进程调度的所有问题和知识点都关联了起来,本文后面所有的内容都是对这张图的解释和扩展延伸,下面让我们来一一讲解。⑴什么是调度什么是调度?调度是CPU资源管理器。操作系统的作用之一就是系统资源管理器。CPU是计算机系统中最重要的资源,当然也要管理。所有进程的运行都需要CPU,对CPU该如何管理呢?

为无为,事无事,味无味。 1756

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Linux进程调度:探索内核核心机制

进程调度是操作系统最重要的内容之一,也是学习操作系统的重点和难点。关于进程调度,我们首先就会问出一些问题,什么是进程调度,为什么要进程调度,如何进行调度。下面我们用一幅图把这些问题关联起来:这张图把进程调度的所有问题和知识点都关联了起来,本文后面所有的内容都是对这张图的解释和扩展延伸,下面让我们来一一讲解。⑴什么是调度什么是调度?调度是CPU资源管理器。操作系统的作用之一就是系统资源管理器。CPU是计算机系统中最重要的资源,当然也要管理。所有进程的运行都需要CPU,对CPU该如何管理呢?

深度Linux 1669

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Linux日志——Linux Kernel 2.6进程调度分析

 Linux Kernel 2.6进程调度的分析第一章 Kernel 2.4存在的不足根据对2.4进程调度的分析,我们总结出看出2.4内核总的特点就是:        内核调度简单有效        内核不可抢占但是经过对2.4内核的分析,我们也明显看到了它的缺点:1.调度算法复杂度是O(n),与系统负荷关系较大。而且调度算法在设计上也有缺陷,比如:(1) 2.4进程调度只设置了一个进程就

BIRDYME的专栏 1285

转载 linux2.6内核进程调度

linux2.6内核进程调度  Linux2.4内核进程调度的缺陷:    Linux2.4 内核的进程调度采用时间片轮转和优先级相结合的调度策略,但存在以下几个致命缺陷:    1>调度算法时间复杂度是 O(n)。2.4 内核每次调度都要进行一次循环,耗时与当前就绪进程数有关,因此达不到实时性的要求;时间片重算时必须给 task

abo8888882006的专栏 1357

linux 2.6内核进程调度,linux2.6内核进程调度

Linux2.4内核进程调度的缺陷:Linux2.4 内核的进程调度采用时间片轮转和优先级相结合的调度策略,但存在以下几个致命缺陷:1>调度算法时间复杂度是 O(n)。2.4 内核每次调度都要进行一次循环,耗时与当前就绪进程数有关,因此达不到实时性的要求;时间片重算时必须给 task_struct 结构和就绪进程队列上锁.2>不提供抢占式调度,会导致大量的竞争,使就绪队列成为一个明显的...

weixin_35741812的博客 340

linux2.6进程调度,LinuxKernel2.6进程调度有何特点?

第一章 Kernel 2。4存在的不足  根据对2。4进程调度的分析,我们总结出看出2。4内核总的特点就是:  内核调度简单有效  内核不可抢占  但是经过对2。4内核的分析,我们也明显看到了它的缺点:  1。调度算法复杂度是O(n),与系统负荷关系较大。而且调度算法在设计上也有缺陷  ,比如:  (1) 2。4进程调度只设置了一个进程就绪队列,这样有的进程用完了自己时间片以后还要呆在就绪进程队列...

weixin_39846191的博客 161

Linux进程调度(1):CFS调度器的设计框架

1. 概述 对于分时操作系统而言,表面上看起来是多个进程同时在执行,而在系统内部则进行着从一个进程到另一个进程的切换动作。这样的进程并发执行涉及到进程切换(process switch)和进程调度(process scheduling)两大问题。其中进程调度是操作系统的核心功能,它...

chuifuhuo6864的博客 188

linux深入分析进程调度

本文从 Linux 2.4 调度系统的缺陷入手,详细分析了 Linux 2.6 调度系统的原理和实现细节,并对与调度系统相关的负载平衡、NUMA 结构以及实时性能进行了分析和评价。 1. 前言 Linux 的市场非常广阔,从桌面工作站到低端服务器,它都是任何商用操作系统的有力竞争对手。目前,Linux 正全力进军嵌入式系统和高端服务器系统领域,但它的技术缺陷限制了它的竞争力:缺乏对

职场里拉开差距的不是知识,而是认知! 4722

2.4和2.6在任务调度上的不同

检查点: A) 返回用户空间/返回内核空间: ----2.4 :只在返回user space的时候才会检查任务是否需要被调度. ----2.6:除了保留这个检查点,新增了返回内核空间的检查点, 这个检查点调用preempt_schedule_irq,这就是抢占式调度. 2.6中调用__schedule前有个关键的操作, add_preempt_count(PREEMPT_ACTIVE),这标志这此

hanwei_1049的专栏 483

linux进程调度

Linux 2.6 调度系统分析   http://www.ibm.com/developerworks/cn/linux/kernel/l-kn26sch/index.htmlLinux 2.4调度系统分析 http://www.ibm.com/developerworks/cn/linux/kernel/l-k24sch/index.htmlProcess Scheduling   ...

micro9981的专栏 117

[Linux]——Linux下的进程调度

进程调度 在多进程的操作系统中,进程调度是一个全局性、关键性的问题,他对系统的总体设计、系统的实现和功能设置以及各个方面的性能都有着决定性的作用。本博客笔者就对进程的调度这一知识点进行总结,不过为了简单起见,我们先从Linux内核2.4中调度介绍起,将原理说清楚后介绍更高级的Linux2.6内核调度算法。 什么是一个好的调度算法? 一个好的调度算法说明白点其实就是能够更合理的分配系统资源,所以调度...

lucky52529的博客 580

Linux 2.4调度系统分析--转

Linux 2.4调度系统分析--转 http://www.ibm.com/developerworks/cn/linux/kernel/l-k24sch/index.html 杨沙洲 (pubb@163.net)国防科技大学计算机学院   简介: 本文详尽地分析了Linux 2.4内核中调度系统的工作原理,特别是i386体系结构下SMP系统的调度表现。通过对2.4

zdy0_2004的专栏 538
上一篇: Linux 2.4进程调度分析 3
下一篇: Linux 2.4进程调度分析 8
thefirstwind
博客等级 码龄25年 213粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值