内核函数超时

内核函数超时

我正在尝试在内核中为 ac 函数添加超时。

我想做一些类似try_until_timeout以下伪代码的功能:

void myfunction() {/* [...] */}

void myfunction_cleanup() {/* [...] */}

int main( void ) {
    boolean hasFinished = try_until_timeout(myfunction, HZ/10 ) // The task has 100 ms of processor time to complete
    if(!hasFinished) { // if the task have timeouted
        hasFinished = try_until_timeout(myfunction_cleanup, HZ/10 ) // The task has 100 ms of processor time to come back to a clean state
        if(!hasFinished) { // if the cleanup also timeouted
            printk(KERN_WARN "Task and cleanup failed to finish in time. Aborting.");
            my_kill()
        }
    }    
}

在某些方面,我的需求有点相似,pthread_timedjoin_np只是出于性能原因我想避免创建新线程。

但我不知道该怎么做干净地在内核中。我认为可以通过在调用函数之前添加一个timer_list并在调用之后删除它来实现。如果达到超时,可能可以修改下一条指令的值$eip,但这种方法非常肮脏、过度杀伤且不可移植,因此我想找到一个更干净的解决方案来实现同样的事情......

答案1

您在内核上有特定的函数来管理计时器,在您的情况下,您应该检查函数 mod_timer、setup_timer 和 del_timer 的超时。

相关内容