V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iXingo
V2EX  ›  程序员

关于定时器 Timer 与超时 timeout, 操作系统是如何实现的

  •  
  •   iXingo ·
    iXingo · 2021-09-10 18:10:55 +08:00 · 1714 次点击
    这是一个创建于 1179 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想了解一些底层的细节

    8 条回复    2021-09-13 21:46:56 +08:00
    byaiu
        1
    byaiu  
       2021-09-10 18:12:26 +08:00
    关键词 timer wheel
    高精度另说
    iXingo
        2
    iXingo  
    OP
       2021-09-10 18:44:02 +08:00
    @byaiu log when
    iXingo
        3
    iXingo  
    OP
       2021-09-10 18:44:14 +08:00
    @byaiu 老哥稳
    ToPoGE
        4
    ToPoGE  
       2021-09-11 00:32:59 +08:00 via Android
    以前搞过单片机,定时器是靠晶振震荡周期来实现,不同晶振震荡周期不同,一切的上层应用都是基于这个
    jedihy
        5
    jedihy  
       2021-09-11 05:45:25 +08:00
    时钟中断会定时触发,然后操作系统就可以利用这个中断实现定时器的逻辑。用户态的 timer 实现多种多样,没有仔细研究过。
    jedihy
        6
    jedihy  
       2021-09-11 06:00:40 +08:00
    windows 里面的 WaitForSingleObject,大致是把当前线程状态切换为 waiting,然后交给 scheduler 并告知一个 deadline,然后 scheduler 就可以调度其他线程直到 deadline 到期,把这个等待的线程切换为 running 。
    yolee599
        7
    yolee599  
       2021-09-11 13:32:53 +08:00 via Android
    硬件定时器数量非常有限(一般不超过 5 个),通常是使用一个硬件定时器,设定一个固定的中断周期,比如 1 毫秒。操作系统再实现软件定时器,把所有软件定时器放在一个升序链表中,每次硬件定时器中断来了的时候就检查软件定时器链表中有没有过期的定时器,有就调用这个软件的回调通知应用。软件定时器精度就是硬件定时器的周期
    iXingo
        8
    iXingo  
    OP
       2021-09-13 21:46:56 +08:00
    谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4937 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:58 · PVG 11:58 · LAX 19:58 · JFK 22:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.