정보공간_1

[6기 강북 홍진우] 64비트 멀티코어 OS#4 - Boot Loader(1) 본문

IT 놀이터/Elite Member Tech & Talk

[6기 강북 홍진우] 64비트 멀티코어 OS#4 - Boot Loader(1)

알 수 없는 사용자 2014. 11. 9. 13:02

엘리트 멤버 6기, 강북멤버십 23-1기 홍진우입니다.

입동이 지나고 겨울이 다가오고 있습니다.

일교차가 점점 커지고 있습니다만 역시, 건강이 제일입니다. 감기 조심하시구요

네번째 포스팅 시작합니다!!!


네번째 포스팅에서는 64비트 운영체제의 부트로더의 구조와 기능에 대해서 살펴 보도록 하겠습니다.



1. 부팅과 BIOS

 1.1 부팅(Booting)

  부팅은 PC에 전원이 들어온 후, OS가 실행 되기 전까지 수행되는 작업 과정을 말합니다. 부팅 과정에서는 프로세서 초기화, 메모리와 외부 디바이스 검사 및 초기화, 부트로더를 메모리에 복사하고 OS를 시작하는 과정 등이 포합됩니다.


[그림1] 64비트 OS의 부팅 과정


위의 그림은 예시 OS의 부팅 과정입니다. PC 환경에서는 부팅 과정 중 하드웨어와 관려된 작업을 BIOS(Basic Input/Output System)가 담당하며, BIOS에서 수행하는 각종 테스트나 초기화를 POST(Power On Self Test)라 부릅니다.

  - BIOS 영역


 전원이 들어온 후 POST 과정에서 프로세서를 초기화하고, 메모리를 검사하여 얼마만큼의 메모리가 존재하는지 검사 후, 사용 가능하도록 초기화를 수행합니다. 이후 주변 I/O장치를 검사한 후 초기화 합니다.

POST 과정이 끝나면, 부트로더를 읽게 되는데요. 뒤에 설명할 디스크의 MBR 영역에서 부트로더 이미지를 읽고, 이를 메모리로 복사합니다. 여기까지가 BIOS 영역이 수행되는 일이고, 나머지 부팅 과정은 메모리에 적재된 부트로더가 담당하게 됩니다. 


 - OS 영역


 부트로더는 BIOS로부터 제어권을 넘겨 받아, 나머지 부팅 과정을 수행합니다.  먼저 OS에 해당하는 이미지를 메모리에 복사, 적재합니다. 이후 보호모드로 시스템을 시작하도록 합니다. 이후, 32비트 커널로 시스템이 시작되고, 여기서 다시 64비트 커널을 메모리에 복사, 64비트 OS로의 부팅을 준비합니다. 

 적재된 64비트 커널은 멀티코어 초기화, 멀티 태스킹 모듈 초기화, 메모리 관리 모듈 초기화, 주변 장치 초기화, 그래픽 모드로의 전환, 응용 프로그램 실행의 순으로 부팅 과정을 진행 합니다.



  1.2 BIOS(Basic Input/Output System)

 

[그림2] 바이오스 세팅 예시 (CMOS)


 메인 보드에 포함된 펌웨어의 일종으로, 입출력을 담당하는 작은 프로그램입니다. 메인 보드에 ROM이나 Flash메모리에 저장되어 있으며, 전원이 들어옴과 동시에 프로세서가 가장 먼저 실행하는 코드입니다. BIOS는 부팅 옵션 설정이나 시스템 전반의 설정을 관리하는 역할도 수행하며, 설정된 값으로 시스템을 초기화하여 OS를 실행할 환경을 만듭니다.

  부팅 과정 중 중요한 것중 하나는 부트 로더 이미지를 메모리로 복사하는 단계입니다. 부트 로더는 부트스트랩(Bootstrap)코드라고도 불리며 User가 BIOS로 부터 처음으로 제어를 넘겨받는 부분입니다. 부트 로더는 플로피 디스크나 하드디스크 등 저장 매체의 가장 앞부분 메모리 영역에 존재합니다. 



1.2 부트 로더의 역할과 구성


 부트 로더는 외부 저장 매체에 존재하며, 저장 매체에서 가장 첫 번째 섹터 MBR(Master Boot Record)에 있는 작은 프로그램 입니다. 섹터(Sector)는 디스크를 구성하는 데이터의 단위로, 섹터 하나는 512바이트 크기를 가집니다. 



* MBR(Master Boot Record)

 MBR은 Mater Boot Record의 줄임말로,  기억 장치의 섹터0, 즉 첫 섹터 512바이트를 말합니다. MBR은 다음과 같은 역할을 수행합니다.




[그림3] 디스크의 영역별 구분과 MBR (출처: Partition Manger 홈페이지)




  - 디스크의 파티션(디스크 영역을 논리적으로 구분하는 단위) 테이블을 저장한다.


  - 부팅할 운영 체제 정보를 저장하고, 부팅시 BIOS단계 이후 전달한다.



 부트 로더의 가장 큰 역할은 OS 실행에 필요한 환경을 설정하고, OS 이미지를 메모리에 복사하는 일입니다. 부트 로더는 크기가 섹터에 맞게 512바이트로 정해져있으며, 따라서 처리할 수 있는 기능이 제한됩니다.


  하지만 MBR에 부트 로더 가 담겨있지 않다면!! BIOS는 부트 로더가 아닌 일반 데이터를 불러올 것이고 PC는 알 수 없는 예외 동작으로 빠지게 될것입니다. 이를 방지 하기 위해 MBR의 부트 로더 영역은 마지막 2바이트에 0x55, 0xAA를 할당해, 자신이 부트 로더라는 것을 BIOS에 알려줍니다.


 BIOS는 읽어들인 MBR의 512바이트 중에 마지막 2바이트가 0x55, 0xAA로 끝나는지 확인해, 해당 영역이 부트 로더를 저장하고 있는지 확인합니다. 만약 0x55, 0xAA가 아니라면, BIOS는 부트 로더가 없다고 판단하고, 더이상 부팅을 진행하지 않습니다. 





 지금까지 64비트 부트로더의 개념과 역할에 대해 정리해 보았습니다. 다음시간에는 직접!! 쉬운 부트로더를 만들어보고 테스팅해보도록 하겠습니다. 



다섯번째 포스팅은 64비트 멀티코어 OS#4 - Boot Loader(2) : 부트로더 이미지 생성 및 적용 편 입니다!!



* 참조 자료 : '64비트 멀티코어 OS 원리와 구조' -  한승훈 저