자 일단 문제는 해결했다.
지금 시간은...
하루를 지나 새벽 3시이다.
사실 문제 해결은 간단했다(언제나 그렇듯)
이전에 교수님께서 주셨던 솔루션이 제대로 되지 않았다고 포스팅을 했던 것 같은데 결과는 그 솔루션이 맞았다.
다만 그 구현에서 () 괄호 두 개를 빼먹었을 뿐...
해결은 아래와 같다.
외부 인터럽트 발생시에 thread_yeild 함수가 불리면 ASSERT문에 의해서 커널패닉이 나는 것이었는데
- if (most_priority_thread->priority > curr_thread->priority)
+ if (most_priority_thread->priority > curr_thread->priority && !intr_context())
{
thread_yield();
}
위와같이 외부 인터럽트시에 안되게끔 조치했더니 해결되었다.
문제는 이 방법을 화요일에도 시도 했었다는건데
당시에 !intr_context 라고 작성을 했던 것이었다.
해봤던 솔루션이니까 안되겠지하고 이틀간 뻘짓 아닌 뻘짓을 한건데...
일단 해결했으니 주말간 버닝해야겠다..