부팅(Booting) : PC가 켜진 후 OS가 실행되기 전 사이에 수행되는 과정을 의미합니다.
OS를 실행시키기 위해서는 먼저 컴퓨터를 부팅(Booting)하는데
이때 부트로더(BootLoader)라는 512Byte의 작은 코드가 OS의 나머지 코드를 메모리에 복사하여 OS를 실행시킵니다.
부팅 과정 중 수행하는 작업을 간략히 정리하면 아래와 같습니다.
→ 부팅 과정에서 수행하는 작업
● 프로세서를 초기화(멀티코어 관련 처리 포함)합니다.
● 메모리와 외부 디바이스 검사 및 초기화 작업을 합니다.
● 부트 로더를 메모리에 복사하고 OS를 시작 등이 포함됩니다.
부팅 과정 중 하드웨어와 관련된 작업은 BIOS(Basic Input/Output System)이 담당하는데
이때 BIOS에서 수행하는 테스트나 초기화를 POST(Power On Self Test)라고 합니다.
(위의 부팅 과정에서 수행하는 작업들이 POST 과정에 포함됩니다.)
→ BIOS
● 메인 보드에 포함된 펌웨어(Firmware)의 일종으로, 입출력을 담당하는 작은 프로그램이며, 메인 보드에 롬(ROM)이나 플래시 메모리로 존재합니다.
● PC의 전원이 켜지면 프로세서가 가장 먼저 실행하는 코드입니다.
● 부팅 과정 중 하드웨어와 관련된 작업을 담당하며, BIOS가 수행하는 각종 테스트나 초기화를 POST(Power On Self Test)라고 합니다.
● 부팅 옵션 설정이나 시스템 전반적인 설정 값을 관리하며, 설정 값으로 시스템을 초기화하여 OS를 실행할 수 있는 환경을 만듭니다.
● BIOS에서 제공하는 기능은 인터럽트를 통해 사용할 수 있습니다.
● POST가 완료되면 여러 장치를 검사하여 앞부분에 부트 로더가 있는지 확인하여, 부트로더가 있다면, 코드를 0x7C00 주소에 복사한 후 프로세서가 0x7C00 주소부터 코드를 수행하도록 합니다.
● 부트로더가 없다면, Operating System Not Found와 같은 오류 메시지를 출력합니다.
→ 부트로더(BootLoader, 부트 스트랩 코드)
● BIOS가 가장 먼저 실행하는 프로그램이자, BIOS에서 처음으로 제어를 넘겨받는 부분입니다.
● 플로피 디스크나 하드 디스크 같은 외부 저장 장치의 가장 앞 부분에 존재하는데, 저장 장치 내의 가장 첫 번째 섹터 MBR에 있는 프로그램으로 크기가 512Byte로 정해져 있습니다.
● 가장 큰 역할로는 OS를 실행에 필요한 환경을 설정하고, 디스크 내에 있는 OS 이미지를 메모리에 복사한 뒤 제어를 넘겨줍니다.
섹터 : 디스크를 구성하는 데이터의 단위로, 한 섹터의 크기는 512Byte입니다.
앞으로 만들 OS의 부팅 과정은 아래와 같습니다.
앞에서 부트 로더는 "저장 장치 내에 가장 첫 번째 섹터에 512Byte 크기로 있다" 라고 하였습니다.
BIOS에 첫 번째 섹터가 부트 로더란 것을 알려주고, BIOS가 디스크에서 읽은 첫 번째 섹터가 부트 로더인지 판단하기 위해서는
가장 마지막 2Byte의 값을 0x55, 0xAA로 해주어야 합니다.
디스크를 부팅 용도로 사용하지 않는다면, 첫 번째 섹터는 부트 로더가 아닌 일반 데이터가 저장되기 때문에
BIOS는 혹시 모를 실수로 데이터를 메모리에 올려 실행해버려서 PC가 리부팅되는 사태를 방지하기 위해 읽어 들인 512Byte의 마지막 2Byte를 검사합니다.
마지막 2Byte의 값이 0x55, 0xAA라면 부트 로더로 인식하고, 0x55, 0xAA가 아니라면 데이터로 인식하고 부팅 과정을 더 이상 진행하지 않습니다.
참고) 디스크의 첫 번째 섹터인 MBR 영역에는 부트 로더만 있는 것이 아닌 디스크의 파티션 정보도 들어있습니다.
MBR 영역에는 기본적으로 4개의 파티션 영역이 있고 파티션 영역에 정의된 영역은 독립된 공간을 보장하기에 데이터를 분할된 각 파티션들에 저장했다면 특정 파티션에 문제가 발생해도 다른 파티션에서 데이터를 복원할 수 있습니다.
'시작하지 말았어야 했던 것 > 64비트 멀티코어 OS' 카테고리의 다른 글
64비트 멀티코어 OS[3] - 3. 간단한 부트 로더 만들어보기 (0) | 2021.02.13 |
---|---|
64비트 멀티코어 OS[3] - 2. Eclipse 프로젝트 생성과 Makefile 생성 (0) | 2021.02.11 |
64비트 멀티코어 OS[2] - 2. 운영 모드와 메모리 관리 기법 (0) | 2021.02.09 |
64비트 멀티코어 OS[2] - 1. 운영 모드와 레지스터 (0) | 2021.02.06 |
64비트 멀티코어 OS[1] - 2. 우분투 개발 환경 구축 (0) | 2021.01.27 |