哪个内核函数调用了在用户空间实现的timer_settime()和定时器处理程序?

问题描述 投票:0回答:2

我有一个多线程程序,我使用

timer_create()
函数在主线程中创建了一个计时器。然后我使用
timer_settime()
功能设置计时器。当计时器在计时器持续时间后到期时,它会调用注册的计时器处理程序函数。

这是我的代码片段:

#define CLOCKID CLOCK_REALTIME
#define SIG SIGRTMIN
int ret;
timer_t timerid;
struct sigevent sev;
struct itimerspec its;

sigset_t mask;
struct sigaction sa;


static void handler(int sig, siginfo_t *si, void *uc)
{

}

void *threadA(void *data_)
{

      while(1)
      {

        its.it_value.tv_sec = 0;
        its.it_value.tv_nsec = DELAY1;
        its.it_interval.tv_sec = 0;
        its.it_interval.tv_nsec = 0;

        ret = timer_settime(timerid, 0, &its, NULL);
        if ( ret < 0 )
            perror("timer_settime");
     }
}

int main(int argc, char *argv[])
{
      sa.sa_flags = SA_RESTART;
      sa.sa_sigaction = handler;
      sigemptyset(&sa.sa_mask);
      err = sigaction(SIG, &sa, NULL);
      if (0 != err) {
           printf("sigaction failed\n"); }

      sev.sigev_notify = SIGEV_SIGNAL;
      sev.sigev_signo = SIG;
      sev.sigev_value.sival_ptr = &timerid;
      ret = timer_create(CLOCKID, &sev, &timerid);
      if ( ret < 0 )
           perror("timer_create");

}

我想知道当我在 C 程序中调用

timer_create()
timer_settime()
函数时,在内核空间中调用了哪些函数。

另外,当定时器到期时,哪个内核函数负责调用定时器处理程序?

include/linux/posix-clock.h
文件中,我找到了以下定义,但没有这些函数的定义。

/**
 * struct posix_clock_operations - functional interface to the clock
 * @timer_create:   Create a new timer

 * @timer_settime: Set a timer's initial expiration and interval
 */     

struct posix_clock_operations {
    struct module *owner;

    int  (*timer_create) (struct posix_clock *pc, struct k_itimer *kit);



    int  (*timer_settime)(struct posix_clock *pc,
                          struct k_itimer *kit, int flags,
                          struct itimerspec *tsp, struct
                          timerspec *old);
c linux timer linux-kernel posix
2个回答
0
投票

strace
您的程序,您将看到使用了哪些系统调用。

在某些情况下,这可能取决于您的 libc,因为内核通常提供多种方法来实现某些目标。


0
投票

可以搜索kernel/time/posix-timers.c

 530 SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock,
 531         struct sigevent __user *, timer_event_spec,
 532         timer_t __user *, created_timer_id)

哪个电话

do_timer_create
© www.soinside.com 2019 - 2024. All rights reserved.