Спрощена схема ядра Windows NT
Продовжуємо розпочату лекцію по ОС Windows NT. Початок лекції можна подивитися тут.
Саме ядро представимо у вигляді трьох шарів.
Ядро має бути по максимуму стерпним, бо апаратне забезпечення може змінюватися і кожен раз міняти код ядра це занадто багато роботи. Тому потрібно зробити універсальну частина і частина специфічну для обладнання - невелику, яку можна буде легко змінювати і яка б надавала уніфікований інтерфейс ядра і драйверів.
Це і спроектували в HAL.
На малюнку нижче представлена упращенія схема ядра Windоws NT.
Спрощена схема ядра Windows NT
У той час, коли проектувався сам Windows це було необхідністю, адже не було зрозуміло, який домінуючою буде апаратна платформа через рік, 5 років ..., а ОС повинна орієнтуватися на поточний і майбутній апаратне забезпечення. Тоді ні ясний тип платформи (х86 х64), і тільки завдяки властивості переносимості вдалося випустити Windows ARTI для планшетів (на базі ЦП ARM).
Таким чином запроектовано переноситься Портабельная ядро за допомогою шару абстракції апаратного забезпечення (HAL).
На цьому шарі абстракції стоять наступні дві частини ядра:
- Драйвера пристроїв - вони працюють з пристроями через HAL і надають свої сервіси, наприклад пристрої введення / виводу - миша, клавіатура, диск, мережа.
- Kernel - це не конкретно ядро, а його частина.
Ключовий принцип архітектури ядра Windows
Це принцип підсистем оточення (або персоналій).
Програми користувача НЕ використовують сервіси ОСнапрямую. Навіть коли ми запускаємо будь-який додаток під Windows безпосередньо, воно ніколи не використовує ядро безпосередньо, тільки через підсистему оточення Windows API, немає виклику ядра безпосередньо.
Бібліотека підсистеми якимось чином транслює документовану API функцію в виклик недокументованою функції ОС.
За рахунок цього функції ОС можна змінювати під «сьогоднішній» день, при цьому залишати зворотну сумісність з тими програмами, які вже розроблені під ОС, за рахунок того, що є документоване API, яка зобов'язана працювати.
Спочатку було три підсистеми оточення: Windows, OS / 2, POSIX
У Windows XP зникла POSIX
Компоненти системи ядра
Kernel - самі низькорівневі функції ОС: планування потоків, обробка переривань, мультипроцессорная синхронізація.
Kernel надає низькорівневі примітиви, на які Executive реалізує високорівневі конструкції
HAL - прошарок між апаратним забезпеченням і ядром.
Executive - стоїть вище і реалізує основні сервіси ОС: управління пам'яттю, процесами, потоками, безпеку, введення / висновок, межпроцессорной взаємодія.
Драйвера пристроїв - реальні пристрої - робота з апаратурою, віртуальні пристрої - драйвера (наприклад мережевого стека).
Інші модулі ядра
- Реалізують функції графічного інтерфейсу
- Реалізують віконну підсистему
Причини. продуктивність, занадто багато перемикань. На думку MS немає жодної комерційно успішною ОС, яка була б виключно микроядро.
У Windows використовується Гібридний ядро. оскільки володіє деякими характеристиками мікроядра:
На малюнку вище «Спрощена схема ядра» Kernel по суті і є це микроядро, яке можна було б Executive винести в режим користувача і розбити його на окремі процеси. В ядрі залишилася б тільки частина і це було б класичне микроядро.
Але через причини продуктивності Executive не стали виносити в режим користувача і розбивати на окремі процеси. Його скомпілювали, помістили в модуль, архітектурно все залишилося в ядрі.
Тому В Windows ядро Гібридний і досить цікаво організовано.
Переносимість (портіруемость) - це ключова особливість ОС Windows.
Код ядра написаний на мові високого рівня (С / С ++) - переносимо, на Асемблері коду немає.
У ядрі і HAL є невеликі включення на Асемблері всередині шару абстракції апаратного забезпечення.
Останні 20 років ПК працюють на х86 платформі, тому питання про переносимості перед розробниками ОС не стояв.
Об'єктно-орієнтований підхід
Ключовий принцип при проектуванні Windows.
Будь-ресурс системи представляється як якийсь об'єкт. Ресурс - це будь-який ресурс який повинен розділятися і до якого може бути доступ від декількох процесів. Якщо ресурс використовується в рамках одного процесу, то виділяти його як об'єкт не має сенсу.
В основі Windows NT - об'єкти, уніфікована форма, що має:
- іменування
- Спільне використання
- облік
Навіщо все так зроблено?
Є кілька типів ресурсів, в бедующем можна додавати інші ресурси в систему, і щоб ця уніфікувати і не переписувати все ядро, створили уніфіковану форму: найменування, спільне використання, облік.
Будь розділяється ресурс системи - це об'єкт.
Всередині структури самого execute - не об'єкт.
Менеджер об'єктів
Це частина execute, скорочена назва OB (Object Manager) - ці ж самі назви використовуються в мові СІ.
- Управляє ресурсами
- Фіз. файли і директорії;
- Елементи реєстру;
- Процеси (потік).
Кожен ресурс надається об'єктом
Операції над об'єктами:
- Створення / видалення;
- Захист доступу;
- Підрахунок посилань (Reference counting).
Підрахунок посилань (Reference counting)
Хендлом асоційовані з процесом, але можуть передаватися від одного процесу до іншого, так як об'єктом можна користуватися з різних процесів, то це розділяється ресурс. Зручно передавати хендлом.
За ієрархії об'єктів існують два класи об'єктів:
- executive - використовуються одними додатками і компонентами самого executive (виконавчої підсистеми), їх більшість, вони загальні.
- Kernel - представляють базові ресурси - фізичні пристрої, примітиви синхронізації ... Можуть використовуватися тільки в режимі ядра. Використовуються тільки ядром, тобто з ними працює тільки ядро і більше ніхто.
Типи об'єктів Windows
Що таке сам об'єкт фізично?
Сам об'єкт - це набір якихось даних. Яких - менеджеру об'єктів без різниці. Об'єкт складається з двох великих частин: тіло, заголовок.
Тіло - самі дані (вони цікавлять конкретного споживача).
Тема - додається менеджером об'єктів, в ньому зберігається внутрішня інформація для організації об'єкта, його зберігання, найменування, обліку, роботи, прав доступу.
- ім'я
- Директорія, яка йому належить
- дескриптор безпеки
- Скільки разів були відкриті Хедлі об'єкта
- Список процесів, що мають посилання на даний об'єкт
- Кількість цих посилань
- Тип
Всі вони потрібні для роботи менеджера об'єктів.
Об'єкти групуються в директорії, щоб їх як то систематизувати. Будується все ієрархічним чином. є директорії верхнього рівня (Root), потім є гілки.
Файлова організація WindowsNT
- NTOSKRNL.EXE - ядро ОС (execute і kernel).
- HAL.DLL - абстракція апаратного забезпечення. Так як в ОС спочатку підтримувалася модульність, то шар абстракції апаратного забезпечення розташовується окремим файлом.
- NTDLL.DLL - реалізація Native API і системні виклики - спеціальна бібліотека, де зберігаються системні виклики, які надають користувачеві зручний API інтерфейс для роботи.
Ці три файли фактично становлять ядро ОС, інші файли - Plug-in до ядра, драйвера, які завантажуються в разі потреби. Сенс в тому, що без цих трьох файлів нічого працювати не може, так як працювати буде нічим.
Підключаються файли (Plug-in ядра) можуть називатися як завгодно.
Модулі ядра Windows NT не можна вкомпільовані в саме ж ядро. В ОС Linex є вибір, можна використовувати їх окремо, можна разом з ядром).
Для самої ОС три файли недостатні, необхідний ще ряд менеджерів і підсистем і всього іншого для того, щоб організувати складну архітектуру Windows NT, щоб працювало все подсистемном оточення.
Тому деякі інші файли теж необхідні, вони представлені нижче в порядку завантаження.
- SMSS.EXE - процес менеджера сесій.
- WINLOGON.EXE - процес управління аутентифікацією користувача (логон).
- SERVICES.EXE - процес управління службами (сервісами).
- LSASS.EXE - процес підсистеми Local Security Authority.
- CSRSS.EXE - процес підсистеми Windows.
- WIN32R.SYS - частина підсистеми Win, що працює в режимі ядра. Драйвер, модуль ядра, він реалізує ту частину підсистеми оточення Win, яка працює в режимі ядра, тобто це віконний менеджер і графічна підсистема.
- KERNEL32.DLLUSER32.DLL GDI32.DLL - три ключові динамічні бібліотеки підсистеми, реалізують призначену для користувача частину підсистеми оточення Winвщци. Для 64разрядной ОС застосовуються ті ж назви (з числом 32).
підсистема Windows
CSRSS.EXE - процес підсистеми оточення Windows, який управляє консольними додатками і реалізує допоміжні функції
Win32K.SYS - драйвер режиму ядра, реалізується:
- Віконний менеджер;
- Обробка введення з клавіатури / миші;
- Обмін повідомленнями між вікнами;
- Графічна підсистема (GDI).
підсистема користувача
- Динамічні бібліотеки підсистеми: ADVPI32.DLL, USER32.DLL, GDI32.DLL, KERNEL32.DLL
- Графічні драйвера (включаючи драйвер принтерів)
До Windows NT4.0 віконний менеджер і графічна підсистема були винесені в режим користувача. В силу слабких ПК від цього рішення відмовилися.
Як всі ці нутрощі працюють? Як це все побачити з точки зору програміста?
Інструменти
Інструменти - безліч програм для дослідження внутрішньої будови Windows і розуміння принципу їх роботи.
Існують утиліти, які допомагають розібратися в система Windows:
Подивимося які є утиліти.
можна завантажити цілий набір програм, який дозволяє зазирнути у внутрішній устрій Windows, подивитися що і як там зроблено, що приховано для користувача частини. Ці програми в основному торкаються моніторинг того, як працює ОС.