일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- STL
- swea
- leetcode
- ps
- baekjoon
- 관계형 모델
- 전송 계층
- 네트워크
- 자료구조
- Transport layer
- 응용 계층
- Database
- C++
- 임베디드
- 백준
- Djikstra
- BST
- DB
- Application Layer
- 문제풀이
- Network
- dp
- 데이터베이스
- boot sequence
- 프로그래머스
- Embedded
- 다익스트라
- 부트시퀀스
- 릿코드
- BHS
- Today
- Total
BOBO's Note
Generic Boot Sequence 본문
Linux Boot Sequence
컴퓨터에 전원이 들어와 운영체제의 로그인 화면이 뜨기 전까지 여러 과정을 거치게 된다. 보통 다음과 같은 순서를 따른다.
-
컴퓨터에 전원이 들어오면 ROM에 저장된 BIOS 코드를 실행시킨다. BIOS란, Basic Input/Output System의 약자로, 부팅에 필요한 다양한 주변 장치(예. CPU, RAM, 디스크, USB 장치 등)를 인식하고, I/O 및 동작을 확인하여 초기화한다. 그 후, stage 1 부트로더를 로드한다.
-
POST (Power On Self Test): 주변 장치의 상태 확인 및 초기화, 인터럽트, 메모리 범위, I/O 포트 등을 정리한다.
-
UEFI BIOS: Legacy BIOS를 대체하는 새로운 시스템으로, 2TB 이상의 디스크를 인식할 수 있고 MBR을 거치지 않고 Boot Manager로 바로 부팅되기 때문에 부팅 속도도 더 빠르다.
-
-
stage 1 부트로더는 MBR에 저장되어 있다. MBR은 Master Boot Record의 약자로, 디스크 첫 섹터의 512 바이트이며 부트로더의 위치를 저장한다. stage 1 부트로더는 stage 2 부트로더를 로드한다.
-
stage 2 부트로더는 커널 이미지(/boot/vmlinuz-[버전])를 메모리에 로드한다. x86 계열에서 많이 사용하는 부트로더에는 GRUB, LILO가 있고, ARM 계열은 U-Boot를 많이 사용한다.
-
부트로더는 커널 이미지 외에도 initramfs 또는 initrd를 메모리에 로드한다. 둘 다 루트 파일 시스템을 메모리에 로드하기 위한 방법이다. 루트 파일 시스템과 커널이 초기에 동작(=루트 파일 시스템을 마운트)할 때 필요한 디바이스 드라이버 및 커널 모듈들을 이미지 형태로 저장해놓은 것이다.
-
initramfs는 모든 파일, 라이브러리, 환경 설정, 도구 등을 cpio 아카이브에 모아놓은 이미지이다. 커널이 initramfs를 감지하면 tmpfs를 만들고 이 파일 시스템에 initramfs 내용을 추출한다. 그 후, tmpfs에 위치한 /init 프로세스를 실행시킨다. init 프로세스 내에서 실제 루트 파일시스템으로 전환하고, 실제 루트 파일 시스템의 /sbin/init을 호출해 부팅 과정을 진행한다.
-
initrd(initial ramdisk)는 블럭 디바이스 형태로 인식되는 파일 시스템 이미지이다. /dev/ram으로 접근할 수 있고, 초기 루트 파일 시스템으로 마운트 된다. /sbin/init 프로세스를 실행시킨다. initrd는 고정 크기이고 메모리에 계속해서 상주하며 블럭 디바이스로 인식되기 때문에 이에 맞는 파일 시스템 드라이버가 필요하다. 이러한 문제 때문에 요즘에는 initramfs를 더 많이 사용한다.
-
LILO vs GRUB: LILO는 리눅스 초기부터 사용하던 부트로더로 작고 가볍지만, 커널을 변경할 때마다 직접 lilo 명령을 실행해줘야 한다. GRUB은 이러한 문제를 해결해 자동으로 부트 이미지를 발견할 수 있고, 여러 운영체제에 대해 지원하므로 멀티 부팅이 가능하다. (참고)
-
-
head.S를 실행해 커널을 초기화하고, 커널 이미지를 압축 해제한 후 커널을 실행한다. 커널이 실행되면, initramfs가 존재하는지 확인한 후 initramfs를 루트 파일시스템(/)으로 read-only로 마운트 한다. 그 후 init 프로세스를 실행한다.
-
init 프로세스는 PID가 1번인 프로세스로, 루트 파일시스템이 마운트 된 후 가장 먼저 실행되는 프로세스이다. 다양한 시스템 초기화 작업을 하고, 시간이나 네트워크 등의 기본 서비스들을 시작한다.
부트로더의 역할
- 하드웨어 초기화
- 커널 이미지 로드
'Embedded System' 카테고리의 다른 글
Android Boot Sequence (0) | 2020.05.26 |
---|---|
임베디드 시스템의 Boot Sequence (0) | 2020.05.26 |
Cross Compile (0) | 2020.05.25 |
Linux Kernel의 개념 (0) | 2020.05.22 |
Embedded System의 개념 (0) | 2020.05.22 |