Linux时间管理架构详解
1. 64位计数器的读取与同步
在32位架构中,对64位变量的操作无法原子性地完成。因此,每次对整个64位进行读取操作时,都需要某种同步技术,以确保在读取两个32位的半计数器时,计数器不会被更新。这导致每次64位读取操作明显慢于32位读取操作。
下面的 get_jiffies_64() 函数用于读取 jiffies_64 的值并返回:
unsigned long long get_jiffies_64(void)
{
unsigned long seq;
unsigned long long ret;
do {
seq = read_seqbegin(&xtime_lock);
ret = jiffies_64;
} while (read_seqretry(&xime_lock, seq));
return ret;
}
这个64位读取操作由 xtime_lock 顺序锁保护。该函数会不断读取 jiffies_64 变量,直到确定它没有被其他内核控制路径同时更新。
相反,增加 jiffies_64 变量的关键区域必须通过 write_seqlock(&xtime_lock) 和 write_sequnlock(&xtime_lock)
超级会员免费看
订阅专栏 解锁全文
11万+

被折叠的 条评论
为什么被折叠?



