⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c.txt

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻 TXT
字号:
any question,send email to netxiong@263.net

相关文件:
	/include/linux/timer.h

***************************基本数据结构***********************************************
(1):tvec_base_t tvec_bases[NR_CPUS];
	#每一个cpu都有一个tvec_base_t的结构对应。
**************************************************************************************


***********************初始化函数*****************************************************
(1):void __init init_timers(void)
	#对所有的cpu的所有的tvec_bases[]结构进行初始化。
	#init_bh(TIMER_BH, run_all_timers);
**************************************************************************************


****************************一般处理函数**********************************************
(1):static void run_all_timers(void)
	#对所有的cpu上的时间等待队列进行处理。
		#for (i = 0; i < smp_num_cpus; i++)
	#调用__run_timer进行处理
		tvec_base_t *base = tvec_bases + i;
	#	
		 __run_timers(base);

(2):static void __run_timers(tvec_base_t *base)
	#对所有在tv1上的等待队列进行处理
	#head = base->tv1.vec + base->tv1.index;	//取出队列的头指针
	#循环区数据直到回到头指针。
	#fn = timer->function;
         data = timer->data;	//取出处理函数和指针。
	# detach_timer(timer);	//从队列中删除。
	#fn(data)		//执行。

(3):void add_timer(timer_t *timer)
	#把timer加入到timer队列中去。
	#首先检查是否他已经在队列中了
		if (timer_pending(timer))
	                goto bug;
	#调用 internal_add_timer(base, timer);加入
	#参数设置timer->base = base把节点头赋给它的参数。

(4):static inline void internal_add_timer(tvec_base_t *base, timer_t *timer)
	#把timer加入到指定的base中区。
	# list_add(&timer->list, vec->prev);	//先来先服务。

(5):static inline int detach_timer(timer_t *timer)
	#把timer从timer队列中删除。
	#首先检查是否他已经不在队列中了,如果不在了,返回成功。
		if (!timer_pending(timer))
	             return 0;	
	#否则删除list_del(&timer->list);

**************************************************************************************


******************************时钟中断处理函数****************************************
(1):void do_timer(struct pt_regs *regs)
	#(*(unsigned long *)&jiffies)++;	//时标加一
	# mark_bh(TIMER_BH);	//标记timer的bottom half
	# mark_bh(TQUEUE_BH);	//同上
**************************************************************************************


**************************TQUEUE处理函数**********************************************
(1):void tqueue_bh(void)
	#这个就是实事时钟的处理函数。见do_timer时钟中断处理函数。
	#每当一个jiffies发生后,do_timer就标记TQUEUE_BH,
	#调用 run_task_queue(&tq_timer)对tq_timer队列上等待处理的元素进行处理。

(2):void immediate_bh(void)
	#immediate队列的处理函数。
	#调用 run_task_queue(&tq_immediate)对tq_timer队列上等待处理的元素进行处理。
**************************************************************************************




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -