지난 주 전 세계적으로 Windows 7이 정식 출시됨에 따라 기존의 Windows Vista 출시와는 달리 시장에서 좋은 평가를 받고 있고, IT 전반적으로 큰 이슈가 되고 있는 것 같습니다. 이에 따라 인터넷 상에서 연일 Windows 7에 대한 각종 정보를 쉽게 찾아볼 수 있게 되었습니다.

그 중에 UCC 동영상 중에 관심을 끄는 것이 Windows 7의 부팅 속도가 얼마나 빠른지에 대해서 보여주는 것이었습니다. 자세한 시스템 사양은 모르겠지만 시스템의 전원버튼을 누른 후에 10 여 초 내에 부팅이 완료되는 모습이었습니다. 물론 운영체제를 설치한 후에 이런 저런 프로그램이나 서비스가 등록되면 조금씩 부팅 속도가 늦어지겠지만 기존 운영체제에 비해서 부팅 속도가 눈에 띄게 빨라진 것이 사실입니다.

요즘은 가전제품들도 전원을 키면 실제 기능이 동작하는데 시간이 많이 걸리는 경우가 있는데, 하드웨어와 운영체제의 발달에 따라 컴퓨터의 부팅 속도가 곧 가전제품 만큼이나 빨라질지도 모르겠습니다.

Windows 7에서는 기존 운영체제와 비교했을 때 부팅 속도를 향상 시키기 위해 다음과 같이 크게 3가지 부분을 변경한 것으로 알려져 있습니다.

1. parallelizing device enumeration

부팅 시점에 많은 시간이 소요되는 부분이 시스템에 부착되어 있는 device들을 enumeration하고 이에 대한 device tree를 구성하는 과정입니다. 그런데 이러한 장치들이 시스템 부팅 과정에 있어서는 그만큼의 시간을 소요할 정도로 중요한 부분이 아닙니다. 이러한 enumeration 작업은 PnP의 queue에 담겨진 후에 수행되는데, 이때 이 작업을 비동기(asynchronous) 처리하도록 속성을 지정함으로써 다른 작업과 병렬로 처리될 수 있도록 변경되었습니다.

2. driver re-initialization

드라이버 파일이 메모리에 로드되면 해당 드라이버의 시작지점인 DriverEntry 함수가 호출됩니다. 이 함수 내에서는 PnP manager에 IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_READ 등과 같은 처리를 수행할 함수를 등록하는 작업을 주로 수행합니다. 문제는 이러한 작업이 부팅을 수행하는 중에는 상대적으로 우선순위가 낮다는 것입니다. 이러한 이유로 Windows 7에서는 DriverEntry 함수가 호출되는 시점이 system device의 enumeratin이 완료된 이후에 callback 되도록 queuing 되도록 변경되었습니다.

3. Session 0 initialization

Windows Vista에서부터 Service 프로그램은 session 0라는 별도의 세션으로 분리하여 악성코드에 의해서 SYSTEM 권한을 hijacking 당하는 것을 막고 보안 위험성을 줄이게 되었습니다. 시스템에 등록된 여러 서비스들은 Services.exe에 의해서 서비스 프로그램 간의 종속성을 확인한 다음에 어떠한 순서로  실행될 지가 결정되게 됩니다. 즉, 특정 서비스가 먼저 실행된 후에야 실행될 수 있는 종속성이 있기 때문에 이로 인해서 부팅 속도에 어느 정도 영향을 미치게 됩니다. Windows 7에서는 서비스들이 모두 시작 완료되는 시간을 단축시키기 위해서 Session 0의 초기화 과정을 조금 일찍 시작합니다. Windows Vista에서는 device tree가 만들어진 이후에 이 과정이 시작되지만, Windows 7에서는 그 이전에 실행되어 device enumeration과 병렬로 작업이 진행됩니다.

이상 Windows 7에서 부팅 속도를 빠르게 하기 위해서 변경된 주요 3가지 내용을 알아보았습니다. 전체적으로 큰 변화보다는 부팅 속도를 빠르게 하기 위해서 각 부팅 단계별로 어느 작업이 가장 중요한지 우선순위를 정하고 중점적으로 진행해야 하는 작업을 정하고 해당 작업에 집중할 수 있도록 조절하였다고 보시면 되겠습니다.