윈도우의 부팅 과정 보기
윈도우의 부팅시간을 절약하려면, 윈도우의 시동 과정을 먼저 이해해야 합니다. 이 과정 중에 문제가 될 만한 내용과 부팅 시간을 잡아 먹는 내용을 다룰 수 있으면, 부팅 시간을 단축할 수 있겠죠. 그리고 CMOS 셋업에서 Internal/External 캐시를 사용할 수 있는 경우에는 활성화 상태(enable)로 해 두세요.
문제가 될 만한 내용은 config.sys와 autoexec.bat의 불필요한 내용, 잦은 프로그램 추가/제거로 인한 복잡하거나 뒤엉킨 레지스트리, MS-DOS 모드로 작동되는 시스템, 호환성이 없는 하드웨어/소프트웨어, 바이러스로 인한 초기화 실패 등일 수 있습니다.
윈도우의 부팅과정은 다음과 같습니다.
1단계: 롬바이오스 부트스트랩 과정
컴퓨터가 시동되면, 롬바이오스 부트스트랩이 FFFF0h 메모리주소에서 로드됩니다. 그리고 다음 과정들이 연결됩니다.
1-1. POST(Power On Self-Test, 자기 진단)가 시작됩니다.
1-2. A 드라이브에 부트디스크가 있는지 검사가 됩니다. CMOS에서 A 드라이브에서 부트디스크를 찾지 않고 바로 C 드라이브에서 찾게 하면 시간이 절약되겠죠.
1-3. A 드라이브에 부트디스크가 확인되지 않으면, 롬바이오스 부트스트랩은 하드디스크를 체크합니다. 하드디스크에서 부트디스크가 발견되면, 롬로더는 제어권을 OS(운영체제) 로더에게 넘겨 줍니다.
1-4. 주부트레코드와 파티션테이블을 읽습니다.
1-5. 플러그앤플레이 시스템인 경우에는 다음 과정이 더 진행됩니다.
플러그앤플레이 기능은 플러그앤플레이 바이오스, 플러그앤플레이 장치, 롬의 플러그앤플레이 옵션들간의 상호작용으로 이루어집니다. 플러그앤플레이 바이오스는 입출력(Input/Ootput) 포트 주소, IRQ(Interrupt Request Line), 직접메모리액세스(DMA: Direct Memory Access) 채널, 기타 플러그앤플레이 장치 설정에 필요한 셋팅을 위해 비활성 RAM을 체크합니다.
1-6. 플러그앤플레이 바이오스가 찾은 모든 플러그앤플레이 장치는 기능 비활성화됩니다.
1-7. 사용되지 않는 자원 지도를 만듭니다.
1-8. 플러그앤플레이 장치는 하나씩 다시 기능 활성 상태로 바뀝니다.
윈도우 95 컨피규레이션 매니저는 플러그앤플레이 바이오스에게 장치 정보를 요구하고, 플러그앤플레이 장치에게 설정을 요구합니다. 플러그앤플레이 바이오스가 없는 컴퓨터는 시동될 때 플러그앤플레이 장치들을 기본값으로 초기화합니다. 이러한 장치들은 윈도우 95가 시작될 때 재설정되기도 합니다.
2 단계: 주부트레코드와 부트섹터
주부트레코드는 주부트레코드의 끝에 위치한 파티션 테이블을 읽어 부트 파티션의 위치를 결정합니다. 부트 파티션의 위치가 결정되면, 주부트레코드는 파티션에 있는 부트섹터에게 제어권을 넘겨 줍니다. 디스크부트 프로그램과 디스크 특성 테이블이 부트섹터에 기록되어 있습니다. 부트섹터는 루트 디렉토리의 위치를 찾기 위해 바이오스 파라미터 블럭(BPB)을 체크합니다. 그 다음에 Io.sys를 루트디렉토리에서 메모리로 로드합니다.
3 단계: Io.sys 파일
메모리로 Io.sys 파일이 로드되면, 다음 과정이 진행됩니다.
3-1. 최소한의 파일할당테이블(FAT: File Allocation Table) 시스템을 로드합니다.
3-2. Msdos.sys 파일을 읽습니다.
3-3. Starting Windows 95 라는 메시지가 잠시 표시됩니다. 이 표시 동안 윈도우 기능키를 사용할 수 있습니다. 예를 들면 F8(윈도우 95)이나 Ctrl(윈도우 98)을 누르면 윈도우 95 Startup Menu가 나타납니다. 메시지가 표시되는 시간은 Msdos.sys의 BootDelay= 라인을 수정하면 됩니다. 기본값은 2초로 잡혀 있는데, 이 값도 부팅 시간과 관계가 있겠죠. Msdos.sys 파일은 숨긴 파일 속성을 가지고 있는데, 탐색기를 열어 보기->폴더옵션의 보기 탭에서 모든 화일 표시를 선택하면 볼 수 있습니다. 그리고 메모장으로 Msdos.sys 를 편집하면 됩니다.
3-4. 다중 하드웨어 프로파일을 사용하는 경우에는 윈도우가 설정을 결정할 수 없다(Windows cannot determine what configuration your computer is in)는 메시지가 표시되는데, 사용자가 하드웨어 설정을 결정해야 합니다.
3-5. 윈도우 시작 화면에 나타나는 이미지인 Logo.sys 파일이 로드됩니다. Msdos.sys 내용 중에 Logo=0으로 두면 로고 화면이 표시되지 않습니다.
3-6. 디스크 공간 늘림과 관련된 Drvspace.ini 나 Dblspace.ini 파일이 있다면, Drvspace.bin 나 Dblspace.bin 파일이 메모리로 로드됩니다.
3-7. Io.sys 파일은 시스템 레지스트리 파일(System.dat, User.dat)을 체크합니다.
3-8. Io.sys 파일은 System.dat 파일을 엽니다. System.dat 파일이 없다면, System.da0 파일이 사용되는데, 윈도우가 정상적으로 시동되면 System.da0 파일이 Ssytem.dat 파일로 복사됩니다.
3-9. Msdos.sys에 DoubleBuffer=1이 있거나 레지스트리의 HKLM\System\CurrentControlSet\Control\WinBoot\DoubleBuffer에 더블 버퍼링이 활성화(enble) 되어 있다면, Dblbuff.sys 파일이 로드됩니다.
3-10. 다중 하드웨어 프로파일을 사용 중이라면, 선택된 하드웨어 프로파일이 레지스트리에서 로드됩니다.
3-11. Io.sys 파일이 Config.sys 파일을 실행합니다.
4 단계: 실제모드(Real-Mode) 설정
어떤 하드웨어나 프로그램 중에는 정상적인 작동을 위해 실제모드로 로드되는 드라이버나 파일을 필요로 하게 됩니다.
4-1. Config.sys 파일은 드라이버를 메모리로 로드합니다. Config.sys 파일이 없다면, Io.sys 파일은 기본 드라이버 파일(Ifshlp.sys, Himem.sys, Setver.exe)을 로드합니다. 기본 드라이버의 위치는 Msdos.sys 파일의 WinBootDir 행을 참고합니다.
4-2. 윈도우는 윈도우 운영체제와 EMS(Expanded Memory)의 지원을 위해 UMB(Upper Memory Blocks)을 준비해 둡니다.
4-3. Autoexec.bat 파일에 설정된 파일과 TSR(Terminate and Stay Resident: 메모리 상주) 프로그램을 메모리로 로더합니다.
5단계: Win.com 파일과 윈도우 환경
5-1. Autoexec.bat 파일의 설정 내용이 완성되면, Win.com 파일이 실행됩니다.
5-2. Win.com 파일은 Vmm32.vxd 파일을 액세스합니다. RAM이 충분한 경우는 Vmm32.vxd 파일이 메모리로 로드되고, 충분하지 않다면 하드디스크에서 액세스됩니다. 하드디스크에서 액세스되면, 윈도우 시동 시간이 상당히 느려집니다. Vmm32.vxd의 역할은 윈도우 3.X 버젼에서의 Win386.exe 파일과 유사합니다.
5-3. 실제모드 가상 장치 드라이버 로더는 Windows\System\Vmm32 폴더와 Vmm32.vxd 파일을 확인해 VxD(Virtual Device Driver: 가상 장치 드라이버)가 겹치는지를 체크합니다. 만약에 Vmm32 폴더와 Vmm32.vxd 파일에서 겹치는 VxD 파일이 있다면, 해당 VxD는 Vmm32.vxd 파일에서 로드되지 않는 것으로 * 표시되고 로드되지 않습니다.
5-4. 실제모드 VxD는 다음 방법으로 메모리로 로드됩니다.
5-4-1. 윈도우 95 INT2F 브로드캐스트에 응답하는 실제모드 장치 드라이버나 TSR은 윈도우가 시작될 때, 자신들이 포함된 VxD를 로드합니다.
5-4-2. Vmm32.vxd 파일에서 * 표시되지 않은 내부 드라이버가 레지스트리 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD에서 로드됩니다.
실제모드 가상 장치 드라이버 로더가 * 표시된 드라이버를 찾으면, Windows\System\Vmm32 폴더에 있는 외부 드라이버인 *.vxd 파일이 메모리로 로드되도록 레지스트리 엔트리를 바꿉니다.
5-4-3. Vmm32.vxd에 의해 로드되지 않는 Vxd는 Windows\System.ini 파일의 [386 Enh] 부분에서 로드됩니다.
5-4-4. *BIOSXLAT, *CONFIGMG, *DYNAPAGE, *DOSMGR, *EBIOS, *IFSMGR, *INT13 , *IOS, *PAGESWAP, *SHELL, *V86MMGR, *VCD, *VCACHE, *VCOMM, *VCOND, *VDD, *VDMAD, *VFAT, *VKD, *VMCPD, *VPICD, *VTD, *VTDAPI, *VWIN32, *VXDLDR 등과 같은 VxD는 윈도우가 정상적으로 작동하기 위해 자동적으로 로드되며 레지스트리 엔트리를 요구하지 않습니다.
5-5. 실제모드 가상 장치 드라이버 로더는 필요한 모든 VxD가 성공적으로 로드되었지를 체크합니다. 로드가 정상적이지 않다면, 다시 드라이버를 로드합니다.
5-6. 실제모드 가상 장치 드라이버 로드가 끝나면, 드라이버 초기화가 진행됩니다. 실제모드 초기화가 필요한 VxD는 실제모드에서 초기화를 진행합니다.
5-7. Vmm32는 컴퓨터 프로세서를 실제모드에서 보호모드로 전환합니다.
5-8. VxD 초기화 과정은 세 단계를 거칩니다. 초기화 과정에서 드라이버들은 메모리에 로드된 순서가 아니라 InitDevice에 따라 로드됩니다.
5-8-1. SYS_CRITICAL_INIT (SYSCRITINIT): 이 과정 중에 시스템에 의해 인터럽트되지 않고 VxD가 장치 초기화를 하도록 인터럽트는 비활성화됩니다. SYSCRITINIT 동안에 어떤 파일 입출력도 허용되지 않습니다. 따라서, 모든 SYSCRIPTINIT은 모든 VxD가 SYSCRIPTINT을 마칠 때까지, Bootlog.txt 파일에 기록되지 않습니다.
5-8-2. SYS_DEVICE_INIT (DEVICEINIT): 대부분의 VxD 초기화는 DEVICEINIT에서 생깁니다. DEVICEINIT 동안에는 파일 입출력이 허용되기 때문에 VxD의 DEVICEINIT이 일어날 때마다, Bootlog.txt에 각각 기록됩니다. 그러나, Ifsmgr의 DEVICEINIT 동안에는 실제모드를 차용해야 하기 때문에 파일 입출력이 허용되지 않습니다. 따라서, DEVICEINIT 과정 중에 Ifsmgr 이 없습니다.
DevLoader VxD가 호출되고, DevLoader VxD는 InitDevice 순서에 관계없이 해당 드라이버를 로드합니다. DevLoader는 레지스트리를 검사하고 드라이버(예를 들면, as.mpd 파일과 같은 포트드라이버)를 찾습니다. 그 다음 해당 드라이버에 연결된 장치를 초기화합니다. 이 과정에서 VxD 초기화에 실패를 하면, 드라이버가 지원하는 하드웨어나 서비스를 정상적으로 사용할 수 없습니다. VxD 초기화가 실패하는 것은 대체로 잘못된 하드웨어 설정이나 설치되지 않은 서비스가 원인입니다. 이 과정의 실패 원인을 제거하는 것이 바람직하겠죠.
나머지 정적 VxD가 초기화 과정을 마치면, SYSCRIPINIT 단계가 없는 동적 VxD가 초기화 되기도 합니다. 윈도우가 시작된 후라도 동적 VxD는 언제라도 로드될 수 있습니다.
5-8-3. SYS_INIT_COMPLETE (INITCOMPLETE): InitComplete 단계를 성공적으로 마친 VxD는 정상적으로 작동합니다. 이전 단계가 끝난 VxD가 이 단계에서 실패하면, 해당 VxD는 메모리에서 제거됩니다. 정적 VxD가 모두 로드되면, GUI 구성 요소인 Krnl32.dll, Gdi.exe, User.exe, Explorer.exe 등이 로드됩니다.
5-9. 네트워크 환경과 다중 사용자 프로파일: 네트워크 환경이 로드되면, 설치된 네트워크에 로그온을 하게 됩니다. 윈도우에서는 데스크탑의 사용자정의를 통해 다중 사용자가 윈도우를 사용할 수 있게 되어 있습니다. 사용자가 윈도우에 로그온을 하게 되면, 해당 사용자의 데스크탑 설정이 레지스트리에서 로드됩니다. 특정 사용자가 로그온되지 않으며, 데스크탑은 기본 설정값을 사용합니다.
5-10. 시작 프로그램과 RunOnce 프로그램: 시작 프로그램에 있는 프로그램과 RunOnce 레지스트리 키가 시동됩니다. RunOnce 레지스트리 키에서 프로그램이 시동되면, 해당 프로그램은 레지스트리 키에서 제거됩니다.