Об'єктний Менеджер (Windows)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Object Manager у Windows, ієрархічно категоризовані, використовуючи простори імен

Об'єктний Менеджер (внутрішнє ім'я Ob) це підсистема, реалізована як частина шару Executive Windows, яка керує ресурсами Windows. Кожен ресурс, який з'являється як логічний об'єкт, належить до простору імен (namespace) для категоризації. Ресурси можуть бути фізичними пристроями, файлами або папками томів, записами реєстру або навіть запущеними процесами. Всі об'єкти, що представляють ресурси, мають властивість Object Type, також інші метадані про ресурс. Об*єктний Менеджер — це розділений (спільний) ресурс, і всі підсистеми, які мають справи з ресурсами мають проходити через нього.

Архітектура[ред.ред. код]

Об'єктний менеджер — це централізований ресурсний посердник в лінійці операційних систем Windows NT, який слідкує за ресурсами, виділеними для процесів. Він є ресурс-агностичним, і може керувати будь-яким типом їх, включно з пристроями і файловими дескрипторами (гендлами). Всі ресурси представляються як об'єкти, кожен належить до логічного простору імен для категоризації і має тип, який репрезентує тип ресурсу, який показує можливості і функціональності через властивості. Об'єкт тримається доступним, доки всі процеси працюють з ним; Об'єктний Менеджер тримає запис, — які з об'єктів зараз використовуються через т. зв. reference counting, так само як і інформацію за власника. Будь-який системний виклик, який змінює стан розподілу ресурсів для процесів, проходить через Об'єктнй Менеджер.

Об'єкти можуть бути або об'єктами ядра, або Executive об'єктами. Перші представляють такі первинні ресурси як фізичні пристрої, або сервіси накшталт синхронізації, які необхідні для реалізації будь-якого іншого типу сервісу операційної системи. Об'єкти ядра ніяк не представлені для коду простору режиму користувача, лише для режиму ядра. Застосунки та служби, які виконуються поза ядром використовують другий тип, — об'єкти Executive, які представлені шаром Windows Executive, разом з його компонентами, такими як менеджер пам'яти, планувальник та система в/в. Об'єкти Executive інкапсулюють один або більше об'єктів ядра і представляють не тільки ресурси ядра чи пов'язані з ним, але також розширений набір сервісів, ніж робить ядро. Самі застосунки можуть охоплювати один чи декілька об'єктів Executive, і формувати об'єкти, які надаватимуть певні сервіси. Executive об'єкти також використовуються підсистемами середовища (такими як Win32, POSIX тощо) для реалізації своєї функціональности.

Щоразу коли створюється чи відкривається об'єкт, — створюється посилання на екземпляр, яке називається дескриптор (або гендл). Об'єктний Менеджер індексує об'єкти як за їхніми іменами, так і за їхніми дескрипторами. Але посилання на об'єкти за дескрипторами є швидшим, бо можна оминути стадію трансляції імені. Дескриптори зв'язуються з процесами (шляхом створення запису в Таблиці дескрипторів процесу, де перелічені дескриптори процеса), та можуть передаватися між процесами. Процес повинен заволодіти дескриптором об'єкта перед його використанням. Процес може мати максимум до 16'000'000 дескрипторів одночасно. Під час створення, процес отримує дескриптори на набір об'єктів за замовчуванням. Хоча існують різні типи дескрипторів — файлові, дескриптори подій та процесів — вони тільки допомагають ідентифікувати тип цільових об'єктів; не розрізняти операції, які можуть бути виконані з їхньою допомогою, таким чином вони забезпечують послідовність в визначенні того, яким чином різні об'єктні типи керуватимуться програмно. Створення дескриптора і отримання об'єктів через дескриптори проходить виключно за посередництва Об'єктного Менеджера, тож жодне використання ресурсу не пройде непоміченим ним.

Типи Executive об'єктів, представлені в Windows NT такі:

