Процес (інформатика)![]() Процес — одне з найважливіших понять у архітектурі операційних систем та програмуванні. Процес — об'єкт операційної системи, контейнер системних ресурсів, призначених для підтримки виконання програми. Коли в середовищі операційної системи запускається прикладна програма, система створює спеціальний об’єкт – процес, – який призначений для підтримки її виконання. Хоча може здатися, що програма й процес – поняття схожі, вони фундаментально відрізняються. Програма – це статичний набір команд, а процес – контейнер для ресурсів, які використовуються при виконанні екземпляра програми[1]. Системна реалізація та функції процесу в різних операційних системах дещо відмінні. Структура процесу у WindowsНа найвищому рівні абстракції процес у Windows містить[2][3]:
Найважливішою складовою частиною процесу є потік. Процес як системний об'єкт призначений для "обслуговування" потоків. Сам по собі процес не виконує ніяких дій, для цього призначений потік. Крім закритого адресного простору й одного або кількох потоків, у кожного процесу є ідентифікатор захисту і список відкритих дескрипторів об'єктів (файли, розділи загальної пам'яті), або синхронізуючих об'єктів – м’ютексів, подій і семафорів. Кожен процес має контекст захисту, який зберігається в об'єкті – маркері доступу. Маркер доступу містить ідентифікацію захисту й визначає повноваження даного процесу. Дескриптори віртуальних адрес (virtual address descriptors, VAD) – це структури даних, які використовуються диспетчером пам'яті для обліку віртуальних адрес, задіяних процесом. Загальні характеристикиКожному процесу мають бути виділені певні системні ресурси, зокрема: Кожен процес має «батька» (батьківський процес). Він також може мати (але не обов'язково) «нащадків» (дочірні процеси). В сукупності вони формують дерево процесів. Керування процесами здійснює ядро операційної системи. Пріоритет процесуПроцес має певний пріоритет, який впливає на кількість процесорного часу, який виділятиметься його потокам. У Windows кожен процес має один із таких класів пріоритету:
За замовчуванням клас пріоритету процесу набуває значення NORMAL_PRIORITY_CLASS. При створенні процесу функцією CreateProcess можна задавати клас пріоритету. Для зміни класу пріоритету існуючого процесу використовується функція API SetPriorityClass, для визначення пріоритету існуючого процесу – функція GetPriorityClass. Процеси, якими керує система, можуть використовувати найнижчий IDLE_PRIORITY_CLASS, що запобігатиме конфлікту таких процесів із процесами вищого пріоритету. Якщо виконується потік процесу з класом HIGH_PRIORITY_CLASS, інші потоки в системі не отримуватимуть процесорного часу. Якщо кілька потоків одночасно мають такий пріоритет, вони втрачають свою ефективність. Клас найвищого пріоритету використовується для потоків, які повинні відповідати на найважливіші події. Якщо прикладна програма виконує завдання, яке потребує цього класу пріоритету, слід використовувати функцію SetPriorityClass для тимчасового підвищення класу пріоритету і відразу після виконання завдання відновлювати звичайний пріоритет. Інший спосіб для вирішення подібного завдання – створити процес високого пріоритету, всі потоки якого будуть блокованими більшість часу і тимчасово розблоковуватимуться при виникненні певної події. Клас пріоритету REALTIME_PRIORITY_CLASS припиняє виконання системних потоків, які керують вводом від миші, клавіатури та фоновим записом на диск, що може призвести до втрати даних або нефункціональності всієї системи. Цей клас може використовуватися для програм, які повинні працювати безпосередньо з апаратним забезпеченням або які виконують швидкі, обмежені в часі завдання. Інформація, що зберігається у структурах даних процесуПроцес містить таку інформацію (список не повний):
Робочий цикл процесуПід час запуску процесу проходять такі стадії:
Створення процесу у WindowsБазовою функцією API для створення процесу є CreateProcess. Її заголовок за допомогою мови програмування Delphi описується так[3]: function CreateProcess( lpApplicationName: PChar, // ім'я виконавчого модуля lpCommandLine: PChar, // рядок параметрів lpProcessAttributes: TSecurityAttributes, // структура процесу // SECURITY_ATTRIBUTES lpThreadAttributes: TSecurityAttributes, // структура потоку // SECURITY_ATTRIBUTES bInheritHandles: LongBool, // прапорець спадкування поточного процесу dwCreationFlags: Longword, // прапорці способів створення процесу lpEnvironment: Pointer, // вказівник на блок параметрів оточення lpCurrentDirectory: PChar, // поточний диск і каталог lpStartupInfo:TStartupInfo, // структура STARTUPINFO lpProcessInformation: TProcessInformation //структура PROCESS_INFORMATION ): LongBool; ![]() Основні етапи створення процесу функцією CreateProcess такі:
Після створення процесу з ним співставляється унікальний глобальний системний ідентифікатор- ProcessID. Приклад створення процесуМовою Delphi фрагмент коду, призначений для створення процесу, можна подати так[3]: var SI : TStartupInfo; PI : TProcessInformation; ............................................... FillChar(SI, Sizeof(SI), #0); SI.cb := SizeOf(SI); SI.dwX := 50; SI.dwY := 50; SI.dwFlags := STARTF_USEPOSITION; if not CreateProcess('APINewProcess.exe', nil, nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI) then MessageBox(Wnd, 'Не вийшло створити процес.', , MB_OK or MB_ICONERROR); .... Після закінчення роботи з процесом ....... CloseHandle(PI.hThread); CloseHandle(PI.hProcess); Доступ до процесуЯкщо необхідно працювати із зовнішнім процесом, потрібно спочатку відкрити дескриптор об’єкта процесу за допомогою функції OpenProcess. Ця функція за відомим ідентифікатором процесу повертає його дескриптор, який може використовуватися для маніпуляцій над процесом. Завершення роботи процесу
Відслідковування процесів у WindowsНайвідоміша утиліта для аналізу активності процесів у Windows – системний Task Manager (диспетчер завдань). У ядрі Windows немає такого поняття, як завдання, тому Task Manager насправді є інструментом для керування процесами. Диспетчер завдань Windows відображає список активних процесів. Його можна запустити різними способами:
Якщо вкладка Processes вікна диспетчера завдань показує список процесів, то вміст вкладки Applications (застосунки) відображає список видимих вікон верхнього рівня всіх об'єктів "робочий стіл" інтерактивного об'єкта WindowStation. (За замовчуванням існують два об'єкти "робочий стіл", але можна створити додаткові робочі столи через Windows-функцію CreateDesktop). Стовпчик Status (стан) дає уявлення про те, чи перебуває потік-власник вікна в стані очікування повідомлення. Стан "Running" ("виконується") означає, що потік очікує вводу, a "Not Responding" ("не відповідає") – що не очікує (тобто зайнятий, або чекає завершення операції вводу-виводу, або звільнення якогось синхронізуючого об'єкта)[3]. ЗавданняWindows надає розширення для моделі процесів – завдання (jobs). Вони призначені в основному для того, щоб групами процесів можна було оперувати й керувати як єдиним цілим. Об'єкт-завдання дозволяє встановлювати певні атрибути й накладати обмеження на процес або процеси, зіставлені із завданням. У цьому об'єкті також зберігається інформація про всі процеси, які були зіставлені з завданням, але вже завершені. Джерела
Див. також
|
Portal di Ensiklopedia Dunia