리눅스 시작 프로세스(Linux startup process)는 리눅스를 부팅하는 동안 이루어 지는 여러 단계로 이루어진 초기화 프로세스입니다. 

 

리눅스를 부팅하는 과정은 여러 단계와 소프트웨어 구성요소가 더불어서 이루어집니다. 여기에 펌웨어 초기화, 부트로더 실행, 리눅스 커널 이미지의 적재 및 시작, 그리고 여러가지 시작 스크립트와 데몬이 실행됩니다. 각 단계들과 구성요서들은 각각 다른 변화와 접근을 하게 됩니다. 예를 들어 GRUB, LILO, SYSLINUX, 혹은 Loadlin는 부트로더로서 사용이 됩니다.

 

 

리눅스 시작 프로세스의 구성요소는 다음과 같습니다.

  1. 바이오스 : 기본적인 I/O 시스템으로 MBR을 실행합니다.
  2. MBR -> 마스터 부트 레코드로 GRUB을 실행합니다.
  3. GRUB -> Grand Unified Bootloader 커널을 실행합니다.
  4. Kernel -> /sbin/init을 실행합니다.
  5. Iinit -> runlevel 프로그램을 실행합니다.
  6. runlevel -> /etc/rc.d/rc*.c/ 실행합니다.

 

1. BIOS 

BIOS는 시스템의 (1) 무결성을 검사하고, (2) 부트로더 프로그램를 검색하여, 적재하고, 실행시킵니다.

BIOS 시작 과정에서 MBR이 저장되어 있는 매체의 우선순위 순서를 변경할 수 있습니다.

부트로더 프로그램을 감지 하고 메모리에 적재하면, BIOS는 제어를 적재된 부트로더 프로그램에 넘깁니다.

 

2. MBR

MBR은 마스터 부트 레코드(Master Boot Record)를 의미합니다.

부팅 가능한 디스크에서 첫 번째 섹터에 위치하며, /dev/hda, 혹은 /dev/sda 입니다.

MBR은 GRUB 부트 로더를 실행합니다.

 

MBR의 사이즈는 512바이트 이하이며, 다음과 같이 3개의 구성요소로 이루어져 있습니다.

 

 1) 부트 로더 정보 (처음 445 바이트)

 2) 파티션 테이블 정보 ( 그 다음 64 바이트)

 3) mbr 적합성 검사(2바이트)

   

 

위 그림은 MBR을 도식화 한 것입니다.

 

3. GRUB

 

GRUB은 Grand Unified Boot loader를 의미합니다.

Splash 스크린 표시를 하고, 아무것도 입력하지 않으면 Grub 설정 파일에 지정된 기본 커널 이미지를 로드합니다.

Grub의 설정 파일은 /boot/grub/grub.conf이며, GRUB의 역할은 커널과 initrd 이미지를 실행시키는 것 입니다.

 

4. Kernel

커널은 Grub.conf에서 "root="로 표기된 루트 파일 시스템을 마운트 하고, /sbin/init 프로그램을 실행합니다.

Init은 리눅스 커널에 의해 실행된 첫번째 프로그램으로 PID는 1을 가집니다. .

Initrd는 initial Ram disk를 의미하고, Initrd는 커널이 진짜 루트 파일 시스템을 마운트 할 때까지 일시적인 루트 파일 시스템을 사용하는데, 디스크의 파티션에 접근하거나 다른 하드웨어를 접근 하는데 필요한 드라이버가 컴파일되어 들어있습니다.

 

5. Init

/etc/inittab file 에서 Linux run level을 결정함

아래의 가능한 run levels이 있음

0 – halt

1 – Single user mode

2 – 다중사용자, NFS 제외

3 – 완전 다중사용자 모드

4- 사용되지 않음

5 – x11

6 – 재부팅

Init은 /etc/inittab에서 디폴트 initlevel을 가리키며, 그 것을 이용하여 모든 적합한 프로그램을 메모리에 적재합니다.

보통 디폴트 run lelvel을 3 혹은 5를 설정합니다.

 

6. Runlevel programs

리눅스 시스템이 부팅될 때, 여러가지 서비스들이 시작되는 것을 볼 수 있습니다. 부팅할 때 보여지는 다음과 같은 메시지들이 그에 해당됩니다.

Ex) starting sendmail …. OK

이런 프로그램들은 runlevel 프로그램이며, run level로 정의된 디렉토리에서 실행이 됩니다.

기본 init level 설정에 달려 있으며, 시스템은 다음과 같은 디렉토리 중 하나에서 프로그램을 실행합니다.

  • Run level 0 - /etc/rc.d/rc0.d/
  • Run level 1 - /etc/rc.d/rc1.d/
  • Run level 2 - /etc/rc.d/rc2.d/
  • Run level 3 - /etc/rc.d/rc4.d/
  • Run level 4 - /etc/rc.d/rc5.d/
  • Run level 6 - /etc/rc.d/rc6.d/

/etc 디렉토리에 이러한 경로들의 심볼릭 링크가 존재하고, S로 시작하는 프로그램은 시작(start)에 이용되는 프로그램, K로 시작되는 프로그램은 종료(kill)에 이용되는 프로그램 입니다.

이러한 프로그램의 S 혹은 K 옆에 따라오는 숫자들은 실행 순서가 되겠습니다.

 

 

출처 : http://www.thegeekstuff.com/2011/02/linux-boot-process/

+ Recent posts