부트로더 - 1
BIOS에서 구동가능한 부트로더를 한줄로 정의하면 아래와 같다.
1
OS를 구동하기 위해서 필요한 512Bytes 코드
이 문장을 해석하면 BIOS를 통해서 구동되는 부트로더(이하 부트로더)가 무엇인지 어떻게 구동되는지 알 수 있다.
컴퓨터가 켜지면 POST라는 절차를 거친다. 펌웨어인 바이오스가 실행하는 일종의 검사 루틴으로 이 POST는 프로세서를 초기화하고, 메모리 검사 및 초기화를 한 뒤 주변 장치 검사 및 초기화를 하는 일련의 과정이다. 이 과정에서 CPU의 코어 개수나 기기 상태들을 확인하고 특정 메모리에 기재해둔다.
이 POST 절차를 거치고 나서 ROM에 기재된 프로그램이 실행되고 이 프로그램은 플로피디스크든, HDD든 SSD든 BootDevice로 지정된 저장장치의 제일 앞 512Bytes(MBR-Master Boot Record)를 읽어서 메모리 0x7C00번지에 복사한다. (굳이 512Bytes인 이유가 있다. HDD의 한 섹터 크기가 512Byets이기 때문이다. 물리적인 제한때문에 512Bytes로 되었을 것이라고 추정하는데 만약에 SSD로 컴퓨터의 역사가 시작되었다면 크기가 달라졌을 수도 있다.)
이때 복사되는 512Bytes가 바로 부트로더라는 것이다. 이렇게 복사된 512Bytes는 이후에 바로 실행에 들어가게 된다.
이 512Bytes 코드가 하는 일은 매우 간단한데, 처음 구동하면 16bit 리얼모드로 컴퓨터가 구동된다. (이 리얼 모드에 대해서 잘 모른다면 이전에 포스팅한 모드에 대한 이해 포스팅을 살펴보기 바란다)
이러한 16bit 리얼모드에서 512Bytes의 코드가 하는 일은 32bit kernel 코드를 긁어서 메모리에 복사해둔뒤 시스템 관련된 레지스터중에 컨트롤 레지스터에서 32bit용 모드로 넘어갈때 필요한 부분을 변경 한 뒤 (어떤 부분이 바뀌는지 이후에 코드에 대한 설명을 하면서 다시 설명하도록 하겠다) 다음에 실행할 프로그램 코드를 가르키는 PC(Program Counter)를 32Bit 보호 모드로 변경하여 32bit 커널 코드로 점프하는 것이다.
위의 절차만 봤을 때 몇 가지 의문이 들 수 있다. 가령 “그냥 512Bytes를 복사해오는 것 대신에 더 많은 코드를 복사해와서 모드를 변경하면 좋지 않나?”라던가 혹은 “512Bytes에서 바로 64bit 모드로 넘어가는게 더 좋지 않나?”하는 생각이다.
이건 하위 호환성을 유지하기 위해서이다. 실제로 32bit cpu는 16bit에 대한 호환성을 64bit cpu는 16bit와 32bit OS에 대한 호환성을 그대로 유지하고 있다. 이는 새로운 CPU에서도 이전 OS를 구동가능하게 하기 위한 것인데, 아무래도 하위 호환성의 여부가 레거시 시스템의 유지보수에도 영향이 가기 때문에 CPU 점유율에 영향을 미칠 수 있기 때문이 아닐까 싶다.
다음은 MBR(Master Boot Record)에 대한 내용에 대해서 알아보겠다.
참고 문헌
- 64Bit 멀티코어 OS의 구조 - 한승훈 저
포스팅 업데이트 날짜
- 2024.01.12 : 명칭 보완
- 2024.01.31 : 포스팅 내린 후 수정하여 재업로드