华的专栏

讨论与进步

定时器函数执行原理揭秘

我们总是在无法满足条件的时候调用sleep()是系统睡眠,在编写网络程序的时候,总是调用poll、select,想明白内核是如何实现基于精确时间的调度操作吗?或许我们该交流交流... 1 前言 延期执行有两种: 第一种是不需要精确地时间控制,比如软中断和tasklet机制,在每个异步中断处理...

2016-05-24 10:24:54

阅读数:3376

评论数:0

Linux内部的时钟处理机制全面剖析

在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等。所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统的运作方式。本文分析了 Linux 2.6.25 内核的时钟处理机制,首先介绍了在计算机系统中的一些硬件计时器,然后重点介绍了 L...

2016-05-24 10:22:32

阅读数:1723

评论数:0

linux动态时钟探索

在早期的linux内核版本的时间概念都是由周期时钟提供的。虽然比较有效,但是,对于关注能耗电量的系统上,就不能满足长时间休眠的需求,因为周期系统要求必须在一定的频率下,周期性的处于活动状态。因此,linux提出了tickless system,即无时钟系统。其关键就是判定系统当前是否无事可做,若是...

2016-05-23 10:15:43

阅读数:214

评论数:0

初始化定时器中断

5.10.4 初始化定时器中断 回到start_kernel,612行time_init函数: void __init time_init(void) {        late_time_init = x86_late_time_init; }   ...

2016-05-10 23:05:29

阅读数:237

评论数:0

Linux时间子系统之(四):timekeeping

一、前言 timekeeping模块是一个提供时间服务的基础模块。Linux内核提供各种time line,real time clock,monotonic clock、monotonic raw clock等,timekeeping模块就是负责跟踪、维护这些timeline的,并且向其他...

2016-05-10 22:52:03

阅读数:1009

评论数:0

tick_init 函数

static struct notifier_block tick_notifier = { .notifier_call = tick_notify, }; //函数所在文件 //  kernel\time\tick-common.c /**  * tick_init - ini...

2016-05-08 08:19:33

阅读数:564

评论数:0

late_time_init

在timer_init()中,我们将late_time_init初始化为x86_late_time_init(): [cpp] view plain copy static __init void x86_late_time_init(voi...

2016-01-29 10:14:14

阅读数:576

评论数:0

Linux时间子系统之一:clock source(时钟源)

clock source用于为linux内核提供一个时间基线,如果你用linux的date命令获取当前时间,内核会读取当前的clock source,转换并返回合适的时间单位给用户空间。在硬件层,它通常实现为一个由固定时钟频率驱动的计数器,计数器只能单调地增加,直到溢出为止。时钟源是内核计时的基础...

2016-01-23 10:15:43

阅读数:953

评论数:0

Linux时间子系统之二:表示时间的单位和结构

人们习惯用于表示时间的方法是:年、月、日、时、分、秒、毫秒、星期等等,但是在内核中,为了软件逻辑和代码的方便性,它使用了一些不同的时间表示方法,并为这些表示方法定义了相应的变量和数据结构,本节的内容就是阐述这些表示方法的意义和区别。 /**********************...

2016-01-23 10:14:52

阅读数:578

评论数:0

Linux时间子系统之三:时间的维护者:timekeeper

本系列文章的前两节讨论了用于计时的时钟源:clocksource,以及内核内部时间的一些表示方法,但是对于真实的用户来说,我们感知的是真实世界的真实时间,也就是所谓的墙上时间,clocksource只能提供一个按给定频率不停递增的周期计数,如何把它和真实的墙上时间相关联?本节的内容正是要讨论这一点...

2016-01-23 10:13:54

阅读数:464

评论数:0

Linux时间子系统之四:定时器的引擎:clock_event_device

早期的内核版本中,进程的调度基于一个称之为tick的时钟滴答,通常使用时钟中断来定时地产生tick信号,每次tick定时中断都会进行进程的统计和调度,并对tick进行计数,记录在一个jiffies变量中,定时器的设计也是基于jiffies。这时候的内核代码中,几乎所有关于时钟的操作都是在machi...

2016-01-23 10:12:57

阅读数:325

评论数:0

Linux时间子系统之五:低分辨率定时器的原理和实现

利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。所谓低分辨率定时器,是指这种定时器的计时单位基于jiffies值的计数,也就是说,它的精度只有1/HZ,假如你的内核配置的HZ是1000,那意味着系统中的低分辨率定时器的精度就是1ms。早期的内核版本中,内核并不支持高精度定时器,理所当...

2016-01-23 10:12:05

阅读数:387

评论数:0

Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现

上一篇文章,我介绍了传统的低分辨率定时器的实现原理。而随着内核的不断演进,大牛们已经对这种低分辨率定时器的精度不再满足,而且,硬件也在不断地发展,系统中的定时器硬件的精度也越来越高,这也给高分辨率定时器的出现创造了条件。内核从2.6.16开始加入了高精度定时器架构。在实现方式上,内核的高分辨率定时...

2016-01-23 10:10:58

阅读数:1728

评论数:0

Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()

我们已经在前面几章介绍了低分辨率定时器和高精度定时器的实现原理,内核为了方便其它子系统,在时间子系统中提供了一些用于延时或调度的API,例如msleep,hrtimer_nanosleep等等,这些API基于低分辨率定时器或高精度定时器来实现,本章的内容就是讨论这些方便、好用的API是如何利用定时...

2016-01-23 10:09:57

阅读数:701

评论数:0

Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)

在前面章节的讨论中,我们一直基于一个假设:Linux中的时钟事件都是由一个周期时钟提供,不管系统中的clock_event_device是工作于周期触发模式,还是工作于单触发模式,也不管定时器系统是工作于低分辨率模式,还是高精度模式,内核都竭尽所能,用不同的方式提供周期时钟,以产生定期的tick事...

2016-01-23 10:08:33

阅读数:473

评论数:0

RTC系统

一. RTC及驱动简介         RTC即real time clock实时时钟,主要用于为操作系统提供可靠的时间;当系统处于断电 的情况下,RTC记录操作系统时间,并可在电池供电情况下继续正常工作,当系统正常启动后,系统可从RTC读取时间信息,来确保断电后时间运行连续性。       ...

2015-12-08 23:09:00

阅读数:270

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