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