티스토리 뷰
부팅 과정
• 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 개발자
강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.
'🐧 Linux' 카테고리의 다른 글
[Linux] 20. 환경 변수 (/etc/environment) (0) | 2024.02.19 |
---|---|
[Linux] 19. 리눅스 셸 설정 (로그인 셸 vs 비로그인 셸, profile, profile.d, bashrc) (0) | 2024.02.18 |
[Linux] 18. 리눅스 런레벨 (Runlevel) (1) | 2024.02.06 |
[Linux] 17. 리눅스 명령어 만들기 (링크 파일, 환경 변수) (1) | 2024.01.31 |
[Linux] 16. 리눅스 실행 파일 만들기 (배치 파일, 셸 스크립트 파일, sh 파일) (0) | 2024.01.30 |