Ядро windows
Ядро складається з набору функцій, які перебувають в файлі Ntoskrnl.exe. Цей набір надає основні механізми (служби диспетчеризації потоків і синхронізації), що використовуються компонентами виконуючої системи, а також підтримкою архітектурно-залежного обладнання низького рівня (наприклад, диспетчеризацией переривань і винятків), яке має відмінності в архітектурі кожного процесора.
Відео: Як включити всі ядра мікропроцесора: Windows 7,8,8.1,10
Код ядра написаний головним чином на C, з асемблерним кодом, призначеним для задач, що вимагають доступу до спеціальних інструкцій і регістрів процесора, доступ до яких з коду на мові C утруднений.
Подібно різним допоміжним функціям, ряд функцій ядра документовані в WDK (і їх опис може бути знайдено при пошуку функцій, що починаються із префікса Ke), оскільки вони потрібні для реалізації драйверів пристроїв.
Відео: Як включити всі ядра на комп`ютері в Windows Xp
зміст:
- 1 Об`єкти ядра.
- 2 Експеримент: перегляд KPCR і KPRCB.
Об`єкти ядра.
Ядро надає низкоуровневую базу з чітко визначених, передбачуваних примітивів і механізмів операційної системи, що дозволяє високорівневим компонентів виконує системи виконувати свої функції. Саме ядро відділене від решти виконуючої системи шляхом реалізації механізмів операційної системи і ухилення від вироблення політики. Воно залишає майже всі політичні рішення, за винятком планування і диспетчеризації потоків, що реалізуються ядром, за виконуючою системою.
За межами ядра виконуюча система являє потоки та інші ресурси спільного використання у вигляді об`єктів. Ці об`єкти вимагають деяких витрат, наприклад, на дескриптори для управління ними, на перевірки безпеки для їх захисту і на ресурсні квоти, що виділяються при їх створенні.
У ядрі, що реалізує набір менш складних об`єктів, званих «об`єктами ядра», подібні витрати виключені, що допомагає ядру управляти основною обробкою і підтримувати створення виконуючих об`єктів. Більшість об`єктів рівня виконання інкапсулюють один або кілька об`єктів ядра, приймаючи їх, певні в ядрі властивості.
Один набір об`єктів ядра, які називаються «керуючими об`єктами», визначає семантику управління різними функціями операційної системи.
У цей набір включені об`єкти асинхронного виклику процедур - APC, відкладеного виклику процедур - deferred procedure call (DPC), і кілька об`єктів, які використовуються диспетчером вводу-виводу, наприклад, об`єкт переривання.
Ще один набір об`єктів ядра, відомих як «об`єкти-диспетчери», включає можливості синхронізації, що змінюють або впливають на планування потоків. Об`єкти-диспетчери включають потік ядра, м`ютекс (званий серед фахівців «мутантом»), подія, пару подій ядра, семафор, таймер і таймер очікування. Виконуюча система використовує функції ядра для створення екземплярів об`єктів ядра, роботи з ними і створення більш складних об`єктів, що надаються в режимі користувача.
Область ядра, що відноситься до управління процесором, і блок управління (KPCR і KPRCB).
Для зберігання специфічних для процесора даних ядром використовується структура даних, яка називається областю, що відноситься до управління процесором, або KPCR (KernelProcessorControlRegion). KPCR містить основну інформацію, таку як процесорна таблиця диспетчеризації переривань (interrupt dispatch table, IDT), сегмент стану задачі (task-state segment, TSS) і таблиця глобальних дескрипторів (globaldescriptortable, GDT). Вона також включає стан контролера переривань, яке використовується разом з іншими модулями, такими як ACPI-драйвер і HAL.
Для забезпечення простого доступу до KPCR ядро зберігає покажчик на цю область в регістрі fs на 32-розрядної системі Windows і в регістрі gs на Windows-системі x64. На системах IA64 KPCR завжди знаходиться за адресою 0xe0000000ffff0000.
KPCR також містить вкладену структуру даних, яка називається блоком управління процесором (kernelprocessorcontrolblock, KPRCB). На відміну від області KPCR, яка документально підтверджена для драйверів сторонніх виробників і для інших внутрішніх компонентів ядра Windows, KPRCB є закритою структурою, яка використовується тільки кодом ядра, який знаходиться в файлі Ntoskrnl.exe.
У цьому блоці міститься:
- інформація про планування (така як поточний, наступний і був загальмований потоки, призначені для виконання на процесорі) -
- призначена для процесора база даних диспетчера (що включає готові черзі для кожного пріоритетного рівня) -
- DPC-чергу-
- інформація про виробника центрального процесора і ідентифікаційна інформація (модель, степінг, швидкість, біти особливостей) -
- інформація про топології центрального процесора і про технології доступу до неоднорідною пам`яті - NUMA (інформація про вузол, про кількість логічних процесорів в кожному ядрі і т. д.) -
- інформація про розміри кеш-пам`яті-
- інформація про облік часу (така як час DPC та обробки переривання) і багато іншого.
У KPRCB також міститься вся статистика процесора, така як статистика введення-виведення, статистика диспетчера кешу, статистика DPC і статистика диспетчера пам`яті. І нарешті, KPRCB іноді використовується для зберігання структур вирівнювання кордонів кешу для кожного процесора, необхідних для оптимізації доступу до пам`яті, особливо на NUMA-системах. Наприклад, система невивантажуваного і вивантажується пулу з боку виглядає як списки, що зберігаються в KPRCB.
Експеримент: перегляд KPCR і KPRCB.
Вміст KPCR і KPRCB можна переглянути, використовуючи команди налагодження ядра! Pcr і! Prcb. Без позначок відладчик за замовчуванням покаже інформацію для центрального процесора 0- але ви можете вказати центральний процесор, додавши після команди його номер (наприклад,! Pcr 2).
Відео: Windows 10 - Розблокувати ядра (Прискорення - CPU)
У наступному прикладі показано, як виглядає висновок команд! Pcr і! Prcb.
Якщо в системі були затримані DPC-виклики, ця інформація також буде відображена на екрані.
lkd>! pcr
KPCR for Processor 0 at 81d09800:
Major 1 Minor 1
NtTib.ExceptionList: 9b31ca3c
NtTib.StackBase: 00000000
NtTib.StackLimit: 00000000
NtTib.SubSystemTib: 80150000
NtTib.Version: 1c47209e
NtTib.UserPointer: 00000001
NtTib.SelfTib: 7ffde000
SelfPcr: 81d09800
Prcb: 81d09920
Irql: 00000002
IRR: 00000000
IDR: ffffffff
Відео: Як включити всі ядра на компі
InterruptMode: 00000000
IDT: 82fb8400
GDT: 82fb8000
TSS: 80150000
CurrentThread: 86d317e8
NextThread: 00000000
IdleThread: 81d0d640
DpcQueue:
lkd>! prcb
PRCB for Processor 0 at 81d09920:
Current IRQL - 0
Threads-- Current 86d317e8 Next 00000000 Idle 81d0d640
Number 0 SetMember 1
Interrupt Count - 294ccce0
Times - Dpc 0002a87f Interrupt 00010b87
Kernel 026270a1 User 00140e5e
Для безпосереднього виведення дампа структур даних _KPCR і _KPRCB можна скористатися командою dt, оскільки обидві команди налагодження дають вам адреси структур (які для наочності виділені в попередньому висновку жирним шрифтом). Наприклад, якщо потрібно визначити швидкість процесора, можна за допомогою наступної команди подивитися на поле MHz:
lkd> dt nt! _KPRCB 81d09920 MHz
+0x3c4 MHz: 0xbb4
lkd>? bb4
Evaluate expression: 2996 = 00000bb4
На даній машині процесор був запущений на частоті близько 3 ГГц.