Transcript
Page 1: Ch 08.  부트 프로세스

Ch 08. 부트 프로세스

Flatstar

Page 2: Ch 08.  부트 프로세스

부트 프로세스란 ?

컴퓨터의 시동 과정을 부트 과정 (Boot process) 라고 합니다 .

시스템의 부팅 과정을 이해하는 것은 매우 중요한 과정으로 리눅스 시스템 운영의 기본이 됩니다 .

리눅스 시스템의 부트 과정은 다음과 같이 7 단계로 구분되어 있습니다 .

Page 3: Ch 08.  부트 프로세스

부트 프로세스

시스템 전원 ON

BIOS 프로그램의 실행

부팅매체 검색

부트로더 실행

1

2

3

4

커널 부트 이미 (vmlinuz) 적재

루트 (\) 파일시스템 마운트

init 프로세스 실행

Conclusion

5

6

7

Page 4: Ch 08.  부트 프로세스

Conclusion

시스템 전원 ON1

시스템에 전원을 공급하는 과정입니다 . 메인보드의 ROM-BIOS* 에 있는 BIOS** 프로그램들이 자동으로 시작되고 이 프로그램들은 전원이 공급됨에 따라 메모리와 CPU 를 동작시킵니다 .

*ROM-BIOS = BIOS 들이 들어있는 롬 . 롬과 램이 뭔지 모르시는 분 ?**BIOS = Basic Input Output System, 나머지는 다음 장에 ..

Page 5: Ch 08.  부트 프로세스

Conclusion

BIOS(Basic Input Output System) 는 시스템의 부팅 (Booting) 시에 가장 먼저 실행되는 프로그램입니다 . 전력이 공급되면 마더보드의 ROM-BIOS에 있는 BIOS 들이 자동으로 동작합니다 . 가장 근본적인 어떻게 화면에 표시를 할 지 , 어떻게 디스크에 저장을 할 것인지 , 어떻게 키보드로부터 입력을 받을 것인지 등에 대한 프로그램이 들어가 있습니다 . 우리가 무의식적으로 호흡을 하고 , 잠자면서도 심장이 뛰는 것과 마찬가지로 모든 컴퓨터 시스템의 안쪽에서 돌아가고 있는 시스템입니다 .

BIOS 프로그램의 실행2

BIOS 란 ?

ROM-BIOS

Page 6: Ch 08.  부트 프로세스

Conclusion

POST(Power-On Self Test) 란 시스템 부팅 (Booting) 시 CPU, 메모리 , 그래픽카드 , 키보드 등등의 정상작동 상태를 확인하는 프로그램입니다 . 이 과정에서 문제가 발견되지 않으면 정상적인 부팅 과정으로 넘어가고 , 문제가 발견되면 ‘삑’하는 비프음 (beep)과 함께 SETUP 을 위해 시스템 기능이 잠시 정지합니다 . POST 도 마더보드 운영의 일환인므로 BIOS 안에 포함되지만 보통 BIOS 에서 POST 기능을 따로 떼어내서 해석하기 때문에 따로 다룹니다 .

BIOS 프로그램의 실행2

POST

Ps. POST 문제 발생 시 발생하는 비프음에 관한 정보 .

http://blog.daum.net/hanlimpark/13565134

Ps2. 내 블로그 아님 .

Page 7: Ch 08.  부트 프로세스

부팅매체 검색3

POST 과정에서 문제가 발견되지 않고 검사가 무사히 완료되면 검색된 부팅매체 * 중 CMOS** 에 설정되어 있는 순서대로 부팅을 시도합니다 . 이 때 , 하드디스크로의 부팅에 있어서는 MBR***로 부팅의 제어권을 넘기게 되는데 그에 따라서 MBR 에 존재하는 부트로더 (Boot loader) 인 GRUB을 읽어 들이게 됩니다 .

* 부팅매체 = 하드디스크 , CD-ROM, DVD, 네트워크 등등**CMOS = 트랜지스터 관련 테크놀러지가 아니다 . CMOS BIOS.***MBR = Master Booting Record, 시스템 파일의 첫 번째 부분 .부트로더 , GRUB = 다음 장에서 ..

Page 8: Ch 08.  부트 프로세스

윈도우 운영체제만을 사용할 때에는 부트로더에 큰 관심을 가지지 않아도 되겠지만 리눅스 시스템을 사용하기 위해서는 반드시 부트로더에 대한 이해가 필요합니다 .

