禁用时钟中断,jiffies就不准了吗? linux 时钟中断 丢失

http://blog.csdn.net/bailyzheng/article/details/8036861


发表于 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。 


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(739) | 评论(0) | 转发(0) |
原文地址:https://www.cnblogs.com/ztguang/p/12648531.html