부팅이란?
컴퓨터의 전원을 켜면 먼저 부팅 프로그램을 불러들이고 보조기억장치인 하드디스크 또는 플로피디스크를 사용하여 컴퓨터가 동작 할 수 있게 운영체제(Operating System)를 기억장치로 불러 들여 컴퓨터가 작동할 수 있도록 준비하는 작업, 일반적으로 컴퓨터 시스템을 시동하거나 초기 설정하는 것.
처음 사용자가 컴퓨터의 전원을 넣는 것으로 시작하는 부팅을 콜드 부팅(Cold Booting)이라 하고 원래 전원이 들어와 있는 상태에서 하는 부팅을 웜 부팅(Warm Booting)이라 한다.
<윈도우 부팅과정>
1. 전원 공급
전원 공급장치가 자가 진단을 실시, 전압이 적절하고 안정적이면 프로세서에 ‘전원 안정’ 시그널 전송
2. 마이크로 프로세서 타이머 칩이 ‘전원 안정’ 시그널 수신
‘전원 안정’ 시그널이 도착하면 타이머 칩은 CPU가 작동을 시작하도록 리셋 시그널 전송르 중지
3. CPU가 ROM-BIOS 코드를 실행
CPU는 ROM 메모리 주소 FFFF:0000에서 시작되는 ROM-BIOS 로드
4. ROM-BIOS가 하드웨어 기능성을 확인하기 위해 테스트 실시
에러가 발생하면 ‘비프 코드’로 보고
5. BIOS가 ROM-BIOS 루틴 간 로드 되어야 할 어댑터 검색
비디오 어댑터를 검색할 때 메모리 주소 C000:0000에서 C780:0000까지
6. ROM BIOS가 cold-start 인지 warm-start인지 체크
0000:0472에 위치한 2바이트를 체크, 1234h를 제외한 모든 값은 cold-start
7. cold-start의 경우 POST 과정 전체 실행
비디오 어댑터 / BIOS 확인 / 메모리 테스트
8. CMOS 설정 정보 읽음
부팅순서 정보 등(플로피 / cd / 하드디스크 부팅)
--------------------------------------------------하드디스크-----------------------------------------------
9. 하드디스크 MBR 검사(플로피의 경우 BR검사)
실린더 0/ 헤드 0/ 섹터 1에 512바이트로 존재
10. 유효한 MBR이 메모리에 로드 되면 BIOS는 파티션 코드 로더로 부트 프로세스를 전송
11. 파티션 로더(부트로더)가 활성화된 파티션 검사
부트 레코드도 마찬가지로 512바이트이면 섹터당 바이트, 클러스터당 섹터 등 파티션의 특징이 기술되어 있는 테이블을 포함, 운영체제의 첫 번째 파일(DOS의 IO.SYS)을 위치시키는 점프 코드를 가짐
----------------------------------------------------운영체제------------------------------------------------
12. 활성 파티션의 부트 레코드가 유효한 부트 시그네처로 체크됨
Window XP 로딩은 시스템 파티션의 루트 디렉토리에 숨겨진 NTLDR에 의해 제어됨, NTLDR은 1)초기 부트로더 페이즈-> 2)운영체제 선택-> 3)하드웨어 탐지-> 4)설정 선택 의 4단계를 거쳐 XP로드
13. NTLDR이 프로세서를 리얼모드에서 프로텍티드 모드로 변경
Windows XP는 FAT-16/32, NTFS파일 시스템을 지원
14. BOOT.INI가 루트 디렉토리에 위치하면 NTLDR은 내용물을 메모리로 읽어들임
BOOT.INI가 없으면 NTLDR은 시퀀스를 지속하고 디스크 첫 번째 파티션에서 XP 로드를 시도 보통 C:\
15. F8키로 ‘안전모드’, ‘마지막으로 성공한 구성’등을 표시 가능
매 성공적인 부팅 완료 시 마다 XP는 현재 드라이버와 시스템 조합을 복사하여 ‘마지막으로 성공한 구성’을 만듬, 이 조합은 몇몇 디바이스로 인한 부팅 실패 시 시스템의 순차적 부팅이 가능하도록 함.
16. XP가 선택되면 NTLDR은 하드웨어를 탐지하기 위한 DOS기반의 NTDETECT.COM에 의해 부팅 지속
NTDETECT.COM은 현재 설치된 하드웨어 구성을 [HKEY_LOCAL_MACHINE\HARDWARE]키에 저장
17. 시스템이 한 개 이상의 하드웨어 프로파일을 가진 경우, NTLDR은 동작을 멈추고 하드웨어 프로파일 설정 복구 메뉴를 출력
한 개만 가질 경우 이 과정을 생략
18. 하드웨어 설정을 선택하면 NTLDR은 XP 커널 로드를 시작
커널을 로드하는 동안 (커널 초기화 전) NTLDR은 여전히 컴퓨터 제어권을 가짐, 또 하드웨어 추상 레이어(HAL.DALL)도 로드, 파일은 \system32 디렉토리에 위치
19. NTLDR이 부트 디바이스로 표시된 장치 드라이버 로드
모든 드라이버는 레지스트리 엔트리를 [HKEY_LOCAL_MACHINE\SYSTEM\Services]에 가짐 SERVICE_BOOT_STRAP을 시작값으로 가진 모든 드라이버는 부팅 시 시작되는 장치로 간주됨
20. NTOSKRNL이 커널 초기화를 위한 0/1 페이즈 돌입
XP는 페이즈 0일 때 인터럽트를 중지하고 페이즈 1일 때 활성화 시킴. HAL은 메모리 관리자, 객체 관리자, 프로세스 관리자 초기화 등 인터럽트 콘트롤러를 준비하기 위해 호출됨. 페이즈 1은 HAL이 디바이스로부터 인터럽트를 받아들이기 위해 호출될 때 시작됨
21. 입출력 관리자 초기화가 모든 시스템 드라이버 파일 로딩 프로세스를 시작
드라이버 로드 실패 시 재 부팅 후 ‘마지막으로 성공한 구성’ 사용시도
22. 커널 페이즈 1 초기화 마지막 태스크가 SMSS실행
SMSS는 신뢰할 만한 네이티브(Native) 애플리케이션으로 간주됨. 그래픽 인터페이스와 로그인 프로세스를 시작
23. SMSS가 그래픽 시스템을 구성하는 win32k.sys 드라이버 로드
win32.sys가 시작되면 화면이 그래픽 모드로 변경됨
24. WINLOGONE.EXE 파일이 커널에 의해 서비스로 시작.
25. 로그온 다이얼로그 박스를 표시하는 로컬 보안 권한(LSASS.EXE)에 의해 로그온 절차 진행
-다이얼로그 박스는 정확히 네트워크 서비스가 시작되면 나타남
<리눅스 부팅과정>
1단계 : 전원스위치 ON
- 시스템 전원공급
- 메인보드의 ROM-BIOS에 있는 BIOS프로그램 자동실행.
. BIOS프로그램은 전원공급과 함께 메모리의 특정번지(예:FFFF0H)에 자동 로드됨
. CPU는 전원공급과 함께 특정번지(예:FFFF0H)의 BIOS프로그램(명령들)을 자동실행함.
2단계 : BIOS프로그램들의 실행내용들
- 자체진단기능(POST)
. CMOS검사, CPU, MEMORY, 그래픽카드, 키보드, 마우스등 각종 장치들의 이상유무 를 검사하고 이들 장치(하드웨어들)을 초기화시킴
- 부팅매체검색과 부트로더 실행
. POST과정이 이상없이 진행완료되면 검색된 부팅매체(하드디스크, CD-ROM, 플로피디스크등)에서 부트로더(예:GRUB, LILO)를 불러들임.
. 즉, 예를들어 하드디스크가 부팅매체로 선택되었다면 하드디스크의 부팅파티션에 있는 0번섹터 (대부분 MBR이라고도 함)에 있는 부트로더(Boot Loader, 즉, GRUB)을 읽어들이게 됨.
. 부트로더(GRUB)가 메모리에 적재되면 BIOS는 종료되고, 시스템제어권은 부트로더(GRUB)이 갖게됨
3단계 : 부트로더(GRUB)의 실행
- GRUB은 실행과 함께 /boot/grub/grub.conf파일을 읽어서 어떤 부팅메뉴(커널)로 부팅을 할 것인가를 결정하게 됨(자동결정 또는 사용자선택) 이 화면이 GRUB이 화면(파란화면)에 나타나는 첫번째 화면임.
- GRUB은 커널(kernel)이미지를 불러들임. 그리고 시스템 제어권을 커널에게 넘겨줌.
4단계 : 커널의 로딩
- 커널은 swapper프로세스(PID 0번)를 호출함.
- swapper는 커널이 사용할 각 장치드라이브들을 초기화하고 init프로세스(PID 1번)를 실행하게 됨.
- init프로세스가 실행되면서 /etc/inittab파일을 읽어들여서 그 내용들을 차례대로 실행함.
5단계 : init프로세스의 실행
- 이후의 과정들은 모두 init프로세스의 실행내용들임. (/etc/inittab파일의 실행내용들)
- 즉, 로그인프롬프트가 나오기 까지의 부팅완료화면까지 init프로세스에 의해서 실행되는
내용들임.
<맥 부팅과정>
Mac OS X의 부팅 프로세스
1. Machine runs lowlevel initialization
(기계 lowlevel 초기화 실행)
2. OpenFirmware is started
(OpenFirmware에서 시작)
3. OpenFirmware looks for a bootdevice (a default is stored in the firmware variable bootdevice)
(OpenFirmware에서 bootdevice를 찾습니다 (기본적으로 firmware variable bootdevice에 저장)
4. OpenFirmware loads a file of type ’tbxi’(BootX) from the partition
(OpenFirmware에서 파티션에서 파일형식 ’tbxi’(BootX) 로드)
5. OpenFirmware executes BootX
(OpenFirmware에서 BootX를 실행)
6. BootX reads root partition out of nvram
(BootX를 NVRAM에 밖으로 루트 파티션을 읽고)
7. BootX loads mach kernel from the device
(장치에서 BootX를로드 마하 커널)
8. BootX copies Mac OS X device drivers from partition into memory
(BootX를 복사 Mac OS X의 장치 드라이버에서 메모리에 파티션)
9. BootX disables all address trnaslations
(BootX를 모든 주소 trnaslations 해제)
10. BootX starts Mac OS X mach kernel
(BootX를 Mac OS X의 마하 커널 시작)
11. mach kernel begins its boot process
(마하 커널의 부팅 프로세스가 시작)
12. mach kernel may use an integrated linker to link Mac OS X device drivers into itself if it is necessary to complete booting
(마하 커널 통합 링커를 사용할 수 있다 자체에 Mac OS X의 장치 드라이버 링크 만약 부팅을 완료하는 데 필요)
13. mach kernel unlinks the integrated linker to save memory
(마하 커널 통합 링커 연결을 해제 메모리를 절약)