Linux的时钟处理机制
2.4 硬件时钟处理过程 由2.3.3可知硬件时钟中断的处理函数保存在静态变量 irq0 中,其定义如清 单2-4 清单2-4 变量irq0定义
由定义可知:函数 timer_event_interrupt 为时钟中断处理函数,其定义如 清单2-5 清单2-5 timer_event_interrupt 函数
从代码中可以看出:函数 timer_event_interrupt 实际上调用的是 global_clock_event 变量的 event_handler 成员。那 event_handler 成员指 向哪里呢? 为了说明这个问题,不妨假设系统中使用的是 hpet 时钟。由2.3.3节可知 global_clock_event 指向 hpet 时钟事件设备( hpet_clockevent )。查看 hpet_enable 函数的代码并没有发现有对 event_handler 成员的赋值。所以继 续查看时钟事件设备加入事件的处理函数 tick_notify ,该函数记录了当时钟 事件设备发生变化(例如,新时钟事件设备的加入)时,执行那些操作(参见 2.3.1节),代码如清单2-6 清单2-6 tick_notify 函数
由代码可知:对于新加入时钟事件设备这个事件,将会调用函数 tick_check_new_device 。顺着该函数的调用序列向下查找。 tick_set_periodic_handler 函数将时钟事件设备的 event_handler 成员赋值 为 tick_handle_periodic 函数的地址。由此可知,函数 tick_handle_periodic 为硬件时钟中断发生时,真正的运行函数。 函数 tick_handle_periodic 的处理过程分成了以下两个部分: 全局处理:整个系统中的信息处理 局部处理:局部于本地 CPU 的处理 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |