Linux 05513606864 xlanchenustc edu cn Spring 2009 v

  • Slides: 44
Download presentation
Linux内核源代码导读 中国科学技术大学计算机系 陈香兰(0551-3606864) xlanchen@ustc. edu. cn Spring 2009

Linux内核源代码导读 中国科学技术大学计算机系 陈香兰(0551-3606864) xlanchen@ustc. edu. cn Spring 2009

v Linux本身只使用RTC获得时间和日期 Ø 阅读mach_get_cmos_time native_get_wallclock v 对应的设备文件为/dev/rtc get_wallclock Ø 可以通过设备文件对其编程 read_persistent_clock v 内核通过0 x

v Linux本身只使用RTC获得时间和日期 Ø 阅读mach_get_cmos_time native_get_wallclock v 对应的设备文件为/dev/rtc get_wallclock Ø 可以通过设备文件对其编程 read_persistent_clock v 内核通过0 x 70和0 x 71两个端口访问RTC v 系统管理员可以通过执行时钟程序设置时钟 timekeeping_init、 timekeeping_resume、 timekeeping_suspend 9/25/2021 Linux内核源代码导读 6

v 在Linux 2. 6. 26中,rdtscll()和rdtscl()用来读取TSC 的值。 rdtscl: 32位 rdtscll: 64位 native_read_tsc 9/25/2021 Linux内核源代码导读 8

v 在Linux 2. 6. 26中,rdtscll()和rdtscl()用来读取TSC 的值。 rdtscl: 32位 rdtscll: 64位 native_read_tsc 9/25/2021 Linux内核源代码导读 8

9/25/2021 Linux内核源代码导读 11

9/25/2021 Linux内核源代码导读 11

9/25/2021 Linux内核源代码导读 12

9/25/2021 Linux内核源代码导读 12

注册时钟源: clocksource_register clocksource_list 按rating排序 9/25/2021 Linux内核源代码导读 17

注册时钟源: clocksource_register clocksource_list 按rating排序 9/25/2021 Linux内核源代码导读 17

又如pit作为时钟源 init_pit_clocksource将会注册此时钟源 9/25/2021 Linux内核源代码导读 19

又如pit作为时钟源 init_pit_clocksource将会注册此时钟源 9/25/2021 Linux内核源代码导读 19

X 86中的时钟中断源及其初始化 start_kernel tick_init 滴答相关 初始化 init_timers 定时机制 相关 初始化 hrtimers_init 高精度定时器 相关 初始化

X 86中的时钟中断源及其初始化 start_kernel tick_init 滴答相关 初始化 init_timers 定时机制 相关 初始化 hrtimers_init 高精度定时器 相关 初始化 timekeeping_init time_initsched_clock_init Xtime相关 调度相关 初始化 hpet_time_init setup_pit_timer 注册pit_clockevent为 Clockevent设备 9/25/2021 Linux内核源代码导读 并设置global_clock_event 23

=&pit_clockevent 需要寻找event_handler什么时候赋值的 9/25/2021 Linux内核源代码导读 24

=&pit_clockevent 需要寻找event_handler什么时候赋值的 9/25/2021 Linux内核源代码导读 24

tick_init调用clockevents_register_notifier注册tick_notifier到 clockevents_chain上 tick_check_new_device tick_setup_periodic notifier_call_chain将会 遍历clockevents_chain __raw_notifier_call_chain tick_set_periodic_handler 设置event_handler = tick_handle_periodic raw_notifier_call_chain clockevents_do_notify tick_periodic

tick_init调用clockevents_register_notifier注册tick_notifier到 clockevents_chain上 tick_check_new_device tick_setup_periodic notifier_call_chain将会 遍历clockevents_chain __raw_notifier_call_chain tick_set_periodic_handler 设置event_handler = tick_handle_periodic raw_notifier_call_chain clockevents_do_notify tick_periodic clockevents_register_device do_timer 9/25/2021 update_process_times Linux内核源代码导读 25

9/25/2021 Linux内核源代码导读 26

9/25/2021 Linux内核源代码导读 26

9/25/2021 Linux内核源代码导读 27

9/25/2021 Linux内核源代码导读 27

9/25/2021 Linux内核源代码导读 28

9/25/2021 Linux内核源代码导读 28

9/25/2021 Linux内核源代码导读 29

9/25/2021 Linux内核源代码导读 29

9/25/2021 Linux内核源代码导读 36

9/25/2021 Linux内核源代码导读 36

动态定时器应用之delayed work 9/25/2021 Linux内核源代码导读 37

动态定时器应用之delayed work 9/25/2021 Linux内核源代码导读 37

动态定时器应用之schedule_timeout 9/25/2021 Linux内核源代码导读 38

动态定时器应用之schedule_timeout 9/25/2021 Linux内核源代码导读 38

缺省为delay_loop 9/25/2021 Linux内核源代码导读 使用tsc时为delay_tsc 40

缺省为delay_loop 9/25/2021 Linux内核源代码导读 使用tsc时为delay_tsc 40

Thanks! The end.

Thanks! The end.