본문 바로가기
IT.인터넷

리눅스의 부팅과정

by Mr-후 2017. 7. 17.
반응형

일반적인 운영체제의 부팅 과정은 다음과 같다. 


시스템에 전원이 들어가면 ROM BIOS에 들어 있는 부트로더라는 프로그램이 하드디스크의 첫 번째 트랙의 첫 번째 섹터에 해당하는 MBR(Master Boot Record)에 있는 부팅 관련 프로그램을 실행시킨다. MBR에는 부팅 관련 프로그램 외에도 파티션 테이블이 있다. 


  • 파티션의 시작과 끝을 나타내는 주소 -> 파티션의 크기와 위치를 알 수 있다. 
  • 부팅 가능한 파티션인지의 관련 정보
  • 파티션 타입 : 두자릿수의 ID로 표현하며 파티션이 어떤 용도로 사용될 것인지를 나타내는데, 표준이 아니라서 파일 시스템마다 사용하는 값이 달라질 수 있다. 

MBR안의 작은 프로그램은 이러한 정보를 바탕으로 부팅 가능한 운영체제의 부트 섹터로 제어권을 넘기고, 제어권을 넘겨받은 부트 섹터는 자신의 운영체제를 메모리로 로드시키기 위해 부트 프로그램을 실행시킨다. 

리눅스의 부팅 과정은 일반적은 윈도우즈나 도스와는 차이가 있다. 

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

LILO boot: _ 

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

LILO boot: linux 
Loading linux .... 

2) 커널 부팅 
메모리에 로드된 커널을 실행한다. 가장 먼저 커널 자신에게 포함된 기능들을 점검하고 설치된 하드웨어를 점검한다. 대부분의 리눅스 시스템에서는 압축된 커널 이미지를 사용하는데 이 압축된 커널 이미지는 메모리에 적재된 다음에 스스로 압축을 푼다. 

Uncompressing Linux .... 

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

3)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가 적힌 파일 


Runlevel의 종류 

[0] : 시스템 종료 
[1] : 싱글 유저(Single User) 부트 : LILO프롬프트에서 linux single이라고 입력하면 Runlevel 1에서 리눅스가 시작한다. 이 경우 디폴트인 root로 로그인되며 대다수의 중요한 데몬들은 실행되지 않게 설정되어 있다. 
[2] : NFS를 지원하지 않는 다중 사용자 모드 
[3] : 모든 네트워크 기능을 지원하는 다중 사용자 모드 
[4] : 특별한 의미가 정해지지 않고, 나름대로 정의해서 쓸 수 있는 Runlevel이다. 필요에 따라서 실행시키고 원하는 데몬이나 서비스를 /etc/rc.d/rc4.d 디렉토리 밑에 설정하여 각자의 특성이 있는 고유의 Runlevel을 정의할 수 있다. 
[5]. X윈도우즈 모드에서의 로그인 
[6]. 시스템 재부팅 

부팅 후 현재까지 시스템 가동 시간 알아보기 


> uptime 


현재 시스템 시간과 가동 후 얼마나 지난 지 알려 주며 현재 접속 중인 사용자 수도 알려 준다. 

유닉스(맥 터미널창)에서도 동일한 결과값이 나온다. 


출처 : Linux CentOS기초에서 활용까지 





반응형

'IT.인터넷' 카테고리의 다른 글

리눅스 기본 명령어(I)  (0) 2017.07.21
리눅스 명령어 [shutdown]과 시스템 종료 절차  (0) 2017.07.18
리눅스 디렉토리 구조  (0) 2017.07.14
리눅스 파티션 이해  (0) 2017.07.13
리눅스 커널(Kernel) 이야기  (0) 2017.07.13