스케줄링 관련 개념 질문좀 드립니다.
글쓴이: happyKYS / 작성시간: 일, 2012/07/08 - 2:36오후
안녕하세요. 간단한 질문 하나만 도와주시면 감사드리겠습니다.
리눅스 스케줄링 기법에서 FIFO랑 RR은 실시간 스케줄링 기법이고, OTHERS는 비 실시간 기법으로 알고 있습니다. 이 때, 어짜피 비 실시간 태스크의 우선순위 조정값이 -20~19이고 우선순위 + 120을 쓰므로 실시간 태스크들이 먼저 스케줄링 된다는 것은 이해가 가는데요.
먼저 스케줄링 받아서 무슨 이점이 있는가에 궁금점이 생깁니다. 어짜피 리눅스가 관리하는 runqueue에서 타임 슬라이스를 다 쓰게 되면 expired 큐로 이동되게 되고 runqueue에 있는 태스크가 전부 수행되어야지 교체가 일어나는데 결국 실시간이든 비 실시간이든 순서에 상관없이 다음 CPU를 할당받기까지 expired 에서 대기하는 시간은 동일하게 되는것 아닌가요? 이러면 비 실시간 태스크와 실시간 태스크로 스케줄링 받는 애들이 서로간에 타임슬라이스 정도 차이를 제외하고 무슨 이점이 발생하는지가 궁금합니다.
제가 잘못 알고 있는건가요? 답변 부탁드립니다. 꾸벅.
Forums:
RR은 실시간은 아닌걸로 알고있습니다. 실시간보다는
RR은 실시간은 아닌걸로 알고있습니다.
실시간보다는 공평한 실행에 중점을 둔 알고리즘으로 알고있습니다.
따라서 말씀하신것과 동일한 방식입니다. 제대로 알고계신것 같습니다.
차이점이 있습니다.
>>먼저 스케줄링 받아서 무슨 이점이 있는가에 궁금점이 생깁니다.
>>어짜피 리눅스가 관리하는 runqueue에서 타임 슬라이스를 다 쓰게 되면 expired 큐로 이동되게 되고 runqueue에 있는 태스크가 전부 수행되어야지 교체가 일어나는데
>>결국 실시간이든 비 실시간이든 순서에 상관없이 다음 CPU를 할당받기까지 expired 에서 대기하는 시간은 동일하게 되는것 아닌가요?
>>이러면 비 실시간 태스크와 실시간 태스크로 스케줄링 받는 애들이 서로간에 타임슬라이스 정도 차이를 제외하고 무슨 이점이 발생하는지가 궁금합니다.
일단 expired 큐 runqueue의 개념은 이전 O(1) 스케쥴러에 있던 개념이구요
2.6.23 커널 이후부터는 CFS 스케쥴러로 변경되고 expired 큐는 사라졌습니다.
물론 O(1) 스케쥴러에서도 실시간 task는 특별취급(?) 당했습니다. 실시간 task도 timeslice가 있었지만 timeslice가
소진된 후에도 expired queue로 이동하지 않고 다시 runquque 로 이동하였습니다.
따라서 실시간 task가 하나라도 존재한다면 그 실시간 task가 존재하는 동안에는 100% 실시간 task에 의해 CPU가 점유됩니다.
CFS의 경우는 runqueue 대신에 비실시간 task들은 RB-tree 에 위치하게 되구요.
잘 기억은 나지 않지만 실시간 task들은 O(1)은 차이가 없었던 것으로 기억나네요.
댓글 달기