转自:http://hi.baidu.com/deep_pro/blog/item/2d6ea0d997f601e538012ff1.html
听说有人抱怨他的Linux服务器或者嵌入式Linux开发板上的时间越来越慢,当时念头一闪,没有多在意
今天顿悟,果然是有道理的
用户空间的延时和定时器,都是靠内核定时器实现的。内核定时器 struct timer_list 以及相关内核api,
init_timer()、add_timer、mod_timer 、del_timer,都依赖于jiffes
一个系统时钟中断,jiffes就加1,每秒将产生 1*HZ 个jiffes
可以说,这个jiffes,也可称为滴答,等于是OS的心跳,靠着这个稳定长期的中断,内核才能够及时从一个时间片到期的进程手中夺回cpu的使用权,进行下一次调度。当然,每一次中断结束或者返回用户空间都可能进入调度,所以这里用词是及时。
2.6.21版本开始支持无滴答内核,据说能够节能。不过我想没有了滴答,内核定时器失效,很多软件怕是要重写了,所以大家都不大关注这个。
常见的计算机系统会带有一个RTC,这个才是可靠的墙上时钟源。
不过访问rtc的速度比较慢,所以只是上电的时候,内核读取一次rtc时间,之后在OS里看到的时间都是靠一个一个jiffes加上去的。
很多时候,为了保护临界资源,不得不关闭所有中断,这个在中断处理函数中尤为常见。那么就有可能在关闭中断后的临界区,发生了系统时钟中断,这次时
钟中断就被忽略了。导致jiffies没有增加,进而影响系统时钟精度。这个概率我只能定性的分析。比如arm上HZ为100,pc上为1000,那么每
隔10ms或者1ms就能有一次时钟中断。而10ms期间,200MHZ的arm芯片大约能执行 0.5M
条指令,正好落在临界区的几百条指令的概率不是很大。但是计算机跑起来微小的误差也是很容易积累的,所以如有必要,可以另开一个守护进程,定时读取rtc
来修正系统时间。
手工验证一下
spinlock_t lock;
unsigned long flags;
static int test_timer_init_module(void)
{
spin_lock_init(&lock);
printk( KERN_DEBUG "Module test_timer init\n" );
spin_lock_irqsave(&lock, flags);
printk( KERN_DEBUG "the jiffies is %ld\n" ,jiffies);
mdelay(2000);
printk( KERN_DEBUG "the jiffies is %ld\n" ,jiffies);
spin_unlock_irqrestore(&lock, flags);
return 0;
}
不加黑色代码,两个jiffes相差 20xx ,pc上HZ为1000,这个结果还是正常的
加上黑色代码,关闭中断2000ms,两个jiffes没有差别
所以写驱动一定要自律,关闭中断后的代码一定要尽可能的简洁迅速
分享到:
相关推荐
在Linux的0号中断是一个定时器中断。...Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入CPU,就可以引发一个中断请求信号,我们就把它叫做时钟中断。 “时钟中断”是特
在Linux操作系统中,时钟中断是系统运行过程中至关重要的一部分,它负责维护系统的时间基准和调度任务。时钟中断是硬件层面触发的一种中断,通常由CPU内部的定时器产生,用于提醒操作系统时间已经流逝,需要执行一些...
中断机构能够检测到各种中断事件的发生,并在这些事件被触发时暂停当前正在执行的任务,转而运行操作系统提供的中断处理程序来处理相应的中断事件。不同的中断事件因其特性不同,需要采取不同的处理方式。 #### ...
在现代计算机系统中,操作系统的时钟中断机制是保证系统时间管理与任务调度得以正常运行的重要组成部分。时钟中断,也称为定时器中断,是一种由硬件定时器产生的周期性中断信号,它允许操作系统执行诸如进程调度、...
时钟系统的作用 1.Q:什么是系统时钟?什么是时钟系统? A:通常所说的系统时钟就是指时钟系统,它是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。 2.Q:时钟系统有什么...
- **时钟中断的作用**:时钟中断对于管理操作系统至关重要,因为许多内核函数依赖于时间中断周期来执行或累积一定数量的时钟节拍数时执行。 综上所述,VxWorks时钟与中断管理是其实时性和稳定性的重要保障。通过对...
根据操作系统课程设计指导书所提供的基础知识,分析文件kernel/sched.c 和include/asm-i386/spinlock.h 中关于Linux的调度和时钟中断的代码,了解一个LINUX操作系统的进程调度以及时钟中断的处理方式,得到相关的...
例如,在Linux系统中,时钟中断会调用调度程序,评估当前运行任务的优先级,如果需要,会切换到另一个就绪状态的任务。 2. **时间管理**:时钟中断是操作系统维护系统时间的基础。每次中断发生时,操作系统会更新...
### Linux操作系统内核的时钟中断机制 #### 摘要 本文主要针对Linux 2.4.0内核的时钟中断机制进行了深入探讨,包括内核如何处理时间、时钟中断以及与时间相关的表示方法。对于那些希望深入了解Linux I/O子系统以及...
在数字时钟的应用中,通常会用到定时器中断,例如定时器0或1,因为它们可以用来生成周期性的时基,用于更新时钟显示。 中断处理的过程包括中断请求、中断响应、中断处理和中断返回四个步骤。当外部或内部中断发生时...
在Linux系统中,时钟管理是一项至关重要的任务,因为它直接影响到系统的正常运行和各种时间相关的应用程序。本文将详细探讨Linux的两个主要时钟——硬件时钟(RTC)和软件时钟(System clock),以及与之相关的概念...
这是一个操作系统实验课上的全部内容,这一实验为时钟中断处理程序和键盘中断响应程序.本次实验的内容为操作系统工作期间,利用时钟中断,在屏幕24行79列位置轮流显示’|’、’/’、’-’和’\’,适当控制显示速度...
文章作者张健、刘青昆、王异奇和周娇来自辽宁师范大学计算机与信息技术学院,他们提出了一种混合多种时钟模式的动态时钟系统。该系统结合了不同的时钟模式,旨在优化Linux的时钟精度,以适应对时间精确度有严格要求...
3. 中断处理:时钟中断处理程序通常会更新系统计时器,处理调度任务,或者更新显示器。处理完成后,需要使用 `IRET` 指令恢复被中断程序的上下文并返回。 三、具体示例 以下是一个简单的8086汇编语言时钟中断处理...
Linux系统中的时钟同步是指将Linux系统的时钟与一个公共的时钟源同步,以确保系统时钟的准确性。时钟同步的方法可以分为两类,一类是使用NTP(Network Time Protocol)服务器来同步时钟,另一类是使用其他方法来同步...
单片机时钟中断是微控制器中非常重要的一个概念,它允许用户在特定的时间间隔内,停止当前程序的运行,并转而执行一段紧急的、预先设定的程序代码。时钟中断的应用在单片机编程中有着广泛的场景,如定时任务、实时性...
总之,理解并掌握ARM9处理器中的系统时钟和定时器对于嵌入式Linux开发者至关重要,因为它们是实现高效、可靠系统的关键组成部分。通过学习和实践,我们可以灵活地利用这些硬件资源,开发出满足各种需求的嵌入式应用...