码迷,mamicode.com
首页 > 系统相关 > 详细

Linux时间子系统之四:Timer在用户和内核空间流程

时间:2017-11-30 17:22:16      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:arm   bsp   lin   系统   linu   转换   分享   img   调用   

用户空间应用中创建一个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流程

 

Linux时间子系统之四:Timer在用户和内核空间流程

标签:arm   bsp   lin   系统   linu   转换   分享   img   调用   

原文地址:http://www.cnblogs.com/arnoldlu/p/7929611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!