Ядро windows nt

Спрощена схема ядра Windows NT

Продовжуємо розпочату лекцію по ОС Windows NT. Початок лекції можна подивитися тут.

Саме ядро ​​представимо у вигляді трьох шарів.

Ядро має бути по максимуму стерпним, бо апаратне забезпечення може змінюватися і кожен раз міняти код ядра це занадто багато роботи. Тому потрібно зробити універсальну частина і частина специфічну для обладнання - невелику, яку можна буде легко змінювати і яка б надавала уніфікований інтерфейс ядра і драйверів.

Це і спроектували в HAL.

На малюнку нижче представлена ​​упращенія схема ядра Windоws NT.

Ядро windows nt

Спрощена схема ядра Windows NT

У той час, коли проектувався сам Windows це було необхідністю, адже не було зрозуміло, який домінуючою буде апаратна платформа через рік, 5 років ..., а ОС повинна орієнтуватися на поточний і майбутній апаратне забезпечення. Тоді ні ясний тип платформи (х86 х64), і тільки завдяки властивості переносимості вдалося випустити Windows ARTI для планшетів (на базі ЦП ARM).

Таким чином запроектовано переноситься Портабельная ядро ​​за допомогою шару абстракції апаратного забезпечення (HAL).

На цьому шарі абстракції стоять наступні дві частини ядра:

  1. Драйвера пристроїв - вони працюють з пристроями через HAL і надають свої сервіси, наприклад пристрої введення / виводу - миша, клавіатура, диск, мережа.
  2. 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)

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

За ієрархії об'єктів існують два класи об'єктів:

  1. executive - використовуються одними додатками і компонентами самого executive (виконавчої підсистеми), їх більшість, вони загальні.
  2. Kernel - представляють базові ресурси - фізичні пристрої, примітиви синхронізації ... Можуть використовуватися тільки в режимі ядра. Використовуються тільки ядром, тобто з ними працює тільки ядро ​​і більше ніхто.

Типи об'єктів Windows

Що таке сам об'єкт фізично?

Ядро windows nt

Сам об'єкт - це набір якихось даних. Яких - менеджеру об'єктів без різниці. Об'єкт складається з двох великих частин: тіло, заголовок.

Тіло - самі дані (вони цікавлять конкретного споживача).

Тема - додається менеджером об'єктів, в ньому зберігається внутрішня інформація для організації об'єкта, його зберігання, найменування, обліку, роботи, прав доступу.

  • ім'я
  • Директорія, яка йому належить
  • дескриптор безпеки
  • Скільки разів були відкриті Хедлі об'єкта
  • Список процесів, що мають посилання на даний об'єкт
  • Кількість цих посилань
  • Тип

Всі вони потрібні для роботи менеджера об'єктів.

Об'єкти групуються в директорії, щоб їх як то систематизувати. Будується все ієрархічним чином. є директорії верхнього рівня (Root), потім є гілки.

Файлова організація WindowsNT

  1. NTOSKRNL.EXE - ядро ​​ОС (execute і kernel).
  2. HAL.DLL - абстракція апаратного забезпечення. Так як в ОС спочатку підтримувалася модульність, то шар абстракції апаратного забезпечення розташовується окремим файлом.
  3. 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, подивитися що і як там зроблено, що приховано для користувача частини. Ці програми в основному торкаються моніторинг того, як працює ОС.

Схожі статті