时间子系统13_clockevent周期触发模式

本文详细介绍了Linux内核中时间子系统的时间事件处理,包括设置clockevent周期处理函数、周期任务执行、设备重编程以及广播设备的处理流程。核心函数如`tick_set_periodic_handler`、`tick_handle_periodic`和`tick_do_periodic_broadcast`协同工作,确保系统定时器的准确性和效率。
摘要由CSDN通过智能技术生成
//	设置clockevent周期处理函数
//	函数参数:
//		broadcast,指示此设备是否为全局广播设备
//	调用路径:tick_setup_periodic->tick_set_periodic_handler
1.1 void tick_set_periodic_handler(struct clock_event_device *dev, int broadcast)
{
	if (!broadcast)
		dev->event_handler = tick_handle_periodic;
	else
		dev->event_handler = tick_handle_periodic_broadcast;
}

//	clockevent周期处理函数(非广播设备)
//	函数任务:
//		1.执行周期任务
//		2.如果设备为单触发模式
//			2.1 重编程下一次事件到期时间
2.1 void tick_handle_periodic(struct clock_event_device *dev)
{
	int cpu = smp_processor_id();
	ktime_t next;
	//执行do_timer更新全局事件,更新进程时间
	tick_periodic(cpu);
	//周期模式不需要手动设置下次到期时间,直接退出
	if (dev->mode != CLOCK_EVT_MODE_ONESHOT)
		return;
	//计算下次到期时间
	next = ktime_add(dev->next_event, tick_period);
	for (;;) {
		//重编程设备事件到期
		if (!clockevents_program_event(dev, next, ktime_get()))
			return;
		//重新编程设备失败,说明已经经过一个tick周期,此时执行tick周期任务
		if (timekeeping_valid_for_hres())
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值