semaphore Linux时间子系统(五) POSIX Clock(4)

电脑杂谈  发布时间:2018-02-14 21:11:13  来源:网络整理

3、monotonic raw clock的定义如下:

semaphore_linux semaphore_Linuxsemaphore

struct k_clock clock_monotonic_raw = {

.clock_getres = hrtimer_get_res,

.clock_get = posix_get_monotonic_raw,

};

posix_get_monotonic_raw函数是调用timekeeping模块getrawmonotonic接口函数实现获取monotonic raw clock当前时间数值的。和monotonic clock一样,不能设定。semaphore和monotonic clock不同的是该clock没有timer相关的callback函数。

4、coarse clock

struct k_clock clock_realtime_coarse = {

.clock_getres = posix_get_coarse_res,

.clock_get = posix_get_realtime_coarse,

};

struct k_clock clock_monotonic_coarse = {

.clock_getres = posix_get_coarse_res,

.clock_get = posix_get_monotonic_coarse,

};

这两个clock的精度都是和tick相关的,KTIME_LOW_RES定义就是tick的纳秒数值。clock_get函数分别调用current_kernel_time和get_monotonic_coarse获取当前时间点的值。semaphore

CLOCK_BOOTTIME和CLOCK_TAI的clock实现非常简单,大家自行阅读代码就OK了。

四、CPU-time clock

1、概述

从用户空间的角度看,有两种CPU-time clock的应用场景:

(1)调用clock_xxx函数并传递CLOCK_PROCESS_CPUTIME_ID或者CLOCK_THREAD_CPUTIME_ID给该函数

(2)调用clock_getcpuclockid或者pthread_getcpuclockid函数来获取指定进程或者线程的clock id,之后调用clock_xxx函数并传递该clock id参数

应对第一种场景,系统初始化的时候会调用init_posix_cpu_timers函数对静态定义的CPU-time clock进行注册。对于第二种场景,内核静态定义了一个clock_posix_cpu的clock来应对这种需求。

2、指定进程或者线程的CPU-time clock

内核静态定义了一个clock如下(去掉了timer的callback函数):

struct k_clock clock_posix_cpu = {

.clock_getres = posix_cpu_clock_getres,

.clock_set = posix_cpu_clock_set,

.clock_get = posix_cpu_clock_get,

.nsleep = posix_cpu_nsleep,

.nsleep_restart = posix_cpu_nsleep_restart,

};

(1)获取精度信息

static int posix_cpu_clock_getres(const clockid_t which_clock, struct timespec *tp)

{

int error = check_clock(which_clock);--------参数校验


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-77921-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...