Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lek_4,5_.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
412.16 Кб
Скачать

43

Лекція_4_5

Створення процесу

  • Відношення між батьківським і дочірнім процесами;

  • використання системних функцій;

  • використання POSIX-функцій для породження процесів;

  • завершення процесу;

  • ресурси процесів;

  • розбиття програми на задачі.

Щоб виконати довільну програму, операційна система повинна спочатку створити процес. При створенні нового процесу в головній таблиці процесів створюється нова структура. Створюється та ініціюється новий блок БУП, і в його розділ ідентифікації процесу записується унікальний ідентифікаційний но­мер процесу (id) та id батьківського процесу. Програмний лічильник встанов­лю­ється вказівником на вхідну точку програми, а вказівники системних стеків встановлюються таким чином, щоб визначити стекові межі для процесу. Про­цес ініціюється довільними атрибутами для вимоги. Якщо процесу не надано значення пріоритету, то за замовчуванням йому надається саме низьке значен­ня. Спочатку процес не володіє ніякими ресурсами, якщо немає явного запиту на ресурси або якщо вони не були успадковані від процесу-творця. Процес входить в стан виконання і розміщується в чергу готових до виконання про­цесів. Для нього виділяється адресний простір, розмір якого визначається за замовчуванням на основі типу процесу. Окрім того, розмір можемо встановити за запитом творця процесу. Процес-творець може передати системі розмір адресного простору в момент створення процесу.

1. Відношення між батьківським та дочірніми процесами

Процес, який створює, або породжує, інший процес, є батьківським (parent) процесом по відношенню до породженого, або дочірнього (child) проце­су. Процес init – батьківський (або предок) всіх процесів користувача – перший процес, видимий системою UNIX після її завантаження. Процес init організує систему, при необхідності виконує інші програми і запускає демон-програми (demon), тобто мережеві програми, які працюють у фоновому режимі. Ідентифі­катор процесу init (PID) рівний 1. Дочірній процес має свій унікальний іденти­фікатор (PID), БУП-блок і окрему структуру в таблиці процесів. Дочірній про­цес також може новий процес. Додаток, що виконується, може створювати де­рево процесів. Наприклад, батьківський процес виконує пошук накопичувача на жорстких дисках для заданого HTML-документу. Ім'я цього HTML-докумен­ту записано у глобальній структурі даних, подібно списку, який містить всі за­пити на документи. Після успішного знаходження документ видаляється із спи­ску запитів, і його маршрут (шлях в мережі) записується в іншу глобальну стру­ктуру даних, яка містить шляхи знайдених документів. Щоб забезпечити прий­нятну реакцію на запити користувача, для процесу передбачено обмеження у вигляді п’яти неопрацьованих запитів у списку. По досягненню цієї межі поро­джуються два нових процеси. Якщо породжений процес в свою чергу досягає межі, він створить ще два нових процеси. Створене таким чином дерево проце­сів подано на рис. 1. Довільний процес може мати тільки один батьківський, але м ножину дочірніх процесів.

Дочірній процес може бути створений з власними образами, що викону­ються, або у вигляді дублікату батьківського процесу. При створенні в якості дубліката предка дочірній процес успадковує множину його атрибутів, вклю­ча­ючи середовище, пріоритети, стратегію планування, обмеження за ресурсами, відкриті файли і розділи загальної пам’яті. Якщо дочірній процес переміщує вказівник біжучої позиції у файлі або закриває файл, то результати цих дій бу­дуть видимі батьківському процесу. Якщо предку виділяються довільні додат­кові ресурси вже після створення процесу-нащадка, то вони не будуть досяжні нащадку. В свою чергу, якщо дочірній процес використовує будь-які ресурси, вони також будуть недосяжні для процесу-предка.

Деякі атрибути предка не успадковуються нащадком. Як говорилося вище, дочірній процес не успадковує PID предка і його БУП-блок. Нащадок не успадковує ніяких файлових блокувань, створених предком або неопрацьова­них сигналами. Для дочірнього процесу використовуються власні значення та­ких часових характеристик, як коефіцієнт завантаження процесора і час створе­ння. Незважаючи на те що дочірні процеси пов’язані певними відно­синами з предками, вони все ж функціонують як окремі процеси. Їх програмні та стекові лічильники діють окремо. Оскільки розділи даних копіюються, а не використо­ву­ються спільно, процес-нащадок може змінювати значення своїх змінних, не впливаючи на батьківську копію даних. Батьківський та дочірній процеси спі­льно використовують розділ програмного коду і виконують інструк­ції, розмі­щені безпосередньо після виклику системної функції, яка створила системний процес. Вони не виконують ці інструкції на етапі блокування із-за конкуренції за процесор зі всіма іншими процесами, завантаженими в пам'ять.

Після створення образ дочірнього процесу може бути замінено іншим образом, що виконується. Розділи програмного коду, даних та стеків, а також його масив пам’яті перезаписуються новим образом процесу. Новий процес зберігає свої ідентифікаційні номери (PID і PPID). Атрибути, що зберігаються новим процесом після заміни образу який виконується, подано в табл. 1. В ній також вказані системні функції, які повертають дані атрибути. Змінні середови­ща також зберігаються, якщо під час заміни образу процесу, що виконується, не були задані нові змінні середовища. Файли, які були відкриті до моменту замі­ни образу що виконувався, залишаються відкритими. Новий процес буде ство­рювати файли з тими ж файловими розширеннями. Час ПЦ при цьому не онов­люється.

Таблиця 1.

Атрибути,що зберігаються новим процесом після заміни його образу який виконується, образом новогопроцесу

Атрибути, що зберігаються

Функції

Ідентифікатор (ID) процесу

getpid ()

ID батьківського процесу

getppid ()

ID групи процесів

getppid ()

Сеансові членство

getsid ()

Ідентифікатор ефективного користувача

getuid ()

Ідентифікатор ефективної групи

getgid ()

Додаткові ID груп

getroups ()

Час, який залишився до сигналу тривоги

alarm ()

Фактор поступливості

nice ()

Час, який використовувався до даного моменту

times ()

Маска сигналів процесу

sigprocmask ()

Сигнали, які очікують

sigpendding ()

Граничний розмір файлу

ulimit ()

Граничний об’єм ресурсів

getrlimit ()

Маска створення файлового режиму

umask ()

Біжучий робочий каталог

getcwd ()

Кореневий каталог

1.1. Утиліта pstree

Утиліта pstree в середовищі Linux відображає дерево процесів (точніше, вона відображає процеси, що виконуються, у формі деревоподібної структури). Коренем даного дерева є процес init.

При виклику даної утиліти можемо використати наступні опції.

-а Відображає аргументи командної стрічки.

-h Виділяє біжучий процес і його нащадків.

- H Аналогічно опції –h, але виділенню підлягає заданий процес.

-n Відсортувати процеси з однаковим предком по значенню PID а не за іменем.

-р Відобразити значення PID.

Синопсис

pstree [-a] [-c] [-h  - Hpid] [-l] [-n] [-p] [-u] [-G]  -U]

[pid  user]

pstree –V

Н а рис 2 подано результат виконання команди pstree –h в середовищі Linux.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]