时间子系统14_全局时间维护

本文详细介绍了Linux内核中时间子系统如何更新全局时间,包括`tick_do_update_jiffies64`、`do_timer`和`update_wall_time`函数的作用。在这些函数中,更新了`jiffies_64`、墙上时间,并进行了CPU负载计算。同时,涉及到时钟周期、NTP同步以及误差校正等关键操作。
摘要由CSDN通过智能技术生成
//	更新全局时间(由动态时钟调用)
//	函数任务:
//		1.更新last_jiffies_update,记录距离上次更新jiffies经历的ns
//		2.更新jiffies_64,墙上时间,计算cpu负载
//		3.更新下次周期时钟的到期时间
//	注:
//		1.在关中断情况下调用该函数
//		2.last_jiffies_update,记录距离上次更新经历的时钟周期(ns)
1.1 static void tick_do_update_jiffies64(ktime_t now)
{
	unsigned long ticks = 0;
	ktime_t delta;

	write_seqlock(&xtime_lock);
	//距离上次更新jiffies经历的ns
	delta = ktime_sub(now, last_jiffies_update);
	if (delta.tv64 >= tick_period.tv64) {
		//一个时钟周期剩余的ns
		delta = ktime_sub(delta, tick_period);
		//正常情况下,相邻更新的jiffies差一个时钟周期
		last_jiffies_update = ktime_add(last_jiffies_update,
						tick_period);

		//慢速路径:
		//	jiffies距离上次更新的时间超过一个时钟周期
		if (unlikely(delta.tv64 >= tick_period.tv64)) {
			s64 incr = ktime_to_ns(tick_period);
			//剩余的时钟周期
			ticks = ktime_divns(delta, incr);

			last_jiffies_update = ktime_add_ns(last_jiffies_update,
							
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值