커널 함수 시간 초과

커널 함수 시간 초과

커널의 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 기능의 시간 초과를 확인해야 합니다.

관련 정보