Загрузка Windows 2000 - часть 5
Одной из задач HalInitSystem является подготовка системного контролера прерываний каждого процессора к обработке прерываний и конфигурирование таймера, используемого для учета распределяемого процессорного времени.
На стартовом процессоре ExpInitializeExecutive не просто вызвывает HalInitSystem, но и выполняет другие операции по инициализации. Когда HalInitSystem возвращает управление, функция ExpInitializeExecutive, выполняемая на стартовом процессоре, обрабатывает параметр /BURNMEMORY файла Boot.ini (если таковой указан). В соответствии с этим параметром ExpInitializeExecutive исключает указанный объем памяти.
Далее ExpInitializeExecutive вызывает процедуры инициализации для диспетчера памяти, диспетчера объектов, справочного монитора безопасности, диспетчера процессов и диспетчера Plug and Play. Эти компоненты выполняют следующие инициализирующие операции.
- Диспетчер памяти формирует таблицы страниц и внутренние структуры данных, необходимые для предоставления базовых сервисов, связанных с памятью. Резервирует пространство для кэша файловой системы, а также выделяет области для пулов подкачиваемой и неподкачиваемой памяти. Другие компоненты исполнительной системы, ядро и драйверы устройств пользуются этими пулами, выделяя память под собственные структуры данных.
- При инициализации диспетчера объектов определяются объекты, необходимые для создания его пространства имен, чтобы другие компоненты могли помещать в него свои объекты. Также создается таблица описателей для поддержки учета ресурсов.
- Справочный монитор безопасности инициализирует объект типа «маркер доступа» и использует его для создания и подготовки первых маркеров, назначаемых начальным процессам.
- Диспетчер процессов производит большую часть своей инициализации в фазе 0, определяя типы объектов «процесс» и поток и создавая списки для отслеживания активных процессов и потоков. Он также создает объект «процесс» для начального процесса и присваивает ему имя Idle. Наконец, диспетчер процессов создает процесс System и системный поток для выполнения процедуры Phase1Initialization.Этот поток не запускается сразу же после создания, поскольку прерывания пока запрещены.
- Наступает фаза 0 в инициализации диспетера Plug and Play, в ходе которой просто инициализируется ресурс исполнительной системы, используемый для синхронизации ресурсов шин.
Когда на каждом процессоре управление возвращается к функции KiInitializeKernel, она передает его циклу Idle. В результате системный поток, созданный, как было описано в п.4, начинает фазу 1.
Для подготовки статьи использовались материалы книги «Внутреннее устройство Microsoft Windows 2000».