멀티태스킹 - 1
멀티 태스킹
부트로더 다음에 바로 32bit kernel로 넘어가자니 멀티태스킹에 대해서 미리 언급해야 할것 같아서 포스팅한다. 물론 이 책에서는 64bit Kernel까지 넘어가서야 멀티태스킹에 대해서 논하지만 겹치는 부분이 좀 있기 때문에 이 부분을 먼저 언급하고자한다.
우리가 일상에서 멀티태스킹한다는 단어는 많이 사용한다. 멀티태스킹이라는 단어를 따지고 보면 각각 일을 짧은 시간을 할당하여 두루두루 처리하는 것을 뜻한다. 그런데 컴퓨터 공학에서 이야기하는 멀티 태스킹도 그렇게 크게 다르진 않다. 기본적으로 CPU 점유 시간을 단위 시간으로 나누고 해당 하는 단위 시간을 특정 횟수 만큼 할당하여 각 태스크마다 돌아가면서 사용하여 태스크를 해결하도록한다. 요약하자면 한 줄로 요약되는 이러한 과정이 컴퓨터 공학에서 말하는 멀티태스킹의 주요골자인데 깊게 들어가면 논문이 한편 나올만큼 방대하고 큰게 바로 이쪽이다. 따라서 아주 깊게 알아보기는 힘들지만 구동되는 OS를 만드는데 필요한 만큼은 알아보도록 하겠다.
TASKING
멀티 태스킹은 말 그대로 주어진 일을 처리(tasking) 하는데 다중(Multi)으로 한다. 그렇다면 태스킹은 뭔가? 간단히 말해서 해야할 일인데, 컴퓨터로 따지자면 구동 중인 프로그램, 인터럽트로 인한 루틴 등등 처리해야할 모든 일들을 말한다. 이러한 일을 Task라고 하고 이런 일들을 처리하는 것을 Tasking이라고 한다. 우리가 어떤 일을 할 때 ToDo 리스트를 만들어서 일을 관리하듯이 컴퓨터도 이러한 Task 들을 정리하고 관리해야할 필요가 있다. 왜냐하면 어떤 일이 덜 끝났고 어떤 일이 끝나서 더 이상 진행하지 않아도 되는지 알아야하기 때문이다.
64Bit 멀티코어 OS의 구조
책에서는 이러한 TASK를 별도의 테이블을 이용하여 관리한다고 했다. 프로그램은 GDT(Global Descriptor Table)로 인터럽트 루틴은 IDT(Interupt Descriptor Table)로 전체 프로그램과 인터럽트 루틴 목록을 가지고 있다.
그렇다면 이러한 프로그램과 인터럽트 루틴을 실행하는 순서는 어떻게되는가? 이 순서를 처리하는 방법에 대해서 알아보겠다.
참고 문헌
- 64Bit 멀티코어 OS의 구조 - 한승훈 저