개발자 노트

부트로더에 대한 이해 본문

▶ INBOX ◀

부트로더에 대한 이해

heeyam 2016. 9. 27. 16:05
반응형

부트로더에 대한 이해를 돕기 위해 먼저 컴퓨터 부팅에 대해 설명해보겠다.


00. 컴퓨터 부팅

부팅이란 PC가 켜진 후에 운영체제(이하 OS)가 실행 되기 전까지 수행되는 일련의 작업 과정을 말한다.

간단하게 그림으로 나타나면 다음과 같이 나타낼 수 있다.

제일 먼저 PC의 전원이 켜지면 ROM에 들어있는 BIOS가 로드 된다.

BIOS는 컴퓨터에 연결된 저장 매체에서 설정된 부팅 순서대로 부트로더들을 불러 온다. 

이 때, 하드 디스크가 첫 번째 부팅 장치로 설정되어 있으면, BIOS는 하드 디스크의 부트로더를 로드한다.

부트로더는 커널을 메모리에 로드하고 최종적으로 OS를 읽어내는 역할을 한다.


부팅 과정 중에서 부트 로더 동작 전 단계까지에 대한 자세한 설명은 다음의 그림으로 대체하겠다.

위의 그림에서 '부트 로더를 메모리로 복사' 하는 단계에서 0x7C00 어드레스로 복사하는 이유에 대해 잠깐 언급하자면 

IBM 사가 메모리의 0x00007c00 ~ 0x00007dff 번지(크기 512바이트) 를 부트 섹터가 읽혀지는 어드레스로 지정했기 때문이다.


만약 BIOS가 부팅 가능한 모든 장치를 검사했는데도 부트로더를 찾을 수 없다면 BIOS는 'Operating System Not Found'와 같은 메시지를 출력하고 작업을 중단한다.

 

01. 부트로더

위키백과 에서는 부트로더를 다음과 같이 정의하고 있다.

부트로더 운영체제(이하 OS) 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램을 말한다.


02. 부트로더의 위치

부트로더는 플로피 디스크나 하드 디스크 등 저장 매체의 가장 앞 부분에 존재한다.

하드 디스크를 예로 설명하자면 하드 디스크의 파티션 정보는 MBR(Master Boot Record)라는 하드 디스크의 첫 섹터 속에 존재한다. 

여기서 BIOS는 파티션 테이블을 읽은 후 활성화 되어 있는 파티션(부팅 가능한 파티션; 각 파티션의 첫 번째 바이트로 알 수 있다 0x80: 부팅가능 / 0x00: 부팅 불가)의 VBR(Volume Boot Record)를 읽어 그 데이터로 부팅하게 된다. 

여기서 이 MBR과 VBR이 1차 부트로더이다.

참고1, 디스크의 첫 번째 섹터인 MBR 영역에는 부트 로더 외에 디스트의 파티션 정보도 존재한다.

참고2, 파티션을 나누지 않은 경우라면 부트레코드는 MBR에 있을 것이다. 또한 단일 파티션을 사용하는 플로피의 경우 부트레코드는 1개만 있을 것이기 때문에 MBR 영역이 필요 없다.


여기서 잠깐, 부트 섹터에 대해 설명하고자 한다. 

부트 섹터는 디스크의 다른 부분에 저장되는 부팅 프로그램을 담을 수 있는 하드 디스크, 플로피 디스크, 또는 비슷한 기억 장치의 첫 섹터를 말한다(1섹터는 512 바이트이다).

부트 섹터의 종류로 앞서 언급한 MBR과 VBR이 있다. 

여기서 중요한 것은 부트 섹터의 마지막 2바이트에는 "0x55AA"라는 값이 있어야 한다. 이 값은 '이 디스크에 부트에 필요한 프로그램이 있다'는 것을 의미하기 때문이다.

 "0x55AA"가 확인되지 않으면 부팅 할 수 없다는 에러가 발생된다. "0x55AA"가 확인된 후에는, 이 섹터의 선두부터 프로그램이 써 있을 것이라 판단하여 거기에서부터 실행하기 시작한다.


MBR/VBR의 최대 용량은 512바이트 뿐이므로 도스 같은 운영체제 정도에는 적합했지만 윈도우 같은 복잡한 운영체제의 커널을 로드 할 준비를 하기에는 턱없이 모자라다. 

그래서 아래 그림과 같이 2차 부트로더를 1차 부트로더를 통해 커널을 로드하듯이 로드한 뒤, 2차 부트로더를 통해 커널을 로드하는 방식을 택하게 되었다.

2차 부트로더의 종류는 OS마다 달라지게 되는데 리눅스에서는 GRUB, SYSLINUX, 윈도우에서는 BOOTMGR, NTLDR 등이 있다. 

2차 부트로더는 파일의 형식으로 부팅 파티션의 루트 경로에 있다.

  

# 참고


이해가 안되거나 잘 못된 정보가 있으면 댓글 남겨 주세요 :)


반응형
Comments