정리

[펌] 시스템이 부팅되는 동안 파일 시스템에서 일어나는 일

저장소/잡다한거

파일 시스템은 시스템의 부트 프로세스가 진행되는 동안 ( I/O 시스템 초기화 도중 ) 초기화 작업을 하게 됩니다.

I/O Manager는 global 파일 시스템 큐를 생성하고 OS Loader와 PnP Manager에 의해 로드된 파일 시스템과 필터 드라이버들을 초기화 합니다.

1. 시스템이 부트 하는 중,  로더가 커널에 제어 전송을 하기 전에 OS loader는 부트 파일 시스템과 RAW 파일 시스템 그리고  타입이 SERVICE_BOOT_START 인 모든 드라이버를 로드 합니다.

이 드라이버들은 커널이 제어권을 획득할 때 메모리에 있게 되죠.

2. I/O Manager는 global 파일 시스템 큐를 4개의 세그먼트로 생성하게 됩니다. 
( CD-ROM, disk, tape devices, network file system )
이 큐의 세그먼트에 따라서 나중에 파일 시스템이 등록되면, 컨트롤 디바이스 오브젝트들이 큐에 추가되게 됩니다.

3. PnP Manager가 RAW 파일 시스템과 모든 SERVICE_BOOT_START 드라이버의 DriverEntry 루틴을 호출합니다. 

PnP Manager는 부트 디바이스를 부트 디바이스 드라이버의 AddDevice 루틴을 호출함으로써 시작하게 합니다.
이 때 부트 디바이스가 자식 디바이스들을 소유하고 있다면 이 디바이스들은 열거 됩니다. 

자식 디바이스들도 마찬가지로 configure 되고 드라이버가 boot-start 드라이버라면 시작됩니다. 
boot-start 드라이버가 아니라면 시작하지 않고 PnP Manager가 devnode를 생성하게 됩니다.

이 과정에서 모든 부트 드라이버가 로드되고 부트 디바이스가 시작됩니다.

4. PnP Manager는 PnP device tree에서 아직 시작되지 않은 드라이버들을 로딩합니다. 

이 때 사용되는 것이 드라이버의 StartType, LoadOrderGroup, Dependecies 값입니다. 

디바이스가 non-PnP-enumerable 이라면 자식 디바이스가 PnP-enumerable 하더라도 무시됩니다. 

5. PnP Manager가 아직 로드 되지 않은 SERVICE_SYSTEM_START 타입의 드라이버들을 로딩하고 초기화 합니다. 

file system recognizer (FsRec) 가 이 시점에서 로드됩니다. FsRec는 Boot File System load order group이지만 부트 파일 시스템은 아닙니다. 

6. 부트 시간에 모든 드라이버가 로드 되고 초기화 된 후에 I/O Manager는 reinitialization을 갖고 있는 드라이버들에게서 이 루틴을 호출합니다. reinitialization 루틴은 콜백 루틴으로 추가적인 프로세싱 시간이 필요하거나 할 때 부트 드라이버에 의해 등록되어 있습니다. ( IoRegisterBootDriverReinitialization 또는 IoRegisterDriverReinitialization 으로 등록 )

7. Service Control Manager 가 아직 로드 되지 않은 SERVICE_AUTO_START 타입의 드라이버를 로딩 합니다. 

시스템 부트 후에 시스템에 부착되어 있는 모든 볼륨의 storage 디바이스 드라이버들이 로드되고 시작됩니다.

(로드된 모든 빌트인 파일 시스템, 마운트된 파일 시스템 모두가 시작되는 것은 아님)