Як завантажується комп'ютер з Windows XP


Процес завантаження комп'ютера здавалося б вивчений нами до дрібниць: кнопка - BIOS - операційна система - логін... А ти задумувався коли-небудь про те, що ж насправді відбувається в цей час всередині твого комп'ютера? Можеш по кроках розповісти як працює комп'ютер? Впевнений, що ні. Тому сьогодні проведемо короткий лікнеп - розповімо про те, як же насправді завантажується комп'ютер.

Ця стаття розглядає роботу Windows XP, в інших системах процес, природно, дещо відрізняється.

Включається тумблер живлення.
Блок живлення проводить самодіагностику. Коли всі електричні параметри в нормі БЖ посилає сигнал Power Good процесору. Час між включенням живлення і відходом сигналу зазвичай 0.1-0.5 секунд.

Таймер мікропроцесора отримує сигнал Power Good.
З отриманням цього сигналу таймер перестає посилати сигнал Reset процесора, дозволяючи того включитися.

CPU починає виконувати код ROM BIOS.
Процесор завантажує ROM BIOS починаючи з адреси FFFF:0000. За цією адресою прописаний тільки перехід на адресу цього коду BIOS ROM.

Система виконує початковий тест заліза.
Кожна помилка, що зустрічається на цьому етапі повідомляється певними звуковими кодами (в минулому биканьем, зараз вже певно більш сучасно - голосом), так як відео система ще не ініціалізований.

BIOS шукає адаптери, які можуть вимагати завантаження свого BIOS-а.
Найбільш типовим випадком у цьому випадку є відео карта. Завантажувальна процедура сканує пам'ять з адреси C000:0000 за C780:0000 для пошуку відео ROM. Таким чином завантажуються системи всіх адаптерів.

ROM BIOS перевіряє вимикання це або перезавантаження.
Процедура два байти за адресою 0000:0472. Будь-яке значення відмінне від 1234h є свідченням "холодного" старту.

Якщо це включення ROM BIOS запускає повний POST (Power On Self Test). Якщо це перезавантаження, то POST процедури виключається перевірка пам'яті.
Процедуру POST можна розділити на три компоненти:

  • Відео тест ініціалізує відео адаптер, тестує карту і відео пам'ять, показує конфігурацію або виникли помилки.
  • Ідентифікація BIOS-а показує версію прошивки, виробника і дату.
  • Тест пам'яті перевіряє чіпи пам'яті і підраховує розмір встановленої пам'яті.

Помилки, які можуть виникнути в ході POST перевірки можна розділити на смертельні і не дуже :). У другому випадку вони показуються на екрані, але дозволяють продовжити процес завантаження. Ясно, що в першому випадку процес завантаження зупиняється, що зазвичай супроводжується серією біп-кодів.

BIOS читає конфігураційну інформацію з CMOS.
Невелика область пам'яті (64 байт) живиться від батарейки на материнській платі. Найголовніше для завантаження в ній - порядок, в якому повинні опитуватися приводи, який з них повинен бути першим - дисковод, CD-ROM або вінчестер.

Якщо першим є жорсткий диск, BIOS перевіряє самий перший сектор диска на наявність Master Boot Record (MBR). Для дисковода перевіряється Boot Record в першому секторі.
Master Boot Record - перший сектор на циліндрі 0, 0 голівці, розміром 512 байт. Якщо вона знаходиться, то завантажується в пам'ять за адресою 0000:7C00, потім перевіряється на правильну сигнатуру - два останніх байта повинні бути 55AAh. Відсутність MBR або цих перевірочних байт зупиняє процес завантаження і видає попередження. Сама MBR складається з двох частин - системного завантажувача (partition loader або Boot loader), програми, яка отримує управління при завантаженні з цього жорсткого диска; таблиці розділів (партіцій), яка містить інформацію про логічні диски, наявних на жорсткому диску.

Правильна MBR запис записується в пам'ять і управління передається її кодом.
Процес установки декількох операційних систем на один комп'ютер зазвичай замінює оригінальний лоадер на свою програму, яка дозволяє вибрати з якого диска виробляти іншу завантаження.

Далі Boot Loader перевіряє таблицю партіцій в пошуках активною. Завантажувач далі шукає завантажувального запису (Boot Record) на самому першому секторі розділу.
В даному випадку Boot Record це ще 512 байт - таблиця з описом розділу (кількість байт в секторі, кількість секторів в кластері тощо) і перехід на перший файл операційної системи (IO.SYS в DOS).


Операційна система

Управління передається операційній системі. Як же вона працює, як проходить процес завантаження?

