![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux时间子系统
文章平均质量分 80
nerdX
这个作者很懒,什么都没留下…
展开
-
时间子系统2_tick device管理机制
// 1.每个cpu都具有一个tick_device,维护周期时钟。// 2.tick_device依赖一个clockevent设备,提供周期事件。// 3.cpu电源状态的改变会影响tick_device,通过tick_notifier监听电源状态。// 4.全局广播设备接管进入省电模式cpu的周期时间维护。// 4.broadcast_mask保存开启广播模式的cpu, broadca原创 2013-11-21 19:52:35 · 2670 阅读 · 0 评论 -
时间子系统10_hpet时钟初始化
// 时钟mult :mult/2^shift = ns/cyc // 参考:http://www.bluezd.info/archives/reg_clock_event_device_1// x86平台初始化// 注:arch/x86/kernel/x86_init.c1.1 struct x86_init_ops x86_init __initdata = { ... /原创 2013-11-26 00:34:58 · 2885 阅读 · 0 评论 -
时间子系统8_动态时钟(NO_HZ)
// 高分辨率模式下的周期事件仿真// 通过hrtimer仿真周期时钟,由hrtimer_interrupt作为时钟事件处理函数// 函数任务:// 1.更新jiffies// 2.在irq上下文// 2.1 如果当前处于idle状态// 2.1.1 喂狗softlockup_watchdog,防止误发生softlockup// 2.1.2 更新idle状态经历原创 2013-11-25 12:23:57 · 2378 阅读 · 0 评论 -
时间子系统7_高分辨率定时器处理
// 高分辨率下的定时器软中断// 当增加一个hrtimer到rbtree中后,会raise高分辨率定时器软中断// 函数任务:// 1.关中断下,运行所有hrtimer// 注:// 在hrtimers_init中,open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq); 1.1 static void run_hrtimer_s原创 2013-11-25 10:43:04 · 1750 阅读 · 0 评论 -
时间子系统4_低分辨率定时器处理
// 触发低分辨率定时器软中断// 调用路径:update_process_times->run_local_timers// 注:// 1.update_process_times以HZ频率被调用,因此低分辨率定时器的分辨率为HZ// 2.当未激活高分辨率定时器框架时,高分辨率定时器在时钟中断被运行,因此高分辨率定时器的分辨率也HZ1.1 void run_local_timers原创 2013-11-22 10:28:02 · 1556 阅读 · 0 评论 -
时间子系统13_clockevent周期触发模式
// 设置clockevent周期处理函数// 函数参数:// broadcast,指示此设备是否为全局广播设备// 调用路径:tick_setup_periodic->tick_set_periodic_handler1.1 void tick_set_periodic_handler(struct clock_event_device *dev, int broadcast){原创 2013-11-26 19:41:01 · 2199 阅读 · 0 评论 -
时间子系统17_hard lockup机制
// 使能hard lockup探测// 调用路径:watchdog_enable->watchdog_nmi_enable// 函数任务:// 1.初始化hard lockup检测事件// 2.hard lockup阈值为10s// 2.向performance monitoring子系统注册hard lockup检测事件// 3.使能hard lockup检测事件//原创 2013-11-28 14:38:48 · 2897 阅读 · 0 评论 -
时间子系统16_soft lockup机制
// 1.debug选项LOCKUP_DETECTOR,开启/关闭kernel中的soft lockup和hard lockup探测// 2.实现:kernel/watchdog.c// 3.实现原理:// 1.涉及到了3部分内容:kernel线程,时钟中断,NMI中断// 优先级:kernel线程 < 时钟中断 < NMI中断。// 2.利用它们之间优先级的区别,调试系统运行原创 2013-11-28 13:34:51 · 2518 阅读 · 0 评论 -
时间子系统12_clockevent设备注册
// 向系统注册时钟事件设备// 函数任务:// 1.添加设备到clockevent_devices链表// 2.通知tick device管理机制有clockevent设备注册1.1 void clockevents_register_device(struct clock_event_device *dev){ unsigned long flags; raw_spin_l原创 2013-11-26 19:40:28 · 1626 阅读 · 0 评论 -
时间子系统15_获取系统时间
// 获取系统时间// 注:将timespec转换为timeval1.1 void do_gettimeofday(struct timeval *tv){ struct timespec now; getnstimeofday(&now); tv->tv_sec = now.tv_sec; tv->tv_usec = now.tv_nsec/1000;}// 获取纳秒级系统时原创 2013-11-27 21:51:06 · 1854 阅读 · 0 评论 -
时间子系统9_timekeeper初始化
//Timekeeping// Timekeeping子系统负责更新xtime, 调整误差, 及提供get/settimeofday接口.//Times in Kernel//kernel的time基本类型:// 1) system time// A monotonically increasing value that represents the amount of time th原创 2013-11-25 20:09:32 · 1536 阅读 · 0 评论 -
时间子系统6_高分辨率定时器框架初始化
// 高分辨率定时器框架初始化// 调用路径:start_kernel->hrtimers_init// 函数任务:// 1.创建cpu时钟基础// 2.注册监听cpu状态变化// 3.注册高分辨率模式下的定时器软中断// 注:// 1.高分辨率定时器框架的通用部分总是编译进内核// 2.高分辨率定时器框架初始为未激活状态,由低分辨率定时器软中断中切换到高分辨率1.1原创 2013-11-23 10:13:56 · 1624 阅读 · 0 评论 -
时间子系统5_低分辨率切换高分辨率
// 切换低分辨率动态时钟模式、或高分辨率模式// 调用路径:run_timer_softirq->hrtimer_run_pending// 函数任务:// 1.如果高分辨率定时器框架已经激活,则直接返回// 2.切换到高分辨率模式的条件:// 2.1 没有开启低分辨率动态时钟// 2.2 有高分辨率的clocksource// 2.3 clockevent设备支持原创 2013-11-22 20:16:07 · 1857 阅读 · 0 评论 -
时间子系统11_tsc时钟初始化
// tsc时钟源初始化// 调用路径:time_init->tsc_init// 函数任务:// 1.矫正tsc,获取tsc频率,设置cpu频率等于tsc频率// 2.初始化基于tsc的延迟函数// 3.检查tsc的特性// 3.1 tsc之间是否同步// 3.1.1 如果tsc之间不同步,标记tsc不稳定,设置rating=0// 3.2 tsc是否稳定/原创 2013-11-26 00:38:01 · 3853 阅读 · 0 评论 -
时间子系统3_低分辨率定时框架初始化
// 低分辨率定时器框架初始化// 调用路径:start_kernel->init_timers// 函数任务:// 1.创建当前cpu的定时器框架数据结构// 2.监听cpu状态信息// 3.注册低分辨率软中断1.1 void __init init_timers(void){ //创建当前cpu的定时器框架数据结构 int err = timer_cpu_notify(原创 2013-11-21 21:19:31 · 1743 阅读 · 0 评论 -
时间子系统1_lapic时钟初始化
// 参考:http://www.bluezd.info/archives/reg_clock_event_device_1// x86平台初始化// 注:arch/x86/kernel/x86_init.c1.1 struct x86_init_ops x86_init __initdata = { ... //apic控制器初始化 .irqs = { .pre_vector原创 2013-11-21 15:49:20 · 2943 阅读 · 0 评论 -
时间子系统14_全局时间维护
// 更新全局时间// 函数任务:// 1.更新last_jiffies_update,记录距离上次更新jiffies经历的ns// 2.更新jiffies_64,墙上时间,计算cpu负载// 3.更新下次周期时钟的到期时间// 注:// 1.在关中断情况下调用该函数// 2.last_jiffies_update,记录距离上次更新经历的时钟周期(ns)1.1 stati原创 2013-11-27 20:47:56 · 1762 阅读 · 0 评论