부트로더 (Boot Loader) 라 함은 운영 체제의 부팅 이전에 먼저 실행되는 프로그램으로 * 커널이 올바르게 부팅되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 부팅 시키는 프로그램입니다 .

리눅스 커널을 위한 부트로더로는 LILO(Linux Loader) 와 GRUB(Grand Unified Bootloader) 등이 있으며 , 현재는 GRUB 가 대표적으로 사용되고 있습니다 .

부트로더 실행4

BOOT LOADER 란 ?

Page 9: Ch 08.  부트 프로세스

* 커널 = kernel, 알맹이란 뜻으로 시스템이 부팅될 때 가장 먼저 읽혀지는 핵심 부분입니다 . 커널은 시스템의 모든 자원을 관리하고 필요할 때 자원을 준비해서 작업을 할 수 있도록 도와줍니다 .

커널은 다음과 같이 크게 몇 부분의 기능으로 구성되어 있습니다 :

• 그 시스템의 메모리와 각 프로세스의 할당문제를 관리하는 기능 .

• CPU 를 사용하는 순서를 정하는 일 .

• 이렇게 함으로 해서 , 모든 사용자가 골고루 원하는 작업을 동시에 할 수 있도록 하는 일 .

• 그 시스템에서 처리되는 각종 데이타를 변환 , 전송 하는 기능 .

• 쉘과 연관되어 쉘에서 지시한 작업을 수행하고 , 그 결과를 쉘로 보내는 일 .

• 파일 시스템의 접근 권한을 처리하는 일 .

Page 10: Ch 08.  부트 프로세스

GNU GRUB 은 Erich Stefan Boleyn 에 의해 개발된 부트로더로 GRand Unified Bootloader 의 약자입니다 . 처음 GRUB 은 GNU Hurd 를 위해 개발이 되었었지만 점차 리눅스의 전통적인 부트로더였던 LILO 의 단점을 보완한 매우 막강한 기능 때문에 공개 운영체제인 Linux 의 기본 부트로더로 자리 잡았습니다 .

부트로더 GRUB 의 가장 큰 특징은 파일시스템과 커널 실행 포맷을 인식하여 하드디스크 상에서의 커널의 물리적인 위치를 기록하지 않고도 커널 파일명과 커널이 위치하고 있는 파티션의 위치만을 알고 있으면 시스템 부팅이 가능하다는 점입니다 .

LILO 의 경우에는 새로운 커널을 설치하거나 커널 컴파일 후에는 LILO 를 다시 인식 시켜주어야만 했습니다 .

다음은 GRUB 의 특징입니다 .

부트로더 실행4

GRUB

Page 11: Ch 08.  부트 프로세스

① 사용하기 편하며 , 설정이 매우 편리합니다 .

② Chain-loader 를 이용하여 Linux, FreeBSD, NetBSD, OpenBSD, Windows 등 기타 운영체제들과 멀티 부팅이 가능합니다 .

③ 메뉴 인터페이스를 제공합니다 .

④ 부트 정보가 잘못되었을 경우 바로 수정하여 부팅할 수 있습니다 .

⑤ 시스템의 BIOS 에서 인식하는 모든 디바이스들에 액세스가 가능합니다 .

⑥ 네트워크 상에서 GRUB 을 수정할 수 있습니다 .

⑦ gzip 형식의 파일을 사용할 수 있습니다 .

⑧ 파일시스템과 커널 실행 포맷을 인식하여 하드디스크 상에서의 커널의 물리적인 위치를 기록하지 않고도 커널 파일명과 커널이 위치하고 있는 파티션의 위치만을 알고 있으면 시스템 부팅이 가능합니다 .

부트로더 실행4

GRUB 의 특징

Page 12: Ch 08.  부트 프로세스

GRUB 의 설정파일은 /boot/grub/grub.conf 입니다 .

GRUB 은 리눅스에서 사용하는 디스크 이름과는 차이가 있습니다 . 리눅스의 경우에는 IDE 하드디스크는 hda, hdb 등으로 사용하고 SCSI하드디스크는 sda, sdb 와 같은 형태로 사용합니다 . 또한 파티션별로 hda1, hda2 로 sda1, sda2 와 같은 형태로 사용합니다 . 하지만 , GRUB에서는 IDE 하드디스크와 SCSI 하드디스크를 구별하지 않습니다 . 즉 , 첫 번째 하드디스크는 (hd0) 이 됩니다 . 예를 들어 , 리눅스의 had 와 sda 를 (hd0) 으로 표현한다는 것입니다 . 또한 , (hd0,0) 은 hda1 혹은 sda1 을 의미하는 것입니다 .