Boot Record перевіряється на правильність і якщо код визнається правильним код завантажувального сектора виконується програма.
Завантаження Windows XP контролюється файл NTLDR, що знаходиться в кореневій директорії системного розділу. NTLDR працює в чотири прийоми:

  • Початкова фаза завантаження
  • Вибір системи
  • Визначення заліза
  • Вибір конфігурації
  • У початковій фазі NTLDR перемикає процесор в захищений режим. Потім завантажує відповідний драйвер файлової системи для роботи з файлами будь-якої файлової системи, підтримуваної XP.
    Якщо хто забув, то наша улюблена Вісь може працювати з FAT-16, FAT-32 і NTFS.

    Якщо в кореневій директорії є BOOT.INI, то його вміст завантажується в пам'ять. Якщо в ньому є записи більш ніж в одній операційної системі, NTLDR зупиняє роботу - показує меню з вибором і очікує введення від користувача певний період часу.
    Якщо такого файлу немає, то NTLDR продовжує завантаження з першої партіціі першого диска, зазвичай це C:\.

    Якщо в процесі вибору користувач вибрав Windows NT, 2000 або XP, то перевіряється натискання F8 і показ відповідного меню з опціями завантаження.
    Після кожної вдалої завантаження XP створює копію поточної комбінації драйверів і системних налаштувань відому як Last Known Good Configuration. Цей колекцію можна використовувати для завантаження в разі якщо якесь нове пристрій внесло розлад у роботу операційної системи.

    Якщо обрана операційна система XP, то NTLDR знаходить і завантажує DOS-івську програму NTDETECT.COM для визначення заліза, встановленого на комп'ютері.
    NTDETECT.COM будує список компонентів, що потім використовується в ключі HARDWARE гілки HKEY_LOCAL_MACHINE реєстру.

    Якщо комп'ютер має більше одного профілю обладнання програма зупиняється з меню вибору конфігурації.

    Після вибору конфігурації NTLDR починає завантаження ядра XP (NTOSKRNK.EXE).
    В процесі завантаження ядра (але перед ініціалізацією) NTLDR залишається головним в управлінні комп'ютером. Екран очищається і внизу показується анімація з білих прямокутників. Крім ядра завантажується і Hardware Abstraction Layer (HAL.DLL), щоб ядро могло абстрагуватися від заліза. Обидва файли знаходяться в папці System32.

    NTLDR завантажує драйвери пристроїв, позначені як завантажувальні. Завантаживши їх NTLDR передає керування комп'ютером далі.
    Кожен драйвер має ключ HKEY_LOCAL_MACHINE\SYSTEM\Services. Якщо значення Start одно SERVICE_BOOT_START, то пристрій вважається завантажувальним. Для кожного такого пристрою на екрані друкується точка.

    NTOSKRNL в процесі завантаження проходить через дві фази - так звану фазу 0 і фазу 1. Перша фаза ініціалізує лише ту частину мікроядра і виконавчі підсистеми, яка потрібна для роботи основних служб і продовження завантаження. На цьому етапі на екрані показується графічний екран зі статус баром.
    XP дизейблит переривання в процесі фази 0 і включає їх тільки перед фазою 1. Викликається HAL для підготовки контролера переривань. Ініціалізуються Memory Manager, Object Manager, Security Reference Monitor і Process Manager. Фаза 1 починається коли HAL готує систему для обробки переривань пристроїв. Якщо на комп'ютері встановлено більше одного процесор вони ініціалізуються. Всі виконавчі підсистеми реинициализируются в такому порядку:

  • Object Manager
  • Executive
  • Microkernel
  • Security Reference Monitor
  • Memory Manager
  • Cache Manager
  • LPCS
  • I/O Manager
  • Process Manager
  • Ініціалізація Менеджера введення/Виводу починає процес завантаження всіх системних драйверів. З того моменту де зупинився NTLDR завантажуються драйвери по пріоритету.
    Збій у завантаженні драйвера може змусити XP перезавантажитися і спробувати відновити Last Known Good Configuration.

    Остання задача фази 1 ініціалізації ядра - запуск Session Manager Subsystem (SMSS). Підсистема відповідальна за створення користувальницького оточення, що забезпечує інтерфейс NT.
    SMSS працює в режимі користувача, але на відміну від інших додатків SMSS вважається надійною частиною операційної системи і "рідним" додатком (використовує тільки виконавчі функції), що дозволяє їй запустити графічну підсистему та login.

    SMSS завантажує win32k.sys - графічну підсистему.
    Драйвер перемикає комп'ютер в графічний режим, SMSS стартує всі сервіси, які повинні автоматично запускатися при старті. Якщо всі пристрої та сервіси стартували вдало процес завантаження вважається вдалим і створюється Last Known Good Configuration.

    Процес завантаження не вважається завершеним до тих пір, поки користувач не залогінився в систему. Процес ініціалізується файлом WINLOGON.EXE, запускаються як сервіс і підтримується Local Security Authority (LSASS.EXE), який і показує вікно входу в систему.
    Це діалогове вікно показується приблизно тоді, коли Services Subsystem стартує мережеву службу.