안녕하세요,
이경준이라고 합니다.
오랜만에 이솝싸이트를 찾아왔는데요 다름이 아니라 커널 선점형과 비선점형에 관해 질문이 있는데 정확한 답을 얻을 수 있는곳은 ...
이곳이라는 생각이 들더라구요. ^^
뭔가를 구현하려는것은 아니구요 그냥 단순 호기심때문에 질문드립니다.
제가 이해하기로는 비선점형은 커널 2.4에서
while(1){};
이라는 프로그램을 돌리면 비선점형 커널임이도 불구하고 다른 프로세스가 실행이 됩니다.
왜냐하면 process가 실행 될때 quantum (timeslice라고도 하는..) 타임이 할당되는데 이것이 끝나면 다른 프로세스가 실행되기때문입니다.
제가 생각하기론 커널 비선점이라고 하는 말은 "quantum 시간이 끝나기전엔 프로세스가 CPU를 안놓는다" 라고 이해하고 있습니다.
그런데 아주 priority가 높은 HW interrupt가 발생을 했다면 수행이 될것이냐가 논쟁의 핵심이었습니다.
수행이 된다고말한측에서 제시한 이유는 IDT 테이블를 통해 Soft IRQ에 인터럽트 핸들러가 수행이 될텐데.. 이 Soft IRQ handler 같은것은 커널이 따로 관리하는 다른 프로세스에 의해 수행되기때문에 즉시 수행된다는 것입니다.
그런거같기도 하고.... 아닌것같기도 하고... 헷갈리면서도 너무 궁금하네요.
답변 부탁드리겠습니다.
좋은하루 되십시요.
IRQ가 들어왔을때 process때문에 지연을 시킨다면 문제가 많아질 듯 하네요...^^
선점형 커널의 개념은 우선순위 개념이라고 저는 생각합니다만, 상황이나 적용에 따라 달라질 수 있겠지요.
while(1); 문을 동작시키고 있는데, 우선순위가 높은 process가 이 부분을 무시하고, 선점할 수 있느냐 없느냐의 얘기라고
생각합니다
개인적으로 리눅스에서의 선점형은 그다지 의미가 없는 것으로 생각은 하지만, 있으면 좋겠지요...ㅎㅎ