Default=0 GRUB 에서 기본 부팅을 시도할 부트 엔트리 값입니다 . 부트 엔트리는 ‘ title’ 로 명시된 것을 말하게 되는데 , 각 엔트리를 0 번부터 순서대로 숫자를 매깁니다 . Default=0 은 첫 번째 엔트리를 의미합니다 .

부트로더 실행4

GRUB 의 설정

Page 13: Ch 08.  부트 프로세스

Timeout=5 지정된 시간동안 키보드의 아무런 입력이 없으면 지정된 엔트리로 부팅하라는 의미입니다 . Timeout=5 라면 5 초 안에 키보드의 입력이 들어오지 않는다면 디폴트로 정해둔 엔트리로 시작합니다 .

Splashimage=(hd0,1)/grub/splash.xpm.gz GRUB 의 부팅 이미지 파일 위치를 지정합니다 .

Hiddenmenu hiddenmenu 가 적용된 이후로는 메뉴를 숨기게 됩니다 .

Password GRUB 부트로더에 암호를 지정하는 옵션입니다 .

Title런타임 시 사용자 인터페이스에서 부팅이 될 부트 엔트리 설정 영역을 가리킵니다 . Root, kernel, initrd 와 함께 운영체제의 위치 , 커널 이미지 , initrd 의 위치를 지정해 줍니다 . Title 옵션에는 부트 엔트리명 , 즉 부팅할 운영체제의 이름을 정의해 줍니다 .

부트로더 실행4

GRUB 의 설정

Page 14: Ch 08.  부트 프로세스

Conclusion

GRUB 의 부트 메뉴에서 커널을 선택하게 되면 커널 이미지가 동작을 하게 됩니다 . 이 때 커널 이미지 *(/boot/vmlinuz-2.6.9-34.EL) 은 압축되어 있기 때문에 PID 0 번인 swapper 프로세스를 호출하게 됩니다 . Swapper 프로세스는 커널 이미지를 압축헤제하고 커널이 사용할 각 장치드라이브들을 초기화하고 자세한 정보를 콘솔에 뿌려줍니다 .

커널 부트 이미지 (vmlinuz) 적재5

* 커널 이미지 = 커널이 하나의 파일로 디스크에 저장되어 있는 것을 의미합니다 . 커널은 원래 파일에 저장되어있는 성격이 아니라 컴퓨터가 꺼지기 전까지는 항상 메모리 안에 존재합니다 .

Page 15: Ch 08.  부트 프로세스

Conclusion

하드웨어의 검색 후에 커널은 루트 (\) 파일 시스템을 마운트 합니다 . 이 때 마운트는 파일시스템이 안전하게 점검될 수 있도록 읽기 전용 (read-only) 으로 마운트 되며 , 이후에 읽기 /쓰기로 마운트가 이루어집니다 .

루트 (\) 파일시스템 마운트6

Page 16: Ch 08.  부트 프로세스

모든 프로세스의 부모 역할을 하는 PID 1 번의 init 프로세스를 실행합니다 . Init 프로세스는 사용자가 시스템을 사용할 수 있는 환경을 만들어 주는데 이 과정을 시스템 초기화라고 합니다 . 여러 명령이 스크립트 파일을 호출하여 시스템 초기화가 진행됩니다 . Init 프로세스는 기본 시스템 초기화 스크립트인 sysinit 스크립트를 실행하고 sysinit 스크립트는 fack 명령어를 이요하여 로그인 프롬프트가 나오기 전까지 파일시스템 점검 , 필요한 커널 모듈의 메모리 적재 , 스왑 파티션 초기화 , 네트워크 포기화 , 서비스 프로세스 관리 , 가상 콘솔 접속 관리 , 실행 레벨 관리를 실행하고 , /etc/fstab 에 명시되어 있는 각 파티션들을 마운트 하는 과정을 수행합니다 .Sysinit 프로세스의 호출이 끝나게 되면 init 프로세스는 가장 먼저 /etc/inittab 파일을 읽어 들입니다 . /etc/inittab 파일에는 시스템의 기본 실행 단계가 정의되어 있으며 , 리눅스 시스템의 부팅에 매우 중요한 역할을 하게 됩니다 . 그러면 이러한 inittab 파일을 자세히 살펴보도록 합시다 .

init 프로세스 실행7

Page 17: Ch 08.  부트 프로세스

INIT 프로세스의 설정 파일은 다음과 같은 항목으로 구성되어 있습니다 .Id : runlevel : action : process

