カーネル関数のタイムアウト

カーネル関数のタイムアウト

カーネルの 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パフォーマンス上の理由で新しいスレッドを作成したくないことを除いて、いくつかの点で私の要件はかなり似ています。

しかし、私は何をすべきかわかりません。きれいにカーネルから。関数を呼び出す前にタイマーリストを追加して後で削除すると、これが可能だと思います。タイムアウトに達すると、次の命令の値を変更することが可能かもしれませんが、$eipこのアプローチは非常に汚れており、過度で移植性がないため、同じ結果を得るためのよりきれいな解決策を見つけたいと思います。

答え1

カーネルにはタイマーを管理する特定の機能があります。この場合、mod_timer、setup_timer、およびdel_timer機能のタイムアウトを確認する必要があります。

関連情報