1 问题:
为什么jitimer只打印了两行,而jiqtasklet却打印了多行?
原因就是一开始对interruptible_sleep_on()这个函数不理解。他其实就是休眠函数,最综又通过wake_up_interruptible()函数唤醒。
详细解答如下:jitimer是采用了定时器的,而定时器只是在jiffies寄存器到达expires值时启用,如果不修改expires值的话定时器执行函数只会执行一次。再说,在定时器的执行函数中有 wake_up_interruptible()函数唤醒了休眠的主程序。
而jiqtasklet 程序采用的是tasklet机制,程序会一直调度tasklet并执行执行函数。而在执行函数中,只有关键字len > LIMIT 时才会用wake_up_interruptible()函数唤醒了休眠的主程序。所以导致了会执行LIMIT次。
2 为什么有这个问题?
主要是对interruptible_sleep_on()函数不懂。因为在前面讲到休眠时只看到了wait等函数。后仔细看书后才发现,这个是老的历史版本。
3 新发现: 呵呵,又发现一个好东东,发现如果一个函数看代码看不懂,就直接把这个函数放在摆渡里搜索就能够找到这个函数大概是什么作用了,呵呵,站在巨人的肩膀上吧,那样你能看得更远。
为什么jitimer只打印了两行,而jiqtasklet却打印了多行?
原因就是一开始对interruptible_sleep_on()这个函数不理解。他其实就是休眠函数,最综又通过wake_up_interruptible()函数唤醒。
详细解答如下:jitimer是采用了定时器的,而定时器只是在jiffies寄存器到达expires值时启用,如果不修改expires值的话定时器执行函数只会执行一次。再说,在定时器的执行函数中有 wake_up_interruptible()函数唤醒了休眠的主程序。
而jiqtasklet 程序采用的是tasklet机制,程序会一直调度tasklet并执行执行函数。而在执行函数中,只有关键字len > LIMIT 时才会用wake_up_interruptible()函数唤醒了休眠的主程序。所以导致了会执行LIMIT次。
2 为什么有这个问题?
主要是对interruptible_sleep_on()函数不懂。因为在前面讲到休眠时只看到了wait等函数。后仔细看书后才发现,这个是老的历史版本。
3 新发现: 呵呵,又发现一个好东东,发现如果一个函数看代码看不懂,就直接把这个函数放在摆渡里搜索就能够找到这个函数大概是什么作用了,呵呵,站在巨人的肩膀上吧,那样你能看得更远。