0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux调度器的核心scheduler_tick介绍

望获Linux 来源:jf_20082045 作者:jf_20082045 2024-08-22 14:54 次阅读

Linux内核中,scheduler_tick是系统调度的核心组件,负责处理定时器中断、更新任务状态,并决定是否进行任务切换。每当定时器中断发生时,scheduler_tick会被调用,以保障系统按照预定的时间间隔进行调度和时间更新,从而维护时间精度和调度的准确性。

在系统时间管理中,scheduler_tick负责更新系统时间,包括更新时间戳和jiffies(系统时间的单位),为调度提供可靠的数据支持。通过这些精准的时间更新,内核确保其时间管理机制的一致性和准确性,从而为调度决策提供坚实的基础。

scheduler_tick还更新当前进程的时间统计数据,这些数据帮助内核有效地掌握各个进程的运行时间,进而优化调度决策的制定。在资源分配方面,这些时间统计数据确保了CPU时间的合理分配和整体系统的高效运行。

在调度决策过程中,scheduler_tick具有决定性作用。当当前进程的时间片用尽或更高优先级的进程需要运行时,scheduler_tick会调用调度函数选择下一个进程,以确保系统资源的高效利用和任务的连续执行。通过这样的机制,scheduler_tick实现了有效的任务管理和系统性能的提升。

下面我们提供一些代码片段来帮助理解。

以下是 scheduler_tick 的代码分析,假设我们有如下函数:

void scheduler_tick(void)

{

struct rq *rq = this_rq(); // 获取当前运行队列

struct task_struct *p = rq->curr; // 获取当前进程

// 更新当前进程的运行时间

update_curr(rq);

// 统计系统时间

account_system_time();

// 检查是否需要进行任务切换

if (need_resched())

schedule(); // 调用调度函数

// 更新系统时间

tick_update();

}

1. update_curr(rq)

static inline void update_curr(struct rq *rq)

{

struct task_struct *p = rq->curr;

unsigned int delta_exec;

delta_exec = rq->clock - p->se.exec_start;

p->se.exec_start = rq->clock;

p->se.sum_exec_runtime += delta_exec;

}

作用:更新当前进程 p 的执行时间。

delta_exec 是当前时间与进程上次更新时间的差值

p->se.sum_exec_runtime 是进程的累计运行时间。

重要性:准确记录进程的运行时间对于调度决策和性能分析非常重要。

2. account_system_time()

void account_system_time(void)

{

// 这里可能包括对系统时间的处理

// 例如更新系统时间统计、处理内核时间等

}

作用:负责更新系统时间的相关统计数据。可能涉及到系统时间的记录、计算等。

重要性:确保系统时间的准确性,并为调度和时间管理提供支持。

3. need_resched()

bool need_resched(void)

{

return !!(current->sched_flags & SCHED_FLAG_YIELD);

}

作用:判断当前系统是否需要进行任务切换。SCHED_FLAG_YIELD 是调度标志,表示当前进程可能需要让出 CPU。

重要性:决定是否需要进行任务切换,以确保系统的公平性和响应性。

4. tick_update()

void tick_update(void)

{

// 更新系统时间计数器,如 jiffies 等

jiffies++;

}

作用:更新系统的时间计数器。例如,jiffies 是内核用来跟踪时间的一个变量,每次定时器中断都会增加。

重要性:确保系统时间的准确性,提供时间基础给其他内核功能。

总结

scheduler_tick在Linux内核中扮演着关键角色。它不仅负责处理定时器中断和更新系统时间,还记录进程的运行时间,并决定是否需要进行任务切换。通过这些功能,scheduler_tick有效保障了系统的时间管理和任务调度,使操作系统能够高效、准确地管理多个进程。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1362

    浏览量

    40207
  • Linux
    +关注

    关注

    87

    文章

    11217

    浏览量

    208825
  • 调度器
    +关注

    关注

    0

    文章

    98

    浏览量

    5235
