ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ 기본정리 ] 리눅스 시스템 부팅
    Technique/LINUX 2016. 5. 10. 22:38
    반응형

    리눅스 시스템의 부팅 과정은 크게 PC 부팅리눅스 부팅으로 나뉜다.

    다시 말 하자면 리눅스가 설치된 하드웨어의 부팅과 리눅스 운영체제의 부팅 절차로 구분할 수 있다.





    1. 바이오스 단계

    전원 스위치를 켜서 부팅하면 제일 먼저 바이오스 ( BIOS Basic Input Output System )가 동작한다.

    바이오스는 보통 ROM에 저장되어 있어 흔히 ROM-BIOS라고 부른다. 바이오스는 PC에 장착된 기본적인 하드웨어의 상태를 확인한 후 부팅 장치를 선택하여 부팅 디스크의 첫 섹터에서 512바이트를 로딩한다.

    이 512 바이트를 마스터 부트 레코드( Master Boot Record MBR ) 이라고 하는데, 디스크의 어느 파티션에 2차 부팅 프로그램 ( 부트 로더 ) 이 있는지에 대한 정보가 저장되어 있다.

    메모리에 로당된 MBR은 부트 로더를 찾아 메모리에 로딩하는 작업까지 수행한다.



    2. 부트로더 단계

    바이오스 단계에서 MBR은 부트 로더를 찾아 메모리에 로딩한다. 부트 로더는 일반적으로 여러 운영체제 중에서 부팅할 운영체제를 선택할 수 있도록 메뉴를 제공한다.

    리눅스의 대표적인 부트 로더는 GRUB와 LILO이다.


    우분투에서는 GRUB를 사용하는데 기본적으로 멀티부팅이 아닐 경우 GRUB는 메뉴를 출력하지 않고 바로 부팅 작업을 진행한다. 부팅할 때 GRUB메뉴를 출력하려면 /etc/default/grub 파일을 수정해야한다.

    GRUB_HIDDEN_TIMEOUT = 0 을 주석처리하면되는데 이 옵션의 의미는 표시되는 시간을 의미하며, 시간이 지나면 자동으로 부팅이 진행된다.

    부트로더는 리눅스 커널을 메모리에 로딩하는 역할을 수행한다. 리눅스 커널은 /boot 디렉토리 아래에 'vmlinuz-버전명' 의 형태로 제공된다.


    3.커널 초기화 단계

    부트 로더에 의해 메모리에 로딩된 커널은 가장 먼저 시스템에 연결된 메모리, 디스크, 키보드, 마우스 등의 장치를 검사한다. 리눅스를 처음 시스템에 설치할 때 사용 가능한 하드웨어 정보를 미리 확인했다가, 부팅할 때 이 장치들이 사용 가능한 상태로 유지되고 있는지 확인하는 것이다.

    장치 검사 등 기본적인 초기화 과정이 끝나면 커널은 일반적으로 프로세스를 생성하는 방식인 fork를 사용하지 않고 생성되는 프로세스와 스레드를 생성한다. 이 프로세스들은 메모리 관리와 같은 커널의 여러 가지 동작을 수행한다. 이런 커널 프로세스의 개수와 종류는 리눅스의 버전과 종류에 따라 다르다. 이 프로세스들은 일반적인 프로세스와 구분되도록 대괄호로 표시하며, 주로 PID 번호가 낮게 배정되어 있다.


    4.init 실행 단계

    init 실행 단계에 이르면 리눅스가 본격적으로 동작하기 시작했다고 생각하면 된다. init 실행 단계에서는 다양한 서비스를 동작시킨다. 

    각 서비스가 시작하는 과정이 화면에 메시지로 출력되는데 우분투에서는 기본적으로 이 메시지를 보이지 않도록 하고 이미지를 출력한다.

    부트 스플래시 ( Boot Splash) 라고 하는데 이 이미지는 우분투 배포판에 따라 다르게 출력된다.

    부트 스플래시 화면이 진행중 일때 Ctrl + D 키를 누르면 메시지가 출력되는 화면으로 전환된다.

    부팅시 출력되는 메시지는 각종 서비스가 정상적으로 시작하는지 아니면 실패인지를 보여준다. 그런데 이 메시지가 워낙 빨리 지나가므로 확인하기 어려울 것이다.

    부팅할 때 메시지가 출력되도록 하려면 /etc/default/grub 파일에서 GRUB_CMDLINE_LINUX_DEFAULT='quiet splash' 를 찾아 quiet를 삭제하면 된다.

    이 메시지는 부팅 후 dmesg 명령이나 more /var/log/boot.log 명령으로 확인할 수 있다.


    전통적으로 유닉스에서는 init 프로세스가 서비스를 실행시켰다. 따라서 init 프로세스는 처음 생성된 프로세스로 PID가 1번이다. 


     5. 로그인 프롬프트 출력

    init 실행 단계는 데몬을 모두 실행시킨 뒤 마지막으로 그래픽 로그인 시스템을 동작시키고 로그인 프롬프트를 출력한다.


    반응형

    댓글

Designed by Tistory.