티스토리 뷰

Study/OS

[OS] Mint64OS 29,30절 Multi Processor 활성화

생각많은 소심남 2013. 2. 8. 17:44

원래 다루는 책 이름 자체가 64비트멀티코어OS를 만드는것이 목적이다. 그래서 지금까지 초기 POST 후에 64bit 용 Kernel로 전환하고 그위에서 할 수 있는 여러가지 작업에 대해서 (램디스크나 시리얼 통신같은...) 예제 코드를 제공하고 있어서 그걸 따라해왔다.


옛날에 나온 싱글코어용 OS는 그냥 이전까지 한 내용을 바탕으로 GUI를 올리면 그냥 하나의 GUI Based OS가 된다. 하지만 요즘에 나오는 멀티코어로 전환하면 이전에 나온 싱글코어용 OS를 쓰기에는 너무 비효율적이다. 여기서 말하는 멀티코어는 보통 Multi Processor, Process를 처리할 수 있는 Processor가 여러개가 같이 있는 형태를 말하며, 다르게는 Core라고 할 수 있다. 멀티코어가 등장하기 전의 컴퓨터의 성능 관점은 클럭스피드였었지만, 스피드가 낮더라도 작업을 여러개 코어가 나눠서 처리하면 더 효율적이라는 사실이 나오면서 최근 추세는 코어를 여러개 나눈 상태에서 클럭스피드를 올리는 형태가 되고 있다.  싱글코어에서는 이전 포스트에서 잠깐 언급했던 Time-Sharing MultiTasking으로 Process를 처리했지만, 멀티코어는 이를 아예 Native로 처리할 수 있기에 더 효율적으로 작업을 처리할 수 있다.

 앞에서 이야기 했던 것처럼 싱글 코어용 OS를 그대로 멀티코어에 적용시킬 수는 없기에 이를 재설계를 해줘야 하는데 책에서 소개하는 두가지 관점은 다음과 같다.

첫번째는 프로세서간의 동기화 문제가 발생하지 않도록 하는 것이고, 두번째는 IDLE 상태의 Core가 발생하지 않게 하는 Load Balancing의 형태이다. 멀티코어에서는 코어별로 처리하는 데이터가 다를 수도 있고, 같을 수도 있기 때문에 이때문에 발생하는 동기화 문제에 대해서 고려를 해야 하고, 앞에서 언급한 효율성관점에서 노는 코어가 없도록 프로그래밍해야 한다.

 그래서 우선 29절에서 소개하는 내용은 POST 시 프로세서를 인식해서 멀티코어인지의 여부를 결정하는 것이다. 이때 프로세서 초기화가 이뤄지는데 이 프로세서 초기화를 주도하는 프로세서가 BootStrap Process(BSP)이고, 이 BSP를 제외한 프로세서는 Application Processor(AP)라고 한다. 즉 직접적으로 동작이 되는 IA-32e 모드로 전환되기 전까지는 BSP가 주로 동작하고, 전환된 후에는 BSP가 나머지 AP를 깨우는 형식을 취한다. 물론 BSP와 AP의 기능적인 차이는 없고, 전환되고 나서는 BSP도 AP로 전환된다. 이 둘의 차이는 그저 POST 과정에서 동작하나 안하나의 차이이다.

 사실 부팅시 여러가지 인터럽트들이 PIC를 통해서 프로세서로 전달되는데 PIC 자체가 코어 하나에 대해서만 연결되기 때문에 그대로 쓸 수 없고 따로 원래있던 Advanced PIC라는 것을 발전시켜서 인터럽트를 전달할 수 있게 했다.

 이 책에서는 MP Configuration Table이라는 개념을 설명하며 여기서 CPU에 대한 정보와 I/O APIC에 관한 정보를 출력할 수 있는 예제를 소개했다.



처음으로는 MP Configuration에 대한 요약 정보를 보여주고 있다. 초기에 Bochsrc를 통해서 CPU core 갯수를 4개로 변경했고, 그에 대한 결과가 반영되어 나타나고 있다.



MP Configuration Table에는 CPU에 대한 정보를 빼올 수 있는데 그중에는 CPU 만든회사의 정보도 빼올 수 있다.



앞에서 설명했던 개념인 BSP와 AP도 나타난다. 여기서 Multi Core로 정확히 인식되고 있기에 각각이 Enable로 설정되어 있다. 당연히 4번째는 코어도 활성화되어 있다.



MP Configuration Table에서는 I/O APIC에 대한 정보도 가지고 있다.


30절에서는 앞에서 얻을 수 있었던 멀티코어에 관한 정보를 가지고 core 기능을 활성화 시키는 것에 대해서 다뤘다.

댓글