LInux定时器剖析.ppt

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LInux定时器剖析

Xtime的更新 基本上每个tick更新一次 参见:update_wall_time 根据时钟源来更新xtime的秒数和纳秒数 时钟源 timekeeping_init Xtime相关初始化,并确定Xtime的相关时钟源 kernel/time/timekeeping.c kernel/time/timekeeping.c * 嵌入式OS * X86中的时钟中断源及其初始化 start_kernel init_timers 定时机制 相关 初始化 hrtimers_init 高精度定时器 相关 初始化 timekeeping_init Xtime相关 初始化 time_init hpet_time_init setup_pit_timer 注册pit_clockevent为 Clockevent设备 并设置global_clock_event tick_init 滴答相关 初始化 sched_clock_init 调度相关 时钟初始化 setup_pit_timer 注册pit_clockevent为 Clockevent设备 并设置global_clock_event Pit功能函数确定 time_init_hook()来设置系统时钟中断处理程序。 时钟中断处理函数 =pit_clockevent global_clock_event 在setup_pit_timer中被初始化为pit_clockevent 其event_handler在注册过程中,被初始化为tick_handle_periodic tick_handle_periodic的关键是tick_periodic,该函数 调用do_timer和update_process_times update_process_times tick_periodic tick_set_periodic_handler tick_setup_periodic tick_setup_device tick_check_new_device tick_init调用clockevents_register_notifier注册tick_notifier到 clockevents_chain上 notifier_call_chain将会 遍历clockevents_chain __raw_notifier_call_chain raw_notifier_call_chain clockevents_do_notify clockevents_register_device do_timer 设置event_handler = tick_handle_periodic kernel/timer.c * 嵌入式OS * Update_wall_time()完成变量xtime的更新 kernel/timer.c kernel/time/timekeeping.c * 嵌入式OS * Raise_softirq()激活本地CPU上的软件定时器中断任务队列。 Scheduler_tick该函数使当前进程的时间片计数器减一。 kernel/timer.c * 嵌入式OS * 软定时器和延迟函数 软定时器 动态定时器(内核) 间隔定时器(可以用户) 延迟函数 * 嵌入式OS * 动态定时器 动态定时器被动态的创建和撤销,当前活动的动态定时器个数没有限制 include/linux/timer.h * 嵌入式OS * 动态定时器的数据结构 expires用于和系统核心变量jiffies进行比较。 成员变量function:该函数指针变量保存了内核定时器超时后要执行的函数,即定时器超时处理函数。 成员变量data:该无符号长整型变量用作定时器超时处理函数的参数。 成员变量base:该指针变量表明了该内核定时器节点归属于系统中哪一个处理器,在使用函数init_timer()初始化内核定时器节点的过程中,将该指针指向了一个每处理器变量tvec_bases的成员变量t_base。 创建并激活一个动态定时器 创建一个新的timer_list对象 调用init_timer初始化,并设置定时器要处理的函数和参数 设置定时时间 使用add_timer加入到合适的链表中 通常定时器只能执行一次,如果要周期性的执行,必须再次将其加入链表 * 嵌入式OS * 修改内核定时器timer的超时字段expires int mod_timer(struct timer_list *timer,unsigned long expires):该函数可以修改激活和没有激活的内核定时器的超时时间,并把它们都设置为激活状态。 int del_timer(structtimer_list* timer) 这个函数负

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档