• 初探linux子系统集之timer子系统(三)


        因为现在的linux虽然还是可以使用低精度的timer,但是趋势是高精度hrtimer,所以上一篇试着翻译一下hrtimer的一些介绍,翻译的不是很好,看来英语还得好好学习啊,下面还是好好学习下linux的timer子系统吧,首先对于网上的一些介绍,看下整个框架图:


        从上图可以得知,首先最底层是cpu的本地timer模块了,什么都得依赖于这个最底层硬件。然后是时钟源clock source模块,时钟事件clock event模块了,这两个是一个抽象,能提供时钟的都是时钟源,能触发one-shot或者周期性中断的设备就是时钟事件设备了。hrtimer就是高精度timer了。timekeeping/GTOD是内核时间管理的一个核心部分,没有timerkeeping如其名,就是维持心跳,GTOD主要用来实现设置系统时间,gettimeofday或者修改系统时间settimeofday等。timer wheel是老的架构下的timer子系统,低精度。periodic ticks就是周期性地tick,所以dynamic就是动态的tick了,tick其实翻译为中文就是时钟的滴答声,所以这个也很好理解了,之后再细细讲解这些模块吧。

        既然简单了解了整个timer的框架,那么接下去,我们来看看内核代码中关于timer子系统的源码路径了。

       在linux/kernel/time/下

    obj-y += timekeeping.o ntp.o clocksource.o jiffies.o timer_list.o timecompare.o
    obj-y += timeconv.o posix-clock.o #alarmtimer.o
    
    obj-$(CONFIG_GENERIC_CLOCKEVENTS_BUILD)		+= clockevents.o
    obj-$(CONFIG_GENERIC_CLOCKEVENTS)		+= tick-common.o
    obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)	+= tick-broadcast.o
    obj-$(CONFIG_TICK_ONESHOT)			+= tick-oneshot.o
    obj-$(CONFIG_TICK_ONESHOT)			+= tick-sched.o
    obj-$(CONFIG_TIMER_STATS)			+= timer_stats.o

        有一些代码不在time目录下,而是直接在kernel目录下,hrtimer.c、posix-timers.c等。

        网上关于代码的介绍很详细,这里就直接贴个图了:


        写得很好很详细,不过自己还是得记录下。了解了timer子系统的框架,跟模块的简单介绍,源码的一些介绍,知识点貌似有点多啊。那么接下去还是先看看timer的系统启动流程,然后再分析各个模块的功能吧。

        系统起来后会调用start_kernel,然后接着调用调用tick_init,init_timers,hrtimer_init,timekeeping_init,time_init,具体如下图所示。

        

        其中init_timers相当于time wheel低精度timer,hrtime_init相当于hrtimer高精度timer,以及timekeeping_init就是gtod了和而time_init就是我们所要适配的和平台相关的timer的移植了。

        既然已经了解了基本的功能和代码,也知道了系统启动流程,那么接下去就一个一个来学习了。

  • 相关阅读:
    浅谈Lyndon分解
    【CF914G】Sum the Fibonacci(FWT)
    【洛谷6914】[ICPC2015 WF] Tours(非树边随机边权,树边边权异或)
    【洛谷7143】[THUPC2021 初赛] 线段树(动态规划)
    【洛谷7325】[WC2021] 斐波那契(数论)
    【CF666E】Forensic Examination(广义后缀自动机+线段树合并)
    【CF685C】Optimal Point(二分答案)
    【洛谷7364】有标号二分图计数(多项式开根)
    【CF679E】Bear and Bad Powers of 42(ODT+线段树)
    【洛谷5307】[COCI2019] Mobitel(动态规划)
  • 原文地址:https://www.cnblogs.com/wuyida/p/6299971.html
Copyright © 2020-2023  润新知