收藏 人收藏

    评论

    相关推荐

    深入探讨Linux的进程调度

    Linux操作系统作为一个开源且广泛应用的操作系统,其内核设计包含了许多核心功能,而进程调度Scheduler)就是其中一个至关重要的模
    的头像 发表于 08-13 13:36 888次阅读
    深入探讨<b class='flag-5'>Linux</b>的进程<b class='flag-5'>调度</b><b class='flag-5'>器</b>

    Linux系统调度是实现特性的关键部分

    系统资源的使用,提高系统使用效率。  Linux内核中实现了Scheduler Classes,来实现多个调度类(Scheduler class)的协同工作,每个不同的
    发表于 07-05 07:05

    Linux的0号中断有何作用

    系统日期和时间,使系统时间不断地得到跳转。另外该中断的中断处理函数除了更新系统时间外,还需要更新本地CPU统计数。指的是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0,进程则被调度
    发表于 07-29 08:38

    调度的原理及其任务调度代码实现

    一、介绍调度是常用的一种编程框架,也是操作系统的拆分多任务的核心,比如单片机的裸机程序框架,网络协议栈的框架如can网关、485网关等等,使用场合比较多,是做稳定产品比较常用的编程技
    发表于 02-17 07:07

    RT-Thread每一次tick中断应该不会同时执行两种调度

    系统时基更新函数void rt_tick_increase(void){struct rt_thread thread;/ 系统时基计数加 1 操作,rt_tick 是一个
    发表于 10-08 14:42

    关于RTT中scheduler线程调度的学习

    RTT中的scheduler并不是以一个类的形式存在,更类似传统的过程编程。个人认为这一点在编程风格上和其他的组件是不够统一的。 下面引用一段RTT官网上,关于RTT线程调度介绍。 RTT中提
    发表于 04-27 14:19

    Linux内核的DL调度的细节和怎么样使用DL调度

    Linux内核的DL调度是一个全局EDF调度,它主要针对有deadline限制的sporadic任务。注意:这些术语已经在本系列文章的第
    的头像 发表于 07-16 10:54 5450次阅读
    <b class='flag-5'>Linux</b>内核的DL<b class='flag-5'>调度</b><b class='flag-5'>器</b>的细节和怎么样使用DL<b class='flag-5'>调度</b><b class='flag-5'>器</b>?

    详细解读Linux 2.6 完全公平调度算法CFS(Completely Fair Scheduler

    早期的 Linux 调度器使用了最低的设计,它显然不关注具有很多处理的大型架构,更不用说是超线程了。
    发表于 05-10 11:05 4482次阅读

    需要了解的linux HZ Tick Jiffies

    Jiffies为Linux核心变数(32位元变数,unsigned long),它被用来纪录系统自开几以来,已经过多少的tick。每发生一次timer interrupt,Jiffies变数会被加一。
    发表于 05-15 09:07 1622次阅读

    更改 Linux I/O 调度来改善服务性能

    为了从 Linux 服务榨取尽可能多的性能,请了解如何更改 I/O 调度以满足你的需求。Linux I/O
    发表于 04-02 14:46 248次阅读

    英创信息技术Linux系统调度简介

    系统资源的使用,提高系统使用效率。 Linux内核中实现了Scheduler Classes,来实现多个调度类(Scheduler class)的协同工作,每个不同的
    的头像 发表于 02-05 10:31 1211次阅读
    英创信息技术<b class='flag-5'>Linux</b>系统<b class='flag-5'>调度</b>简介

    从零开始入门 K8s | 调度调度流程和算法介绍

    等,并介绍了两种方式用于实现自定义调度能力。 调度流程 调度流程概览 Kubernetes 作为当下最主流的容器自动化运维平台,作为 K8s 的容器编排的
    发表于 03-09 17:04 1161次阅读

    kube-scheduler v1.21 的调度流程分析

    Scheduler 在整个系统中承担了“承上启下”的重要功能。“承上”是指它负责接受 Controller Manager 创建的新 Pod,为其安排 Node;“启下”是指安置工作完成后,目标
    的头像 发表于 08-22 09:15 1111次阅读

    NVIDIA Triton 系列文章(11):模型类别与调度-1

    在 Triton 推理服务的使用中,模型(model)类别与调度scheduler)、批量处理(batcher)类型的搭配,是整个管
    的头像 发表于 01-11 06:35 814次阅读

    实时操作系统的滴答Tick设置多少才合适?

    实时操作系统的滴答Tick设置多少才合适? 介绍实时操作系统中Tick的设置。 在实时操作系统中,Tick是指操作系统的时间基准,它是操作系统用来衡量时间、同步操作和
    的头像 发表于 10-29 16:33 833次阅读