티스토리 뷰

부팅 1단계 : ROM-BIOS 실행

부팅 2단계 : 부트로더(GRUB)의 실행과 역할

부팅 3단계 : 스와퍼(Swapper) 프로세스 수행

부팅 4단계 : init 프로세스의 실행

부팅 5단계 : 부팅 레벨의 결정 단계

부팅 6단계 : /etc/rc.d/rc.sysinit 스크립트 실행 ( 모든 부팅 레벨)

부팅 7단계 : /etc/rc.d/rcN.d/ 디렉토리의 스크립트 실행(부팅레벨에 따른 실행)

부팅 8단계 : 시스템 매직키 설정을 한다.

부팅 9단계 : 시스템 전원 공급 설정을 한다.

부팅 10단계 : 가상터미널 실행과 로그인창 실행

부팅 11단계 : X 윈도우 실행

 

 


 

1단계 : ROM-BIOS실행

ROM-BIOS : Read Only Memory - Basic Input Output System의 줄임말이며, 컴퓨터 메인보드에 장착된 컴퓨터 부팅 시 가장 먼저 실행되는 프로그램 (컴퓨터 하드웨어 인식과 각 장치들의 사용을 위한 인식 및 준비를 위한 가장 기초적인 프로그램)입니다. ROM-BIOS 프로그램은 CMOS에 들어 있습니다. ROM-BOIS라는 단어는 ROM이라는 하드웨어에 들어있는 BIOS라는 의미입니다.  ROM-BIOS는 ROM에 저장되어 있기 때문에 시스템 전원이 꺼지더라도 지워지지 않고 남아있습니다. (ROM-BIOS 프로그램 = CMOS 프로그램) 또한, POST(Power On Self Test : 자체 진단 기능) 기능을 하며 하드웨어 각 장치들 인식 및 초기화, 부트로더 기능을담당합니다.

POST(Power On Self Test : 자체 진단 기능) : 전원이 들어왔을 때 메인보드의 ROM-BIOS의 BIOS 프로그램들은 시스템에 장착된 하드웨어 장치들(CPU, RAM, DISK 등)을 하나씩 인식하기 시작한다. 인식하면서 이상유무를 체크한 후에 이상이 없다면 각 장치가 사용될 수 있도록 모든 장치의 초기화를 수행한다. 에러가 발생할 경우 비프음으로 알린다.

 

CMOS : 일반적인 컴퓨터의 CMOS 셋업은 컴퓨터에 어떤 하드디스크가 장착되어 있는가, 어떤 VGA 카드를 사용하는가 등을 사용자가 BIOS/UEFI에 저장하여 컴퓨터에게 어떤 주변기기들이 장착되어 있으며 어떻게 제어해야 할지 알려 주는 절차이다.  CMOS 셋업이 이루어져 있어야 BIOS에 CMOS를 읽어 어떤 장치가 장착되어 있는지, 어떻게 제어를 해야 할지 알게 됩니다.여기에서 오버클럭이나 하드웨어의 문제, 부팅 순서도 이 곳에서 정한다. 컴퓨터 전원이 꺼져도 내용을 저장할 수 있도록 별도의 건전지를 통해서 전원을 공급받기에, 건전지의 수명이 다하면 시스템 시간이 초기화 되는 현상이 발생할 수도 있다. 

 

BIOS : Basic Input Output System은 운영체제와 하드웨어 사이의 입출력을 담당하기 위해 저수준의 소프트웨어와 드라이버로 이루어진 펌웨어를 의미합니다. 또한, 컴퓨터에 전원이 들어오면 자동 실행되는 CMOS에 들어있는 프로그램(전원이 들어오는 즉시 자동 실행)입니다. 전원이 들어오는 즉시 메모리의 특정 번지로 로드되어 적재됩니다. CPU는 전원이 들어오면 즉시 메모리의 이 특정 주소에 있는 BIOS 명령을 실행하도록 만들어져 있습니다.쉽게 말해 운영체제는 메인보드나 그래픽 카드와 같은 하드웨어와 통신하기 위해 중간 매개체를 사용해야 합니다. 그렇게 되면 운영체제는 세부적인 하드웨어의 구성이나 신호체계를 알 필요없이 중간 매개체와 통신하면 됩니다. 이러한 중간 매개체 역할을 하는 것이 BIOS입니다.

 

