1 / 24

Ch 08. 부트 프로세스

Ch 08. 부트 프로세스. Flatstar. 부트 프로세스란 ?. 컴퓨터의 시동 과정을 부트 과정 (Boot process) 라고 합니다 . 시스템의 부팅 과정을 이해하는 것은 매우 중요한 과정으로 리눅스 시스템 운영의 기본이 됩니다 . 리눅스 시스템의 부트 과정은 다음과 같이 7 단계로 구분되어 있습니다 . 부트 프로세스. 1. 시스템 전원 ON. 2. BIOS 프로그램의 실행. 3. 부팅매체 검색. 4. 부트로더 실행. 5.

padma
Télécharger la présentation

Ch 08. 부트 프로세스

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ch 08. 부트 프로세스 Flatstar

  2. 부트 프로세스란? 컴퓨터의 시동 과정을 부트과정(Boot process)라고 합니다. 시스템의 부팅 과정을 이해하는 것은 매우 중요한 과정으로 리눅스 시스템 운영의 기본이 됩니다. 리눅스 시스템의 부트 과정은 다음과 같이 7단계로 구분되어 있습니다.

  3. 부트 프로세스 1 시스템 전원 ON 2 BIOS 프로그램의 실행 3 부팅매체 검색 4 부트로더 실행 5 커널 부트 이미(vmlinuz) 적재 6 루트(\) 파일시스템 마운트 7 init 프로세스 실행 Conclusion

  4. 1 시스템 전원 ON 시스템에 전원을 공급하는 과정입니다. 메인보드의 ROM-BIOS*에 있는 BIOS** 프로그램들이 자동으로 시작되고 이 프로그램들은 전원이 공급됨에 따라 메모리와 CPU를 동작시킵니다. *ROM-BIOS = BIOS들이 들어있는 롬. 롬과 램이 뭔지 모르시는 분? **BIOS = Basic Input Output System, 나머지는 다음 장에.. Conclusion

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

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

  7. 3 부팅매체 검색 POST 과정에서 문제가 발견되지 않고 검사가 무사히 완료되면 검색된 부팅매체*중 CMOS**에 설정되어 있는 순서대로 부팅을 시도합니다. 이 때, 하드디스크로의 부팅에 있어서는 MBR***로 부팅의 제어권을 넘기게 되는데 그에 따라서 MBR에 존재하는 부트로더(Boot loader)인 GRUB을 읽어 들이게 됩니다. *부팅매체 = 하드디스크, CD-ROM, DVD, 네트워크 등등 **CMOS = 트랜지스터 관련 테크놀러지가 아니다. CMOS BIOS. ***MBR = Master Booting Record, 시스템 파일의 첫 번째 부분. 부트로더, GRUB = 다음 장에서..

  8. 4 부트로더 실행 윈도우 운영체제만을 사용할 때에는 부트로더에 큰 관심을 가지지 않아도 되겠지만 리눅스 시스템을 사용하기 위해서는 반드시 부트로더에 대한 이해가 필요합니다. 부트로더(Boot Loader)라 함은 운영 체제의 부팅 이전에 먼저 실행되는 프로그램으로 *커널이 올바르게 부팅되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 부팅 시키는 프로그램입니다. 리눅스커널을 위한 부트로더로는LILO(Linux Loader)와 GRUB(Grand Unified Bootloader) 등이 있으며, 현재는 GRUB가 대표적으로 사용되고 있습니다.

  9. *커널= kernel, 알맹이란 뜻으로 시스템이 부팅될 때 가장 먼저 읽혀지는 핵심 부분입니다. 커널은 시스템의 모든 자원을 관리하고 필요할 때 자원을 준비해서 작업을 할 수 있도록 도와줍니다. • 커널은 다음과 같이 크게 몇 부분의 기능으로 구성되어 있습니다: • 그 시스템의 메모리와 각 프로세스의 할당문제를 관리하는 기능 . • CPU를 사용하는 순서를 정하는 일. • 이렇게 함으로 해서, 모든 사용자가 골고루 원하는 작업을 동시에 할 수 있도록 하는 일 . • 그 시스템에서 처리되는 각종 데이타를 변환, 전송 하는 기능 . • 쉘과 연관되어 쉘에서 지시한 작업을 수행하고, 그 결과를 쉘로 보내는 일 . • 파일 시스템의 접근 권한을 처리하는 일 .

  10. 4 부트로더 실행 GNU GRUB은 Erich Stefan Boleyn에 의해 개발된 부트로더로 GRand Unified Bootloader의 약자입니다. 처음 GRUB은 GNU Hurd를 위해 개발이 되었었지만 점차 리눅스의 전통적인 부트로더였던LILO의 단점을 보완한 매우 막강한 기능 때문에 공개 운영체제인 Linux의 기본 부트로더로 자리 잡았습니다. 부트로더GRUB의 가장 큰 특징은 파일시스템과 커널 실행 포맷을 인식하여 하드디스크 상에서의 커널의 물리적인 위치를 기록하지 않고도 커널 파일명과 커널이 위치하고 있는 파티션의 위치만을 알고 있으면 시스템 부팅이 가능하다는 점입니다. LILO의 경우에는 새로운 커널을 설치하거나 커널 컴파일 후에는 LILO를 다시 인식 시켜주어야만 했습니다. 다음은 GRUB의 특징입니다.

  11. 4 부트로더 실행 사용하기 편하며, 설정이 매우 편리합니다. Chain-loader를 이용하여 Linux, FreeBSD, NetBSD, OpenBSD, Windows등 기타 운영체제들과 멀티 부팅이 가능합니다. 메뉴 인터페이스를 제공합니다. 부트 정보가 잘못되었을 경우 바로 수정하여 부팅할 수 있습니다. 시스템의 BIOS에서 인식하는 모든 디바이스들에 액세스가 가능합니다. 네트워크 상에서 GRUB을 수정할 수 있습니다. gzip형식의 파일을 사용할 수 있습니다. 파일시스템과 커널 실행 포맷을 인식하여 하드디스크 상에서의 커널의 물리적인 위치를 기록하지 않고도 커널 파일명과 커널이 위치하고 있는 파티션의 위치만을 알고 있으면 시스템 부팅이 가능합니다.

  12. 4 부트로더 실행 • 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 은 첫 번째 엔트리를 의미합니다.

  13. 4 부트로더 실행 • Timeout=5 • 지정된시간동안 키보드의 아무런 입력이 없으면 지정된 엔트리로 부팅하라는 의미입니다. Timeout=5라면 5초 안에 키보드의 입력이 들어오지 않는다면 디폴트로 정해둔 엔트리로 시작합니다. • Splashimage=(hd0,1)/grub/splash.xpm.gz • GRUB의 부팅 이미지 파일 위치를 지정합니다. • Hiddenmenu • hiddenmenu가 적용된 이후로는 메뉴를 숨기게 됩니다. • Password • GRUB 부트로더에 암호를 지정하는 옵션입니다. • Title • 런타임 시 사용자 인터페이스에서 부팅이 될 부트 엔트리 설정 영역을 가리킵니다. Root, kernel, initrd와 함께 운영체제의 위치, 커널 이미지, initrd의 위치를 지정해 줍니다. Title옵션에는 부트 엔트리명, 즉 부팅할 운영체제의 이름을 정의해 줍니다.

  14. 5 커널 부트 이미지(vmlinuz) 적재 GRUB의 부트 메뉴에서 커널을 선택하게 되면 커널 이미지가 동작을 하게 됩니다. 이 때 커널 이미지*(/boot/vmlinuz-2.6.9-34.EL)은 압축되어 있기 때문에 PID 0번인 swapper 프로세스를 호출하게 됩니다. Swapper 프로세스는 커널 이미지를 압축헤제하고커널이 사용할 각 장치드라이브들을 초기화하고 자세한 정보를 콘솔에 뿌려줍니다. *커널 이미지 = 커널이 하나의 파일로 디스크에 저장되어 있는 것을 의미합니다. 커널은 원래 파일에 저장되어있는 성격이 아니라 컴퓨터가 꺼지기 전까지는 항상 메모리 안에 존재합니다. Conclusion

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

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

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

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

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

  20. 7 init 프로세스 실행 • Runlevel 0 : 시스템 종료(halt) • Runlevel 1 : 단일 사용자 모드, 싱글 모드 • Runlevel 2 : NFS를 지원하지 않는 다중 사용자 모드 • Runlevel 3 : 모든 기능을 포함한 다중 사용자 모드, TUI 환경 • Runlevel 4 : 사용되지 않는 실행 모드(사용자가 직접 정의하여 사용 가능) • Runlevel 5 : x윈도우 부팅 • Runlevel 6 : 시스템 재부팅

  21. 7 init 프로세스 실행 /etc/rc.d/rc5.d 디렉토리를 보면 여러 개의 파일들로 구성되어 있습니다. S00microcode_ctl-> so4readahead_early-> so5kudzu-> SO6cpuspeed-> so8arptables_if 순으로 스크립트들이 실행 됩니다.

  22. 7 init 프로세스 실행 /etc/rc.d/rc5.d 디렉토리를 보면 여러 개의 파일들로 구성되어 있습니다. S00microcode_ctl-> so4readahead_early-> so5kudzu-> SO6cpuspeed-> so8arptables_if 순으로 스크립트들이 실행 됩니다.

  23. Thank You !

More Related