系统定时器(硬件)以某频率(节拍率)发出时钟中断,间隔时间叫节拍
节拍率:高hz带来更高精度,同时时钟中断处理程序运行更频繁,带来更大系统负担。
实时时钟(RTC):持久存放系统时间,在系统关闭后也可计时(微型电池),系统启动时读取RTC初始化墙上(实际)时间
时钟中断处理程序:
更新系统运行时间:jiffies(系统启动后节拍总数),溢出后回绕为0
更新墙上时间(wall time, 即实际时间,xtime)
减少当前进程的时间片,减到0标记need_resched
更新资源统计量,如当前进程的用户时间和系统时间,不准确,因为一个节拍周期内可能多次进出内核,甚至一个节拍内是不同进程在运行。
均衡各cpu的运行队列。
标记软中断,在后续下半部(软中断)中运行超时(到期)的动态定时器。
(动态/内核)定时器:指定时间点运行某函数,当然会存在延误(时钟中断触发存在精度问题),所有定时器链表形式挂在某个软中断上,运行到此软中断时,找出所有超时定时器并执行。
延迟执行的方式:
忙等:循环中等待一定节拍数耗尽。
短延迟:循环一定次数,以等待一个很短但精度很高的时间,cpu循环一次时间固定(通过时间可算出循环次数)
schedule_timeout: 创建定时器且当先线程睡眠,由定时器唤醒当前线程