부트로더 : 리눅스의 부트로더 종류는 LILO와 GRUB가 있는데 요즘 거의 대부분 GRUB입니다. POST단계에서 이미 현재 운영체제가 저장되어 있는 장치 또한 인식되어 있습니다. 부트로더(GRUB)를 가지고 있는 부팅매체(하드디스크, CD-ROM, USB 등)를 검사하기 시작합니다. 가장 먼저 검색된 하드디시크 장치에서 부트로더를 불러드립니다.(이것이 OS설치 시 COMS 환경에서 CD-ROM이나 USB를 부팅 순서를 먼저 사용하는 이유입니다.), 먼저 검색된 부팅매체의 0번 섹터(MBR)에서 부트 프로그램(부트섹터)을 읽어들여 메모리도 로드합니다. 바로 이 부트 프로그램에 부트로더인 GRUB이 들어있습니다. ROM-BIOS에 의해 부트로더(GRUB)가 메모리로 로딩된 이후부터는 ROM-BIOS는 시스템 부팅 제어권을 GRUB에게 넘겨주고 자기 자신은 종료합니다.

 

 

 


 

 

2단계 : 부트로더(GRUB)의 실행과 역할

부트로더의 역할 : 리눅스 커널 로드(부트로더에서 선택하는 항목들이 각각의 커널들입니다.)를 실행하며 스와퍼(Swapper)프로세스를 호출합니다. 부트로더 화면에서 어떤 부팅 메뉴로 부팅을 할 것인가를 결정하는 것은 /boot/grub/grub.conf (이게 맞아?)파일에 정의되어 있습니다. GRUB을 통해 리눅스 커널을 로딩하고 커널을 선택하여 메모리에 로드 되는 순간부터 본격적인 부팅이 진행됩니다. 중간에 부팅을 잠시 멈추고 GRUB 명령어 모드로 진입할 수 있습니다.

/boot/grub/grub.cfg
/boot/grub/grub.cfg

 

 


 

 

3단계 : 스와퍼(Swapper) 프로세스 수행

스와퍼(Swapper) : 앞단계(리눅스 커널로드까지)에서 인식했던 각 장치들의 드라이브들을 초기화 하며, init프로세스를 수행합니다. PID 0번인 스와퍼라는 프로세스는 각 장치의 드라이브들을 초기화하고 그 다음 PID 1번은 Init 프로세스(/sbin/init)를 실행합니다. 그 후 몇가지 기능을 수행하고 종료합니다. (ubuntu LTS 16.04 부터 PID 1번은 systemctl로 바뀐거 같음 확인 요망)

 


 

4단계 : init 프로세스의 실행

리눅스에서 모든 프로세스는 그 실행과 함께 설정파일을 읽어들입니다. init 프로세스는 /etc/inittab 이라는 설정파일을 읽어들여 무엇을, 어떻게 언제 실행할 것인가를 결정합니다. 부팅과정에서 출력되는 거의 모든 부팅메시지들은 /etc/inittab 파일의 실행 내용입니다.(한 행씩 순차적으로 실행됩니다.)

 

 


 

5단계 : 부팅레벨의 결정 단계

/etc/inittab 파일 내용 중 가장 먼저 실행되는 행

 

 


 

6단계 : /etc/rc.d/rc.sysinit 스크립트 실행(모든 부팅레벨)

부팅 레벨 지정 바로다음에 나오는 행으로 인해 /etc/rc.d/rc.sysinit이라는 스크립트 파일이 실행됩니다. 스크립트 파일은 "시스템 초기화" 작업을 수행합니다. 부팅 레벨이 몇번인가와는 상관없이 모든 부팅레벨에서 반드시 한번 실행되는 스크립트입니다.

 

/etc/rc.d/rc.sysinit 파일이 수행하는 내용

1. default path 설정

2. /etc/sysconfig/network 파일의 실행

3. 네트워크 설정 확인 및 적용

