计时器发出信号,表示添加它并将其从可中断的睡眠中唤醒

时间:2018-06-04 10:12:09

标签: linux linux-kernel linux-device-driver

我正在学习Linux设备驱动程序,特别是计时器和等待队列。 我希望它们在单个字符驱动程序中一起工作,我可以使用IO控制命令让驱动程序进入睡眠状态,同时我继续使用计时器在用户区域中获得fasync中断。 我注意到,如果我使用

wait_event_interruptible();

然后当计时器到期时,即使条件尚未满足,驱动程序也会退出等待,返回码为-512。但是,如果我使用

wait_event();
然后问题就解决了。我读到了wake_up_event_interruptible() 如果中断唤醒进程,则返回非零返回码。

我的理解是,计时器中断了添加它的过程(我在文本中找不到任何证据),因为我的理解计时器功能变得独立于添加它的进程状态。

1 个答案:

答案 0 :(得分:1)

来自Following are the relations. I am taking the value of P1, rho1 and V1 from the user and trying the find out the rest three :当信号等待当前内核进程时,函数wake_up_event_interruptible()返回-ERESTARTSYS(即-512)。

内核定时器(添加setup_timer)会中断当前内核进程的执行,而与其状态无关。更具体地说,从code for wait_event_interruptible开始,内核有三个队列:任务队列,tasklet(从内核2.3.43开始)和内核定时器。 (简单来说)当内核定时器到期时,CPU分支到中断处理例程,该例程将当前上下文和分支保存到定时器注册的回调函数。处理完中断后,调度程序决定哪个任务让CPU运行。