Id : id 는 inittab 에서 다른 설정과 구분하기 위해서 사용하는 것으로 1~4글자로 이루어져 있습니다 .Runlevel : 특정한 동작을 하게 되는 실행 레벨 리스트입니다 .Action : 그 줄의 프로세스가 어떤 동작을 취할지 설정하는 것으로 respawn 과 wait 입니다 . -respawn : 프로세스가 종료되면 재실행되는 것을 의미 -wait : 프로세스의 특정 레벨에서 한번 실행된 init 는 이 프로세스가 종료될 때까지 대기합니다 . -once : 영화 .. 가 아니라 지정한 runlevel 이 실행되면 한번만 그 프로세스를 실행합니다 .

init 프로세스 실행7

INIT 프로세스의 설정 파일 (/etc/inittab)

Page 18: Ch 08.  부트 프로세스

-boot : 시스템 부팅 때에 그 프로세스를 실행합니다 . 이때는 runlevel 값은 무시됩니다 . -bootwait : 시스템 부팅시에 그 프로세스가 실행되는데 , 이 때 init 는 그 프로세스가 종료되기를 기다리게 됩니다 . 이때는 runlevel 값은 무시됩니다 . -off : 아무것도 아닙니다 . 단지 id 만 존재하게 됩니다 . -ondemand : 지정한 ondemand runlevel 이 호출될 때마자 그 프로세스를 실행합니다 . 하지만 runlevel 값은 바뀌지 않습니다 . -initdefault : 시스템 부팅 뒤에 실행될 runlrvel 을 지정합니다 . 만일 이 부분이 없을 경우에는 어떠한 runlevel로 실행할 것인지 콘솔에서 물어보게 됩니다 . -sysinit : 시스템 부팅시에 그 프로세스가 실행됩니다 . 이것은 boot, bootwait 로 지정된 프로세스보다 먼저 실행됩니다 . Process 필드는 무시됩니다 .Process : 실행될 프로세스를 지정합니다 .

init 프로세스 실행7

INIT 프로세스의 설정 파일 (/etc/inittab)

Page 19: Ch 08.  부트 프로세스

Inittab 파일의 설정에는 ‘실행레벨’에 대한 설정이 있습니다 . 실행레벨은 init 프로세스에 의해 시스템이 어떻게 동작할 것인지를 결정하는 실행 값을 의미하는데 , 윈도우를 실행하고 ‘ f8’ 키를 누르게 되면 시스템을 어떻게 시작하려는지 결정할 수 있고 , 안전모드라는 것도 보았을 것입니다 . 즉 , 리눅스 시스템도 이와 같은 실행레벨이 존재하게 되는데 0 번 ~6 번까지 7 개의 값을 가지게 됩니다 . 보통 리눅스 시스템을 운영할 경우 가장 많이 사용하는 것이 runlevel3 이지만 , 시스템의 성능이 향상되면서 요즈음에는 runlevel5 로 운영하는 시스템들이 많이 있습니다 . 이러한 runlevel 에 대해 살펴보면 다음과 같습니다 .

init 프로세스 실행7

Default runlevel

Page 20: Ch 08.  부트 프로세스

- Runlevel 0 : 시스템 종료 (halt)- Runlevel 1 : 단일 사용자 모드 , 싱글 모드- Runlevel 2 : NFS 를 지원하지 않는 다중 사용자 모드- Runlevel 3 : 모든 기능을 포함한 다중 사용자 모드 , TUI

환경- Runlevel 4 : 사용되지 않는 실행 모드 ( 사용자가 직접

정의하여 사용 가능 )- Runlevel 5 : x 윈도우 부팅- Runlevel 6 : 시스템 재부팅

init 프로세스 실행7

Default runlevel

Page 21: Ch 08.  부트 프로세스

/etc/rc.d/rc5.d 디렉토리를 보면 여러 개의 파일들로 구성되어 있습니다 . S00microcode_ctl-> so4readahead_early-> so5kudzu-> SO6cpuspeed-> so8arptables_if

순으로 스크립트들이 실행 됩니다 .

init 프로세스 실행7

S(start) 파일

Page 22: Ch 08.  부트 프로세스

/etc/rc.d/rc5.d 디렉토리를 보면 여러 개의 파일들로 구성되어 있습니다 . S00microcode_ctl-> so4readahead_early-> so5kudzu-> SO6cpuspeed-> so8arptables_if

순으로 스크립트들이 실행 됩니다 .

init 프로세스 실행7

K(kill) 파일

Page 23: Ch 08.  부트 프로세스
Page 24: Ch 08.  부트 프로세스

Top Related