인터럽트 핸들러 만들때 do-while 이 시스템 안잡게 하려면?
글쓴이: chxooi / 작성시간: 금, 2010/06/11 - 12:10오후
멍청하게 interrupt 핸들러에 do-while 문을 넣었더니
시스템이 버벅거리면서 늦어지네요..
이거 scheduling 시켜야 하는데...
do-while(1)로처음해보는거라서 버벅거리는것을 어케 고쳐야 하는지 모르겠네요
특정 변수나 , 특정 값이 필요할것같은데.....
일단 간단하게 인터럽트 do-while(1) 이 아니라 handler 가 안에서 CPU 선점 없이 돌게 하려면 어떤 코드를 더 넣어 짜야할까요??
static void test_interrupt(void *data) { int handled=0; do { unsigned int iir; iir = inb(IIR); if (!(iir & 0x1)) { printk("interrupt handler ok\n"); handled = 1; } } while (1); }
Forums:
sleep만 넣어줘도
sleep만 넣어줘도 될거라 생각합니다.
------------------------------
How many legs does a dog have?
------------------------------
How many legs does a dog have?
인터럽트 핸들러에선
인터럽트 핸들러에선 Atomic을 사용할수 없습니다.
그러므로 sleep이나 spinlock등의 사용이 안됩니다.
인터럽트 핸들러의 역할을 잘못사용하고 계신것으로 판단됩니다.
핸들러는 인터럽트에 대한 처리를 빠르게 하고 다시 인터럽트를 받을수 있는 상태로 대기하는것이 바른 사용법입니다.
댓글 달기