Process Процес. Колекція виконуваних потоків разом з віртуальною адресацією та контрольною інформацією.
Thread Потік. Сутність, яка містить код на виконання, частина процесу.
Job Колекція процесів.
File Файл. Відкритий файл або пристрій в/в.
File Mapping object Область пам'яти для відображення файла.
Access token Права доступу для об'єкта.
Event Об'єкт, який інкапсулює певну інформацію, яка буде використана для сповіщення процесів (про будь-що).
Semaphore/Mutex Семафори та М'ютекси. Об'єкти, які серіалізують доступ до інших ресурсів.
Timer Таймери. Об'єкти, які сповіщують процеси через фіксований проміжок часу.
Key Ключі. Ключі реєстру.
Desktop Логічна дисплейна поверхня, для вмісту елементів GUI.
Clipboard Тимчасове сховище для інших об'єктів.
WindowStation Об'єкт, який містить групу об'єктів Desktop, один об'єкт Clipboard та інші користувацькі об'єкти.
Symbolic link Символьне посилання. Посилання на інші об'єкти, через яке об'єкт, на який посилаються, може бути використаний.

Структура об'єкта[ред.ред. код]

Кожен об'єкт, керований Об'єктим Менеджером має заголовок і тіло; заголовок містить статусну інформацію, яка використувується Об'єктним Менеджером, тоді як тіло містить об'єкт-специфічні дані і сервіси які він надає. Заголовок об'єкта містить певні дані, представлені як властивості (Properties), такі як:

  • Object Name — ім'я, яке ідентифікує об'єкт
  • Object Directory — категорія, до якої належить об'єкт
  • Security Descriptors — права доступу на об'єкт
  • Quota Charges — інформація про використання ресурсів для об'єкта
  • Open handle count — кількість разів відкривання дескриптора, ідентифікатора цього об'єкта
  • Open handle list — список процесів, які посилаються зараз на цей об'єкт
  • Reference count — власна кількість посилань на об'єкт
  • Type — тип об'єкта (об'єкт, який ідентифікує структуру тіла цього об'єкта).

Об'єкт Type містить властивості, притаманні саме цьому типу об'єкта, а також статичні методи, що реалізують сервіси, які цей об'єкт надає. Об'єкти, керовані Об'єктним Менеджером мають забезпечити принаймні напередвизначений мінімальний набір сервісів:

  • Close — Закриває дескриптор об'єкта
  • Duplicate — створює інший дескриптор об'єкта, з яким інший процес може отримати

розділений (спільний) доступ до цього об'єкта

  • Query object — збірна інформація про його атрибути та властивості
  • Query security — вертає дескриптор безпеки об'єкта (security descriptor)
  • Set security — змінює безпековий доступ
  • Wait — для синхронізації з одним або більше об'єктами через певні події

Об'єкти типу також мають деякі загальні атрибути, включно з іменем типу, чи треба їх розміщувати в нескидній пам'яті (non-paged memory), правами доступу, та інформацією за синхронізацію. Всі зразки того самого типу розділяють той самий об'єкт типу, і об'єкт типу ініціалізується лише раз. Новий об'єктний тип може бути створений шляхом надання об'єктові властивостей вказувати свій стан та методи для вказування сервісів, які він надає.

Object name використовується, для забезпечення описувальної ідентичности об'єкта, для допомоги в пошуку об'єкта. Об'єктний Менеджер тримає список імен, вже призначених підпорядкованим об'єктам, і відображає імена для зразків. Оскільки більшість доступів до об'єктів іде через дескриптори, не завжди треба шукати ім'я для вирішення об'єктного посилання. Пошук виконується тільки тоді, коли об'єкт створюється (для того щоб переконатися, що новий об'єкт має унікальне ім'я), або коли процес доступається об'єкта саме за його іменем. Object directory використовується для категоризації їх згідно з типами. Напередвизначені директорії суть: \?? (імена пристроїв), \BaseNamedObjects (м'ютекси, події, семафори, очікувані (waitable) таймери, секційні об'єкти), \Callback (функції зворотного виклику, т. зв. callback-функції), \Device,\Drivers,\FileSystem,\KnownDlls,\Nls (таблиці мов), \ObjectTypes (об'єкти типів), \RPC Controls (RPC порти),\Security (об*єкти підсистеми безпеки), та \Window (об'єкти віконної підсистеми (windowing subsystem)). Об'єкти також належать до т. зв. Простору імен. Кожна сесія користувача, призначена своєму простору імен. Об'єкти, розділені між всіма сесіями, є в глобальному (GLOBAL) просторі імен, а сесійноспецифічні об'єкти — в специфічному цій сесії просторі.

Див. також[ред.ред. код]

Посилання[ред.ред. код]

Зовнішні посилання[ред.ред. код]