用户空间应用中创建一个Timer(alarm/setitimer/POSIX Timer等等),然后程序继续执行;
内核进入创建/设置Timer系统调用,开始计时,在超时后通过何种方式通知用户空间;
用户空间又是如何执行回调函数的。
下面就着重这个流程,梳理一下Timer周期中用户空间和内核空间涉及到的相关模块。
1. 总体框架
关注的Timer(alarm/setitimer/POSIX Timer),都在libc/librt/libphtread中定义。librt是POSIX.1b Realtime扩展的实现,这其中就包括POSIX Timer。
其中alarm/setitimer都调用libc,POSIX Timer调用librt/libpthread。
总体框架如下:
?应用调用库通过系统调用创建Timer,同时自身注册信号处理函数。
?库提供通用接口,转换成系统调用。
?内核Timer相关系统调用(setitimer/timer_create),通过hrtimer创建相应的定时器,在超时后调用hrtimer超时函数发送signal给用户空间进程。
?用户空间进程在收到信号之后,执行对应的信号处理函数。
至此,Timer一个闭环完成。
下面分alarm/setitimer和POSIX Timer两种类型的Timer,来介绍其流程。
2. alarm/setitimer流程
3. POSIX Timer流程
时间: 2024-10-12 13:05:44