4. swapon 명령으로 스왑작동하기

5. 호스트이름, 도메인이름 설정하기

6. keymap loading

7. fsck 실행으로 /etc/fstab 파일 참조하여 파일 시스템 점검하기

8. PNP 하드웨어 점검하기

9. /proc 파일 시스템 mount

10. kernel module load

11. depmod 실행으로 모듈 의존성 설정

12. system clock 설정

13. system font load

14. 파일청소 작업

15. 시리얼포트 설정 작업

16. /usr/sbin/netconfig 실행

17. /usr/sbin/timeconfig 실행

18. /usr/sbin/authconfig/ 실행

19. /usr/sbin/ntsysv 실행

20. utmp 파일의 검사 및 생성

21. wtmp 파일의 검사 및 생성

22. 기타 시스템 초기화에 필요한 작업들을 수행

 

 


 

 

7단계 : /etc/rc.d/rcN.d/ 디렉토리의 스크립트 실행(부팅레벨에 따른 실행)

앞 단계에서 정해진 부팅 레벨에 대항하는 디렉토리 내의 스크립트가 순차적으로 수행됩니다. 이 디렉토리 내에 존재하는 파일들은 모두 링크파일들입니다.(대부분이 /etc/rc.d/init.d)

 

/etc/rc.d/rcN.d 디렉토리의 특징

1. 이 디렉토리의 파일들은 각각의 부팅레벨에 따라 시스템 부팅 시에 자동실행 될 서비스(데몬)들에 대한 설정입니다.

2. 이 디렉토리에 존재하는 모든 파일들은 /etc/rc.d/init.d/ 디렉토리에 있는 파일을 원본으로 하는 링크 파일들입니다.

3. K로 시작하는 파일 : 해당 부팅레벨로 부팅 시에 자동시작 되지 않는 서비스들

4. S로 시작하는 파일 : 해당 부팅레벨로 부팅 시에 자동 시작되는 서비스들

5. K 또는 S 다음의 숫자들은 실행될 순서를 의미합니다.

6. 예외적으로 S99local은 /etc/rc.d/rc.local 파일을 원본으로 하는 링크 파일로서 2,3,4,5번 부팅레벨 에서만 실행되도록 되어 있습니다. (맨 마지막 단계에 반드시 한번 수행합니다.)

7. 예외적으로 S99single은 1번 부팅레벨에서만, S01reboot은 6번 부팅 레벨에서만 실행됩니다.

 

/etc/rc.d/rc.local 파일은 각 사용자들이 부팅시에 자동으로 실행하고자 하는 프로그램들을 설정하고나 스크립트를 설정해두는 파일입니다.

 

 


 

 

8단계 : 시스템 매직키 설정을 합니다.

CTRL + ALT + DEL 키에 대한 수행 내용을 설정한 것입니다.

 

/sbin/shutdown -t3 -r now 명령에서 -a 옵션을 추가해주면 /etc/shutdown.allow 파일이 존재하고 사용자가 추가되어 있을 경우(한 행에 사용자 한명씩 입력) 해당 사용자만 수행 하도록 설정할 수 있습니다.

 

 


 

9단계 : 시스템 전원 공급을 설정합니다.

UPS 전원이 부족 할 경우와 재충전 되었을 경우에 실행되는 명령을 지정할 수 있습니다.

 

 


 

 

10단계 : 가상 터미널 실행과 로그인창 실행

2,3,4,5번 부팅 레벨로 부팅 시에 로그인창을 실행해주는 6개의 가상콘솔 실행 설정합니다. /etc/inittab 파일로 인해 콘솔 로그인 화면을 실행하는 /sbin/mingetty 명령을 실행하게 됩니다.

 

 


 

 

11 단계 : X 윈도우 실행

부팅 레벨이 5번일 경우일 때만 GUI 사용자 환경을 제공하기 위해서 X윈도우를 실행하게 됩니다. 거의 대부분의 리눅스 배포판에서는 GNOME 데스크톱을 기본적인 X 윈도우로 사용하고 있습니다.

 

 

 

 

 

 

출처: https://yongho1037.tistory.com/563

 

반응형