Phantom

리눅스의 부팅 과정 본문

프로그래밍에 대한 정보들

리눅스의 부팅 과정

Ph4nt0m_ 2013. 4. 27. 08:47
반응형

리눅스의 부팅은 몇가지 절차를 거치면서 부팅이 된다.


1. LILO(LInux LOader)

로더라고 하는 프로그램은 커널을 메모리에 적재하는 일을 한다. 많은 사람은 LILO가 멀티 부팅을 이한 것으로 생각하고 있는데, 반드시 멀티 부팅이 아니더라도 리눅스 부팅을 하려면 반드시 LILO가 있어야 한다. 시스템에 전원이 들어오면 가장 먼저 디스크의 첫번째 섹터에 해당하는 MBR(Master Boot Record)을 읽어 부트 관련 프로그램인 로더를 실행한다.

※LILO는 예전에 쓰던 부트로더이며, 현재는 Grub을 사용합니다.

----------------------------------------------------------------------------------------------------------------------------------

LILO boot : _

----------------------------------------------------------------------------------------------------------------------------------

로더는 커널 이미지의 위치를 알고 있어 스스로 커너 이미지를 찾아 메모리에 적재한다.

여기까지가 바로 로더의 역할이다.

----------------------------------------------------------------------------------------------------------------------------------

LILO boot : linux

Loading linux ....

----------------------------------------------------------------------------------------------------------------------------------


2. 커널 부팅

위의 과정을 통해 메모리에 로드된 커널을 실행한다. 가장 먼저 커널 자신에게 포함된 기능들을 점검하고 설치된 하드웨어를 점검한다. 대부분의 리눅스 시스템에서는 압축된 커널 이미지를 사용하는데, 이 압축된 커널 이미지는 메모리에 적재된 다음에 스스로 압축을 푼다. 사용자는 이 과정을 다음과 같은 메시지를 통해 확인할 수 있다.

----------------------------------------------------------------------------------------------------------------------------------

Uncompressing Linux ....

----------------------------------------------------------------------------------------------------------------------------------

그다음은 커널 내부에 설치된 기능들과 현재 시스템에 설치된 하드웨어를 하나씩 점검 하고 인식하는 과정이 나타난다. 그리고 루트 파티션을 마운트하게 되는데, 대부분 이때 루트 파티션을 읽기전용(Read-Only)으로 마운트 한다. 이처럼 읽기 전용으로 마운트를 하는 이유는 다음에 수행될 init Script 중에 디스크를 검사하는 과정이 있는데, 이것을 안전한 상태에서 검사하려고 하기 때문이다. 디스크 검사를 모두 마치면 다시 쓰기 가능한 상태로 리마운트(remount)한다. 리마운트까지 마치면 커널은 /sbin/init 을 수행한다.


3. init

init 과정을 설명하기 전에 우선 프로세스(process)라는 용어에 대하여 먼저 살펴보자.

프로세스 시스템에서 현재 실행 중인 프로그램을 의미한다 파일에 저장된 프로그램은 단지 기계어 명령들을 파이에 옮겨 놓은 것에 불과하며 메모리에 적재되었을 때 실행되는데 이것을 프로세스라 한다. 만약 프로세스가 다른 프로세스를 새로 시행시키면 실행시킨 프로세스는 부모 프로세스(parent process)이며, 새로 실행된 프로세스는 자식 프로세스(child process)가 된다. 프로세스는 자기 고유의 번호를 가지고 있는데, 이것은 PID(Process ID)이다. 또한, 자신을 실행시킨 부모 프로세스의 고유번호는 PPID(Parent Process ID)이다.

init은 커널이 제일 먼저 실행시키는 프로세스이므로 무조건 PID 1번을 갖는다. 즉, INIT은 모든 프로세스의 최상위 부모 프로세스라고 할 수 있다. 커널은 init을 실행시키면 모든 제어권을 init에게 넘기고 프로그램이 특정 기능을 요청하면 처리해 주는 등의 일을 한다. init은 흔히 init Script라고 부르는 일련의 작업을 진행한다. 이 작업에 관련된 파일은 다음의 표와 같다.


init Script 관련 파일 및 해당 위치 

파일 설명 

 /etc/inittab 

init의 설정 파일

 /etc/rc.d/rc.sysinit

init Script에서 제일 먼저 실행되는 파일

 /etc/rc.d/rc.local 

init Script에서 제일 마지막에 실행되는 파일

 /etc/rc.d/init.d/*

 데몬을 실행시키기 위한 스크립트들

 /etc/rc.d/rc[0-6].d/*

 각 Runlevel에 정의된 데몬들을 실행시키기 위한 파일

 /etc/rc.d/rc

 각 Runlevel에 해당하는 스크립트를 실행시키는 스크립트

 /var/lock/subsys/* 

 현재 실행되고 있는 데몬들의 Lock파일

 /var/run/*.pid

 현재 실행되고 있는 데몬들의 PID가 적힌 파일


4. init 과 Runlevel

가장 먼저 init은 /etc/inittab이라는 설정 파일을 읽는다.

inittab파일 중간에

----------------------------------------------------------------------------------------------------------------------------------

id:5:initdefault:

----------------------------------------------------------------------------------------------------------------------------------

라고 적혀 있는데 이것은 Runlevel 5를 기본값으로 설정해 놓은 상태이다.

그리고 그밑에

----------------------------------------------------------------------------------------------------------------------------------

si::sysinit:/etc/rc.d/rc.sysinit

----------------------------------------------------------------------------------------------------------------------------------

이라고 적혀있는데, init은 가장 먼저 /etc/rc.d/rc.sysinit에 있는 명령들을 실행한다. 여기서는 루트파티션 이외의 다른 파티션을 검사하여 마운트 시키는 등의 과정이 있다.


다음 표는 init Script가 진행되는 경로를 나타내며 0번부터 6번까지의 방법이 있다.

Runlevel의 종류

 Runlevel

설 명 

 0

 시스템 종료

 1

 싱글 유저(Single User) 부트 : LILO(or Grub) 프롬프트에서 linux single이라고 입력하면 Runlevel 1에서 리눅스가 시작한다. 이 경우 디폴트인 root로 로그인되며 대다수의 중요한 데몬들을 실행되지 않게 설정되어 있다.

 2

 NFS(network file system)를 지원하지 않는 다중 사용자 모드

 3

 모든 네트워크 기능을 지원하는 다중 사용자 모드

 4

특별한 의미가 정해지지 않고, 나름대로 정의해서 쓸 수 있는 Runlevel이다.

필요에 따라서 실행시키기 원하는 데몬이나 서비스를 /etc/rc.d/rc4.d 디렉토리 밑에 설정하여 각자의 특성이 있는 고유의 Runlevel을 정의할 수 있다. 

 5

 X 윈도우즈 모드에서의 로그인

 6

 시스템 재부팅



반응형
Comments