관심이 있던 사람들이라면 꼼수쓴거라고 어림짐작으로 알고있었겠지만, 그러지말고 무슨원리인지 정확하게 제대로 알아보자.
먼저, 기존의 시스템 종료방식을 살펴보면 이러하다.
윈도8 계열에서도 Fastboot 방식을 사용하지 않으면 동일한 과정으로 종료된다.
01. 사용자가 시스템종료를 실행하거나
프로그램에서 ExitWindowsEx() 또는 InitiateShutdown() 등의 API를 호출해서 종료를 실행시키면
02. 윈도우에서 실행중인 프로그램에 종료과정이 시작됐다고 메시지를 보내서 데이터를 저장하라고 한다.
03. 앞의 과정이 모두 완료되면 데스크탑이 꺼지고 이런 화면이 나온다.
이제부터의 종료과정은 모니터상에 보이지 않는 내부과정이다.
04. 로그온한 각 사용자의 사용자 세션을 저장하고 닫는다.
05. 각 서비스를 순차적으로 종료시키는데, 정해진 제한시간까지 응답이 없는것은 강제로 종료시킨다.
06. 각 하드웨어에 메시지를 보내 시스템이 종료된다고 알려주고 종료작업을 실시하라고 명령한다.
07. 커널이 시스템 세션을 닫는다. 이제 열려있는 세션이 없으므로 이 상황을 '세션제로' 라고 부른다.
08. 커널이 아직 캐시등에 남아있는 데이터를 목적지 저장장치에 전달해서 저장하도록 한다.
09. 앞의 과정이 모두 완료되면 ACPI 인터페이스를 통해 시스템에 PC를 종료하라는 신호를 보내고 커널도 닫는다.
10. ACPI 인터페이스에서 대기전력을 제외한 모든 전원을 끊으면 최종적으로 PC의 구동이 멈춘다.
그럼 이번엔 부팅과정을 살펴보자.
역시 마찬가지로 윈도8 계열의 Fastboot 방식을 사용하지 않으면 동일한 과정으로 부팅된다.
01. 전원버튼을 누르면 PC의 펌웨어가 설정을 로드하면서 POST를 실행하고 부팅섹터를 찾아서 부팅권한을 넘겨준다.
02. 부팅섹터의 명령대로 bootmgr.exe(BIOS), bootmgr.efi(UEFI)로 부팅권한을 넘긴다. 이때 멀티부팅이 구성되어 있다면 멀티부팅 메뉴가 뜬다.
03. 부트매니저가 부팅파티션에서 윈도우로더인 winload.exe(BIOS), winload.efi(UEFI)를 찾아서 부팅권한을 넘긴다.
04. winload가 부팅권한을 받고 작업을 시작하면서 드디어 윈도우의 로딩과정이 시작된다. 커널이 로딩되면서 필수 드라이버가 같이 딸려온다.
05. winload가 임무를 마치면 커널이 실행되면서 레지스트리와 BOOT_START가 표시된 추가 드라이버를 메모리에 올리기 시작한다.
06. 커널이 세션 관리자(smss.exe)를 불러서 시스템세션을 초기화하고 BOOT_START가 안붙어있는 나머지 장치와 드라이버를 로드하도록 명령한다.
07. winlogon.exe가 시작되면서 로그온 화면이 뜬다.
서비스 관리자가 서비스들을 실행시킨다. 사용자가 로그인하면
이 사용자에 대한 세션을 만들고 시스템쉘(explorer.exe)을 호출한다.
08. 불려온 시스템쉘(explorer.exe)이 바탕화면 창 관리자(dwm.exe)호출하고
불려온 창 관리자가 바탕화면을 초기화하고 표시한다. 최종적으로 부팅이 완료되어 사용준비가 끝난다.
이런 복잡한 과정을 거친다. 한마디로 표현하자면
컴퓨터를 껐다가 켤때마다 잘 있던 건물을 맨날 철거하고 토지까지 싹 정리했다가 다시 터파기 공사를 한다음 또 지어나가는 거라고 할수있다.
그런데 당연하지만 맨날 저짓을 반복해야될 필요는 없다. 사실, 시스템에 깊이 융합되는 안티바이러스(백신)등의 프로그램을 설치/제거하거나
윈도 업데이트로 시스템파일이 패치되어야 할 때 정도를 제외하고는 커널(OS의 중추)까지 초기화를 해야하는 상황이 그리 자주있는건 아니다.
지금까지 안해도 될 일을 매번 지나치게 열심히 해온것이며, Fastboot는 꼼수가 아니라 드디어 효율적인 부팅을 하게됐다고 보는것이 맞다는 말이다.
그러면 윈도8 계열의 Fastboot가 무슨 원리인지 봐야되겠지? 그 원리를 알아보자.
먼저 종료과정부터 살펴보자.
01. 사용자가 시스템종료를 실행하거나 프로그램에서 ExitWindowsEx() 또는 InitiateShutdown() 등의 API를 호출해서 종료를 실행시키면 여기까지는 모든과정이 동일하다.
02. 윈도우에서 실행중인 프로그램에 종료과정이 시작됐다고 메시지를 보내서 데이터를 저장하라고 한다.
03. 이제부터의 종료과정은 모니터상에 보이지 않는 내부과정이다.
04. 로그온한 각 사용자의 사용자 세션을 저장하고 닫는다.
05. 각 서비스를 순차적으로 종료시키는데, 정해진 제한시간까지 응답이 없는것은 강제로 종료시킨다.
06. 각 하드웨어에 메시지를 보내 시스템이 종료된다고 알려주고 종료작업을 실시하라고 명령한다.
07. 커널이 시스템 세션을 닫는다. 이제 열려있는 세션이 없으므로 이 상황을 '세션제로' 라고 부른다.
08. 커널이 아직 캐시등에 남아있는 데이터를 목적지 저장장치에 전달해서 저장하도록 한다.
09. 커널세션을 닫지않고 그대로 백업하여 hiberfile.sys에 저장한 후, ACPI 인터페이스를 통해 시스템에 PC를 종료하라는 신호를 보낸다.
10. ACPI 인터페이스에서 대기전력을 제외한 모든 전원을 끊으면 최종적으로 PC의 구동이 멈춘다.
앞 단계는 전부 그대로인데 고작 커널세션을 안닫는다고 종료가 그렇게 빠르다. 그정도로 커널로드가 시스템에 부하를 많이 주는 작업이다.
모르겠으면 나중에 재시작이랑 시스템종료를 비교해봐라. Fastboot를 켜면 종료속도도 빠르다.
재시작의 경우에는 이전의 시스템종료와 동일한 과정을 거치고 '다시 시작'한다는 점만 다르다. 직접 체험해봐라.
이번엔 부팅과정을 살펴보자.
01. 전원버튼을 누르면 PC의 펌웨어가 설정을 로드하면서 POST를 실행하고 부팅섹터를 찾아서 부팅권한을 넘겨준다. 여기까지는 모든과정이 동일하다.
02. 부팅섹터의 명령대로 bootmgr.exe(BIOS), bootmgr.efi(UEFI)로 부팅권한을 넘긴다. 이때 멀티부팅이 구성되어 있다면 멀티부팅 메뉴가 뜬다.
03. 부트매니저가 부팅파티션에서 윈도우로더인 winload.exe(BIOS), winload.efi(UEFI)를 찾아서 부팅권한을 넘긴다.
04. winload가 부팅권한을 받으면 Fastboot상태로 종료됐는지 확인해서 맞다면 hiberfile.sys파일을 로드하고 메모리에 올린다음 커널을 복구한다.
05. winlogon.exe가 시작되면서 로그온 화면이 뜬다. 부팅 끝.
먼저 그 복잡한 단계였던 4 ~ 8번 항목이 싸그리 없어지면서 하이버파일로딩 → 커널복구 → 로그온화면 이라는 극도의 짧은과정으로 바뀌었다.
최신EFI규격의 UEFI펌웨어의 경우, 콜드부트가 아닌 웜부트 상황이라면 윈도의 Fastboot처럼 장치인식 및 테스트과정(POST)까지도 생략해버리고
곧바로 부트섹터로 순서를 넘겨서 아예 UEFI화면이 보이지도 않고 윈도의 로그온 스크린이 뜨는 극한으로 빠른 시스템부팅을 보여주기도 한다.
이러한 과정을 알고나면 과연 "이것이 꼼수"인지 "옛방식이 한심"한 것인지 분별이 될 것이다. 그래도 여전히 Fastboot가 맘에 안든다면 할수없고.
원리설명은 여기까지고,
Fastboot과정을 유심히 봤다면 떠오를 한가지 의문점을 해소시켜주면서 글을 마무리 짓겠다.
"Fastboot를 사용하면 일반부팅시에 보이는 [드라이버 로드]과정이 안보이는데, 그렇다면 장치를 추가하거나 제거할때는 콜드부트를 해야할까?"
그렇다. Fastboot를 할때는 장치드라이버의 초기화과정은 있지만 로드과정이 없다. 그러면 그래픽카드 등의 주요장치가 바뀌었을때 어떻게 하는게 맞을까.
정답은 "아무 상관없이 Fastboot 그대로 쓰면된다." 이다. 왜 그렇냐 하면 커널의 로드방식 변경에 있으며 WinToGo와도 관련이 있다고 하겠다.
WinToGo라는 것은 엔터프라이즈에 국한된 것이 아니다. 윈투고를 엔터프라이즈에서 지원한다는 말은 마우스 클릭만으로 윈투고를 생성할 수 있는 제어판의
애플릿을 제공한다는 뜻이고, WinToGo는 윈도8 계열 커널의 자체적인 기능이다. 즉, 윈도8 계열이라면 버전상관없이 윈투고가 가능하다. 다만 세팅은 수동이다.
이전 윈도들은 커널로드시에 시스템의 주요한 장치드라이버를 같이 로드하면서 커널기능이 시작됐지만 윈8부터는 독립되어 있다.
그래서 메인보드등의 시스템중추가 변경되어도 블루스크린이 뜨지않고 정상적으로 장치드라이버를 잡으면서 부팅이 될 수 있는 것이다.
이러한 커널의 자체적인 특성은 윈투고 뿐만이 아니라 일반적인 부팅에서도 해당되며, 역시 마찬가지로 패스트부트에서도 적용이 된다.
그래서 장치가 달라졌을때도 별도의 드라이버 로드 과정없이 곧바로 커널이 복구되어도 커널복구 직후부터 장치드라이버를 제대로 잡기 시작한다.
한마디로, 일반 사용자 선에서는 걱정할 필요가 없다는 말이다. 그리고 지금 윈도8 계열을 쓰고 있다면 Fastboot를 쓰도록 하자.





