버그 해결을 위한 모든 질문을 던져
+3 votes
388 views

안녕하세요!

OS 교과서를 읽다가 스케줄링에 대해 궁금증이 생겨서 질문드립니다!

책에서는 시분할 시스템하에서 CPU가 하나인 경우를 전제하고

'하나의 스레드가 CPU를 퀀텀타임동안 사용하다가 타이머 인터럽트가 발생하면 커널에 의해 문맥교환이 일어난다'

라고 설명하고 있습니다.

해당 설명을 읽다가 멀티코어 환경에서는 타이머와 스케줄러가 어떤식으로 작동하게 될지 궁금해져서 질문드립니다. 궁금한 점은 다음과 같습니다.

1. 멀티코어 환경에서도 동일한 시점의 타이머 인터럽트로 모든 코어에서 동시에 스케줄링이 일어나는 것인가요?

2. 각 코어를 전담하는 스케줄러가 독립적으로 존재하는 것인가요? 아니면 중앙집권적인 스케줄러가 모든 코어의 스케줄링을 담당하게 되는 것인가요?

혹시 질문 자체에 오류가 있다면 지적해주셔도 됩니다. 즐거운 성탄 되세요!

asked (19 point)
수정됨 , 388 views

2 answers

+5 votes
우수 답변
Windows Internals 의 설명을 살펴보면 대략적인 내용은 이렇습니다.

- 스레드 하나가 실행할 준비가 되면 이 스레드를 유휴 프로세서에 배정을 시도 합니다.

- 윈도우는 이 스레드에 가장 적합한 프로세서를 찾아서 배정 합니다. (직전 프로세서, 처리됐던 프로세서, 친화성 을 고려)

- 각각의 CPU 마다 스레드 레디큐가 존재하며, 각 CPU 는 처리중인 스레드가 끝나면 레디큐의 다음 스레드를 처리 합니다.

결론적으로 보면 CPU 들이 각자 자신이 처리할 스레드를 스케쥴링 하는 방식이 아니고,  어떤 스레드가 스케쥴링 되어야 할 시점이 되면 적합한 CPU 를 찾아 배정하는 스케쥴링으로 보시면 되겠습니다.
answered (221 point)
선택됨
+2 votes
질문 보고 저도 궁금해서 찾아봤는데

둘다 되는가 봅니다...

x86은 어떻게 도는지 궁금하긴하나... 더는 팔 여력이 없습니다 ㅠㅠ

https://stackoverflow.com/questions/33955582/how-do-interrupts-work-in-multi-core-system
answered (238 point)
감사합니다! 링크 달아주신 것도 읽어보고 관련 학술자료나 레퍼런스를 더 참조해 보아야겠네요!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

96 질문
186 answers
194 댓글
211 users