티스토리 뷰

728x90

부팅 과정

BIOS → MBR → (Partition Boot Sector) → Boot Loader → Kernel → init

 

1. BIOS (Basic Input Output System)

컴퓨터에는 전원이 꺼져도 날아가지 않고(비휘발성), 수정 불가능한 ROM이라는 저장 장치가 있음.

ROM은 보통 메인보드에 납땜되어 있음.

ROM 안에는 BIOS가 들어있음.

BIOS란 컴퓨터 부팅 시 처음 실행되는 프로그램.

CPU, RAM, 제어장치, 주변장치 등이 잘 연결되어 있는지 등을 확인하고, 확인되었으면 다음 단계, 확인되지 않았으면 오류를 출력해주는 작업을 함.

     - 이를 POST(Power On Self Test)라고 함.

• 이후, 사용자가 BIOS 설정을 들어가기 위해 설정 화면으로 입장하는 키를 입력하는 지 확인하고, 입력하지 않으면 부팅 다음 단계로 넘어간다.

     - BIOS 설정에서는 하드웨어 설정 및 부팅 순서 등을 정할 수 있음.

BIOS 설정에 등록되어있는 부팅 순서에 따라 부팅 가능한 장치를 확인하고, 부팅 장치(하드디스크, USB 등)의 첫 번째 섹터에 접근함.

 

2. MBR (Master Boot Record)

하드디스크 첫 번째 섹터에 저장된 512 bytes 크기의 영역

운영 체제가 어디에 어떻게 위치해있는지를 식별하여 호출하는 역할

하드디스크는 파티션이라는 개념을 통해 공간을 나눌 수 있는데, 운영 체제와 이를 부팅하는 코드 역시 하드디스크에 저장되어 있기 때문에, 나눠진 파티션 중 한 곳에 위치함.

MBR에는 파티션이 몇 개 있는지, 어느 파티션에 부팅 코드가 있는지 등을 저장하는 파티션 테이블이라는 작은 공간이 있음.

• MBR의 대부분의 공간은 부트스트랩 코드라고 하는 부팅 코드가 들어있는데, 파티션 테이블을 조회하여 불러야할 활성 파티션(부팅용 파티션)을 알아내고, 이를 불러냄.

 

※ 부트스트랩(Bootstrap)이란?

     - 원래 Boot(부츠) + Strap(끈)으로, 긴 부츠의 뒷부분에 달린 고리를 뜻했음.

     - pull oneself up by one's bootstraps라 하여 불가능한 일을 시도한다는 관용어구가 있었는데, 이는 울타리를 넘을 때 자신의 부트스트랩을 끌어올려 울타리를 넘는다는 뜻이었음.

     - 이것이 변형되어, 부트스트랩은 도움 없이 스스로 발전하거나 일을 성취한다는 의미로 사용됨.

     - 이 부트스트래핑의 줄임말을 부팅이라고 함!

     - 즉, 부트스트랩은 부팅이고 부트스트랩 코드는 부팅 코드인 것!

 

※ MBR은 부트스트랩 코드 446 bytes, 파티션 테이블 64 bytes, 부트 시그니쳐 2 bytes로 구성되어 있음. 부트스트랩 코드는 MBR의 처음 446 bytes 에 위치하여 BIOS가 하드디스크 첫 섹터를 부르면, 부트스트랩 코드가 실행됨. 부트 시그니쳐란 MBR의 마지막 2 bytes 에 위치하여 BIOS에서 선택한 부팅 장치가 유효한 부팅장치인지 확인함. 이곳에 올바른 값이 없으면, 다음 부팅 장치를 찾고(즉, 하드디스크에 서명이 제대로 안 되어 있으면 usb를 찾는 식), 또 찾고, 전부 없으면 사용 가능한 부팅 장치가 없다고 오류를 출력함.

 

3. Partition Boot Sector

활성 파티션의 첫 번째 섹터의 저장된 512 bytes 크기의 영역

OS와 파일 시스템에 따라 다르지만 일반적으로 비슷한 모양을 하고 있음.

해당 볼륨(저장 공간)에 대한 정보와, 해당 볼륨이 사용하는 파일 시스템에 대한 정보가 들어있고, 운영 체제에 맞는 부트 코드가 들어있음.

이 부트 코드에서 운영 체제 부트로더 코드가 담겨있는 위치로 점프하여 부트로더를 실행시킴.

 

※ 파티션이 없는 장치라면 MBR에서 바로 부트로더가 실행되고, 파티션이 있는 장치라면 다음과 같이 MBR이 활성 파티션을 찾고 그 파티션의 부트 섹터에서 부트로더가 실행. 이렇게 부트로더가 실행되는 공간을(즉, 파티션이 없다면 MBR, 파티션이 있다면 파티션 부트 섹터) VBR(Volume Boot Record)이라고 함.

 

4. Boot Loader

운영 체제가 시작되기 이전에 미리 실행되어 커널이 올바르게 시작되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 실행하는 역할을 가진 프로그램.

파티션 부트 섹터 안에 들어가 운영 체제를 로드하는 역할을 하기도 하고, MBR 안으로 들어가 멀티 부팅을 제어하는 역할도 함.

리눅스의 부트 로더에는 LILO(LInux LOader)와, 이를 개선시킨 GRUB(GRand Unified Boot loader)가 있음.

 

5. Kernel

운영 체제의 핵심 부분

부트 로더에 의해 불려짐.

 

6. init

리눅스가 처음 켜지고 실행되는 프로세스. init 프로세스가 실행된 후 init에 연결된 다른 프로세스들이 순차적으로 실행됨.

PID가 1번

시스템 초기화, 표준 입출력 설정, 에러 설정 등 여러가지 작업 수행

위의 작업을 정상적으로 수행 후, 사용자에게 로그인 프롬프트 출력

 

 

 

 

 

 

 

 

 

이 글은

유튜브 뉴렉처 리눅스(Linux) 서버 강의/강좌 for 개발자

강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.


728x90
댓글
공지사항