Linux内核定时器的实现
由于Linux还不是一个实时的操作系统,因此如果需要更高精度,或者更精确的定时的话,可能就需要打一些实时的补丁,或者用商用版的实时Linux,.
这里内的定时器最小间隔也就是1个tick.
这里还有一个要注意的,我这里的分析并没有分析内核新的hrt 定时器.这个定时器是Monta Vista加入到内核的一个高精度的定时器的实现.
先来看几个相关的数据结构.
///这个是一个最主要的数据结构,表示一个完整的定时器级联表
下面来看tvec和tvec_root的结构:
这里内的定时器最小间隔也就是1个tick.
这里还有一个要注意的,我这里的分析并没有分析内核新的hrt 定时器.这个定时器是Monta Vista加入到内核的一个高精度的定时器的实现.
先来看几个相关的数据结构.
///这个是一个最主要的数据结构,表示一个完整的定时器级联表
- struct tvec_base {
- ///自旋锁
- spinlock_t lock;
- ///表示由本地cpu正在处理的定时器链表
- struct timer_list *running_timer;
- ///这个表示当前的定时器级联表中最快要超时的定时器的jiffer
- unsigned long timer_jiffies;
- ///下面表示了5级的定时器级联表.
- struct tvec_root tv1;
- struct tvec tv2;
- struct tvec tv3;
- struct tvec tv4;
- struct tvec tv5;
- } ____cacheline_aligned;
struct tvec_base { ///自旋锁 spinlock_t lock; ///表示由本地cpu正在处理的定时器链表 struct timer_list *running_timer; ///这个表示当前的定时器级联表中最快要超时的定时器的jiffer unsigned long timer_jiffies; ///下面表示了5级的定时器级联表. struct tvec_root tv1; struct tvec tv2; struct tvec tv3; struct tvec tv4; struct tvec tv5; } ____cacheline_aligned;
下面来看tvec和tvec_root的结构:
- struct tvec {
- struct list_head vec[TVN_SIZE];
- };
- struct tvec_root {
- struct list_head vec[TVR_SIZE];
- };
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20