Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4602603
  • 博文数量: 385
  • 博客积分: 21208
  • 博客等级: 上将
  • 技术积分: 4393
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-30 13:40
文章分类

全部博文(385)

文章存档

2015年(1)

2014年(3)

2012年(16)

2011年(42)

2010年(1)

2009年(2)

2008年(34)

2007年(188)

2006年(110)

分类:

2008-08-09 12:59:28

有关时钟中断,请多指教

陈老师:
您好,有幸拜读了您的《深入分析Linux内核源码》
一书。在读到时钟中断的时候有个疑惑老是缠绕着我。您在书中提到OS会每十一分钟去刷新RTC的时间,但OS的时钟计数是靠中断来进行的。但如果中断被长时间屏蔽的话,jiffies得不到该有的增加,再用它去刷新RTC的话,岂不是用错误的时间去同步正确的时间吗?希望您能看到我的留言。
lmhlmhlmh@qq.com
顶部
[广告] 推荐个超酷的web2.0相册
陈莉君
版主
Rank: 7Rank: 7Rank: 7


UID 26540
精华 1
积分 2281
帖子 152
LUPA币 2203 点
阅读权限 100
注册 2006-11-9
    
#2
发表于 2008-4-5 11:13  资料 个人空间 短消息
一般来说,RTC是OS 时钟的时间基准,操作系统通过读取RTC来初始化OS时钟,此后二者保持同步运行,共同维持着系统时间。保持同步运行是什么意思呢?就是指操作系统运行过程中,每隔一个固定时间(比如说每隔11分钟)会刷新或校正RTC中的信息。你担心的问题不会出现,因为每一个时钟中断jiffies的值都会增加1。

可以再仔细看看《ULK》第三版的第6章,定时测量。

[ 本帖最后由 陈莉君 于 2008-4-5 11:21 编辑 ]




透析真谛,似拨云穿雾;共享智慧,如春风沐浴

顶部
[广告] 推荐个超酷的web2.0相册
lin_2005
关注开源
Rank: 2



UID 174342
精华 1
积分 104
帖子 4
LUPA币 100 点
阅读权限 20
注册 2008-4-4
   
#3
发表于 2008-4-6 20:47  资料 短消息
仍有疑惑,请陈老师帮忙

我把定时测量这一章看了一下,仍然找不到问题的答案。
我的理解是
      只要时钟中断是可屏蔽的(通过8259A的任何一个引脚申请中断),那么中断的丢失是会有可能的(驱动程序又会经常关中断,这又增加丢失中断的概率)。若此时IRR寄存器的第0位为1(即IRQ0)CPU还没受理的情况下,8254又发送了一个中断请求,它也只是把IRR寄存器的第0位置1,对CPU来说应该无法知道之前置1的那个中断请求。虽然每一次时钟中断,中断服务程序都将jiffies加1,但如果要精确计时的话,应该要准确知道丢失的中断个数(如果有的话),这样才能准确计时,是不是这样子呢?如果是这样的话,软件时间是不可靠的,怎么会用它去写RTC呢?
     让我们想象这么一种极端的情况,若某个程序禁止外部中断,在那里死循环就是不开中断或是过一俩个钟头再开中断,这样即使8254不断地在IRQ0上发中断请求也不会得到受理,等到过了很久才开中断,再把jiffies加一,显然是不合适的.
     到底系统是靠哪种机制 正确计时的,请陈老师帮忙.再一次谢谢陈老师.
顶部
[广告] 推荐个超酷的web2.0相册
陈莉君
版主
Rank: 7Rank: 7Rank: 7


UID 26540
精华 1
积分 2281
帖子 152
LUPA币 2203 点
阅读权限 100
注册 2006-11-9
   
#4
发表于 2008-4-7 18:00  资料 个人空间 短消息
内核中除了使用可编程间隔定时器PIT外,还用到了时间戳计数器TSC(64位),高精度事件定时器HPET和ACPI电源管理定时器。后三种保证精确性。其中有一个mark_offset方法检查自上一个节拍以来是否丢失时钟中断,如果丢失,则更新Jiffies_64。
阅读(2579) | 评论(0) | 转发(0) |
0

上一篇:min宏定义探究

下一篇:__read_mostly variables

给主人留下些什么吧!~~