Linux 부팅 과정은 크게 5단계로 나눌 수 있다.
0단계: 시스템 전원 공급
1단계: BIOS 단계
2단계: 부트로드 단계
3단계: 커널 단계
4단계: init 프로세스 단계
다음에서 각 단계의 세부 프로세스를 정리해보려고 한다.
리눅스 부팅 과정
0단계: 시스템 전원 공급
- 먼저 시스템에 전원을 켠다.
- 시스템 전원 공급과 함께 BIOS(Basic Input Output System) 프로그램이 메모리의 특정 번지에 자동으로 로드된다.
(CPU는 전원 공급과 함께 특정 번지의 BIOS 프로그램을 자동 실행한다.)
1단계: BIOS 단계
*BIOS: 운영체제 중 가장 기본적인 소프트웨어. 컴퓨터의 입출력을 처리하는 펌웨어
- POST(Power On Self Test; 자체진단기능)를 통해 하드웨어(cpu, ram, 제어장치, 주변장치 등)이 잘 동작하는지 확인한다.
- 부팅 디바이스(=부팅 장치;하드디스크, usb, 원격지 등)를 찾고, 해당 디바이스의 파티션 테이블을 검색하여(항상 MBR;Master Boot Record(디바이스의 가장 앞부분)에 존재) 부트로더를 읽어들인다.
- 부트로더가 메모리에 적재되면 BIOS는 종료되고 시스템 제어권은 부트로더가 갖게 된다.
+) BIOS는 하드웨어, cpu관련 설정, 부팅장치 검색순서 등을 정할 수 있다. -> BIOS 설정 단계에서 pxe 부팅이 가능하다.
2단계: 부트로드 단계
*부트로더: OS가 시동되기 전에 커널이 올바르게 시동되기 위한 준비작업을 하는 프로그램
- 부트로더를 실행한다(주로 GRUB(GRand Unified Bootloater나 LILO(Linux Loader)).
- GRUB는 커널 이미지를 불러들이고 시스템 제어권을 커널에게 넘겨준다.
- GRUB 환경설정 파일에서 어떤 부팅 커널로 부팅할 것인지 결정한다.
GRUB 환경 설정 파일: /boot/grub/grub.conf(/etc/grub.conf)
GRUB 실행 파일: /sbin/grub
설정 옵션: /boot/grub/grub.conf
CentOS 7이상: /etc/default/grub
+) 파일 수정 이후 # grub2-mkconfig -o /boot/grub2/grub.cfg 명령어로 설정을 적용한다.
3단계: 커널 단계
- 커널이 메모리로 로드되면 /var/log/dmesg 파일에 기록된다.
- 루트 파일시스템(/)을 읽기 전용으로 마운트한다. 이때 마운트에 실패하면 "커널 패닉" 메세지를 출력한다.
- PID 0번(swapper 프로세스)를 호출하여 커널이 사용할 각 장치의 드라이브를 초기화 한다.
- PID 1번을 실행한다. (init 프로세스) -> 최근엔 systemd를 더 많이 쓴다고 한다.
+) 부트로드 단계에서 init ram disk(initrd)를 통해 RAM디스크를 루트파일 시스템(/)으로 마운트 할 수 있다.
4단계: init 프로세스 단계
- init 프로세스 진행
- 기타 필수 프로그램들을 실행
- 부팅 완료
+) 부팅하는 동안 출력되는 메세지는 /var/log/boot.log에서 확인할 수 있다.
+) 부팅 과정에서의 에러들은 주로 커널패닉, 부트로더 에러가 대부분이다.
런 레벨(Runlevel)
리눅스가 부팅할 때, 시스템의 상태를 나타내는 값
Runlevel 0: 시스템 종료
Runlevel 1: single user mode. 관리자만 접속가능한 모드이다. 시스템 점검 등의 경우에 사용.
Runlevel 2: multi user mode. 네트워크는 제공하지 않는 모드이다.
Runlevel 3: full multi user mode. 거의 모든 자원 사용가능하지만 텍스트 유저모드만 지원한다. (콘솔창 하나만 띄우는 형식)
Runlevel 4: 사용하지 않는 런 레벨
Runlevel 5: full multi user mode. 런레벨 3과 비슷한데, 그래픽 유저모드도 지원한다.
Runlevel 6: reboot. 시스템 재부팅
+) 현재 런 레벨 확인하는 명령어: who -r
현재 런 레벨 3인 것을 확인할 수 있다.
+) 런 레벨 변경 명령어: init "런 레벨 숫자"
ex) init 3
'운영체제' 카테고리의 다른 글
프로세스(Process)와 스레드(Thread) (0) | 2022.10.13 |
---|---|
5-1 CPU Scheduling (Concepts) (0) | 2021.04.09 |
4 Thread (0) | 2021.04.09 |
3-3 IPC (0) | 2021.04.09 |
3-2 Process Scheduling (0) | 2021.04.05 |