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

6. Лінії видимого контуру

Породження процесі, як подано в лістінгу 6, можливе за допомогою фу­нкцій, які викликаються із функції mane ().

 Лістінг 6. Основна гілка програми, з якої викликається функція,

 що породжує процес

int main (int argc, char *argv [ ]) {

 . . .

Rt = func1 (X, Y, Z );

 . . . }

 Визначення функції.

int func1 (char *M, char *N, char *V) {

 . . .

char *const args [ ] = {“TaskX”, M, N, V, NULL};

Pid = fork ();

if (Pid = = 0) {

exec ({“TaskX”, args); }

if (Pid > 0) {

 . . . }

wait (stat); }

В лістінгу 6. функція func1 викликається з трьома аргументами. Ці аргу­менти передаються породженому процесу.

Процеси також можуть породжуватися із методів, які належать об’єктам. Як подано в лістінгу 7, об’єкти можна оголосити в довільному процесі.

 Лістінг 7. Оголошення об’єкту в процесі

 . . .

my_object MyObject;

 . . .

 Оголошення та визначення класу.

class my_object {

public:

 . . .

int spawnProcess (int X);

 . . . };

int my_object :: spawnProcess (int X) {

 . . .

 . . . posix_spawn () або system ()

 . . . }

Як подано в лістінгу 7, об’єкт може створювати довільну кількість про­цесів з довільного методу.

Висновки

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

Деякі дані та атрибути процесу зберігаються в блоці керування процеса­ми (process control block – PCB), або БУП, що використовує операційна система для ідентифікації процесу. Багатозадачність (виконання одночасно декількох процесів) реалізується шляхом перемикання контексту. Біжучий стан процесу, який виконується, і його контекст зберігаються в БУП-блоці, що дозволяє успі­шно відновити цей процес в наступний раз, коли від буде призначений центра­льному процесору. Займаючи процесор, процес перебуває в стані виконання, а коли він очікує використання ЦП, - то в стані готовності (очікування). Отрима­ти інформацію про процеси, що виконуються в системі, можемо за допомогою утиліти ps.

Процеси, які створюють інші процеси, вступають з ними в родинні від­ношення. Творець процесу називається батьківським, а створений процес – до­чірнім. Дочірні процеси успадковують від батьків множину атрибутів. Свята задача батьківського процесу – почекати, коли дочірній не залишить систему. Для створення процесів передбачені різні системні функції: fork (), fork-exec (), system () та posit_spavn (). Функції fork (), fork-exec (), та posit_spavn () створю­ють процеси, які є асинхронними, в тоц час як system () створює дочірній про­цес, який є синхронним по відношенню до батьківського. Асинхронні батьків­ські процеси можуть викликати функцію wait (), після чого синхронно очіку­вати, доки дочірні процеси де завершаться або поки не буде прочитано коди завершення для дочірніх процесів, що вже завершилися.

Програму можна розділити на декілька процесів. Ці процеси можуть по­родити батьківський процес, або вони можуть бути запущені з сценарію оболо­н­ки, як програми, що виконуються окремо. Спеціалізовані процеси можуть при необхідності породжувати інші процеси, передбачені для виконання дій тільки певного типу. Породження процесів може бути реалізовано як із функцій, так і з методів.

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