Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



“Інформаційні управляючі системи та технології” 080402 “Інформаційні технології проектування” Одеса 2010

“Інформаційні управляючі системи та технології” 080402 “Інформаційні технології проектування” Одеса 2010




Сторінка9/24
Дата конвертації10.03.2017
Розмір1.41 Mb.
1   ...   5   6   7   8   9   10   11   12   ...   24

3.4 Створення і завершення процесів і потоків


Засоби створення і завершення процесів дають змогу динамічно змінювати в операційній системі набір застосувань, що виконуються. Засоби створення і завершення потоків є основою для створення багатопотокових програм.

Образ процесу



Адресний простір

Рис.3 2 Образи процесу і його потоків

3.4.1 Створення процесів


Базові принципи створення процесів

Процеси можуть створюватись ядром системи під час її ініціалізацїї. Наприклад, в UNIX-сумісних системахтаким процесом може бути процес ініціалізації системи init, у Windows XP – процеси підсистем середовища (Win32 або POSIX). Таке створення процесі, однак, є винятком, а не правилом.

Найчастіше процеси створюються під час виконання інших процесів.У цьому разі процес, який створює інший процес, називають предком, а створений ним процес – нащадком.

Нові процеси можуть бути створені під час роботи застосування відповідно до його логіки (компілятор може створювати прцеси для кожного етапу компіляцїї, веб-сервер – для обробки прибулих запитів) або

безпосередньо за запитом користувача (наприклад, з командного інтерпретатора, графічної оболонки або файлового менеджера).

Інтерактивні та фонові процеси

Розрізняють два типи фонових процесів з погляду їхньої взаємодії з користувачем.



  • Інтерактивні процеси взаємодіють із користувачами безпосередньо, приймаючи від них дані, введені за допомогою клавіатури, миші тощо. Прикладом інтерактивного процесу може бути процес текстового редактора або інтегрованого середовища розробки.
    Клавіату́ра (англ. keyboard) - сукупність розміщених у певному порядку клавіш пристрою, що використовується для введення і редагування даних, а також керування виконанням окремих операцій.
    Команди́р частини (підрозділу) - посадова особа командного складу в збройних силах, на котру покладено командування (керівництво) підрозділом, частиною (кораблем), з'єднанням. У більшості країн світу командир є єдиноначальником і несе особисту відповідальність за постійну бойову і мобілізаційну готовність ввіреної йому частини (підрозділу).
    Текстовий редактор - комп'ютерна програма-застосунок, призначена для створення й зміни текстових файлів (вставки, видалення та копіювання тексту, заміни змісту, сортування рядків), а також їх перегляду на моніторі, виводу на друк, пошуку фрагментів тексту тощо.
    Інтегроване середовище розробки (ІСР, англ. Integrated development environment або англ. IDE) - комплексне програмне рішення для розробки програмного забезпечення. Зазвичай, складається з редактора початкового коду, інструментів для автоматизації складання та відлагодження програм.


  • Фонові процеси із користувачем не взаємодіють безпосередньо. Зазвичай вони запускаються під час старту системи і чекають на запити від інших застосувань. Деякі з них (системні процеси) підтримують функціонування системи (реалізують фонове друкування, мережні засоби тощо), інші виклнують спеціалізовані задачі (реалізують веб-сервери, сервери баз даних тощо).
    Друка́рство - принцип одержання відбитків письмових знаків за допомогою тиснення. Отримані таким чином роботи можна використовувати у великих кількостях - що і стало суттю друкарства. До цього винаходу, на створення та відтворенням рукописних документів і книг мали монополію лише невелика кількість фахівців (особливо освічені ченці монастирях).
    фонові процеси також називають службами (services, у системах лінії windows XP) або демонами (daemons, в UNIX).

3.4.2 Керування адресним простором під час створення процесів


Оскільки основним елементом процесу є захищений адресний простір, дуже важливо вирішити проблему його розподілу під час створення нового процесу. Розглянемо два різні підходи.

Системні виклики fork() exec()

У першому підході адресний простір нащадка створюють як точну копію адресного простору предка. Така операція реалізована системним викликом, який у POSIX-системах називають fork().

У цьому разі копіюється не тільки адресний простір, а й лічильник команд головного потоку процесу, тому після виклику fork() предок і нащадок виконуватимуть ту саму інструкцію. Розробник має визначити, у

якому з двох процесів перебуває керування. Це можна зробити на підставі відмінностей між кодами повернення fork() для предка і нащадка.

Коли створення нового процесу відбувається шляхом дублювання адресного простору предка, виникає потреба у спеціальних засобах завантаження програмного коду в адресний простір процесу.

Дублюва́ння, дубльо́ваний пере́клад або дубля́ж (від фр. double «подвійний») - вид перекладу фільмів, мультфільмів та серіалів, за якого відбувається повна заміна оригінального мовлення на іншу мову з метою транслювання фільму в країнах, у котрих не користуються мовою, якою говорять персонажі аудіовізуального твору.
Такі засоби реалізує системний виклик, який у POSIX-системах називають exec(). Як параметр для виклику exec() треба вказувати весь шлях до виконуваного файла програми, який буде завантажено у пам’ять.

У системах із підтримкою fork() для того щоб запускати на виконання програми, після виклику fork() потрібно негайно викликати exec() (це називають технологією fork exec).



Запуск застосування одним системним викликом

Другий підхід не розділяє дублювання адресного простору і завантаження коду – ці етапи тут поєднані в один. У даному разі системний виклик запускає на виконання задане застосування (зазвичай для цього йому потрібно вказати весь шлях до виконуваного файла цього застосування). Можна виділити два етапи виконання такого системного виклику:



  • виділення пам’яті під адресний простір нового процесу (жодна інформація при цьому з адресного простору предка не копіюється).

  • Завантаження виконуваного коду із зазначеного файла у виділений адресний простір.

Підхід із використанням fork() і exec() є гнучкішим, бо він дає змогу в разі необхідності обмежитись якимось одним етапом запуску застосування. Сучасні ОС переважно реалізують комбінацію першого та другого підходів.

3.4.3 Особливості завершення процесів


Розглянемо три варіанти завершення процесів.

Процес коректно завершується самостійно після виконання своєї задачі (для інтерактивних процесів це нерідко відбувається з ініціативи користувача, який, приміром, скористався відповідним пунктом меню).

Ініціатива (від лат. initium - почало, почин) - аксіоматичне позначення ознаки несиметричності взаємодії живого об'єкта з довільними об'єктами. Вказує на наявність у об'єкта здатності до самостійної дії, що змінює власний стан, всупереч природній інерції.
Для цього код процесу має виконати системний виклик завершення процесу. Такий виклик у POSIX-системах називають _exit(). Він може повернути процесу, що його викликав, або ОС код повернення, який дає змогу оцінити результат виконання процесу.

Процес аврійно завершується через помилку. Такий вихід може бути передбачений програмістом (під час обробки помилки приймається рішення про те, що далі продовжувативиконання програми неможливо), а може бути наслідком генерування переривання (ділення на нуль, доступу до захищеної області пам’яті тощо).

Причи́нність, також причи́нно-наслідко́вий зв’язо́к, причи́новість, причи́ново-наслідко́вий зв’язо́к, кауза́льність - (неформально, нестрого розуміючи) зв’язок між подією А («причиною») й іншою подією Б («наслідком»), яка необхідно настає за першою чи витікає з неї.

Процес завершується іншим процесом або ядром системи. Наприклад, перед закінчення работи ОС ядро припиняє виконання всіх процесів. Процес може припинити виконання іншого процесу за допомогою системного виклику, який у POSIX-системах називають kill().

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

3.4.4 Синхронне й асинхронне виконання процесів


Коли у системі з’являється новий процес,для старого процесу є два основних варіанти дій:

  • продовжити виконання паралельно з новим процесом – такий режим роботи називаютьасинхронним виконанням;

  • призупинити виконання доти, поки новий процес не буде завершений, - такий режим роботи називають синхронним виконанням. (У цьому разі використовують спеціальний системний виклик, який у POSIX-системах називають wait().

Вибір того чи іншого режиму залежить від конкретної задачі. Так, наприклад, веб-сервер може створювати процеси-нащадки для обробки запитів (якщо наявно набору нащадків недостатньо для такої обробки). У цьому разі обробка має бути асинхронною, бо відразу після створення нащадкуа предок має бути готовий до отримання наступного запиту. З іншого боку, компілятор С під час запуску процесів, що відповідають етапам компіляції, має чекати завершення кожного етапу, перш ніж перейти до наступного, - у такому разі використовують синхронну обробку.
Компілятор (англ. Compiler від англ. to compile - збирати в ціле) - комп'ютерна програма (або набір к. програм), що перетворює (компілює) вихідний код, написаний певною мовою програмування (мова джерела, англ. source language)

3.4.5 Створення і завершення потоків


Особливості створення потоків

Процедура створення потоків має свої особливості, пов’язані насамперед із тим, що потоки створюють у рамках вже існуючого адресного простору (конкретного процесу або, можливо, ядра системи).Існує кілька ситуацій, у яких може бути створений новий потік.

Якщо процес створюється за допомогою ссистемного виклику fork(), після розподілу адресного простору автоматично створюється потік усередині цього процесу (найчастіще це – головний потік застосування).

Можна створити потоки з коду користувача за допомогою відповідного системного виклику.

У багатьох ОС є спеціальні потоки, які створює ядро системи (код ядра теж може виконуватися в потоках). Під час створення потоку система повинна виконати такі дії.


  1. Створити структури даних, які відображають потік в ОС.

  2. Виділити пам’ять під стек потоку.

  3. Встановити лічильник команд процесора на початок коду, який буде виконуватися в потці; цей код називають процедурою або функцією потоку, покажчик нга таку процедуру передають у системний виклик створення потоку.

Слід відзначити, що під час створення потоків, на відміну від створення процесів немає необхідності виділяти нову пам’ять під адресний простір, тому зазвичай потоки створюються швидше і з меншими затратами ресурсів.

Особливості завершення потоків

Під час завершення потоків його ресурси вивільняються (насамперед, тек); ця операція звичайно виконується швидше, ніж завершення процесу. Потік може бути завершений, коли керування дійде до кінця процедури потоку; єтакож спеціальні системні виклики, призначені для дострокового припинення виконання потоків.

Як і процеси, потоки можуть виконуватися синхронно й асинхронно. Потік, створивший інший потік, може призупинити своє виконання до його завершення. Таке очікування називають приєднанням потоків (thread joining, очікує той, хто приєднує). Після завершення приєднаного потоку потік, який очікував його завершення, може дістати статус виконання. Під час створення потоку можна визначіти, чи підлягає він приєднанню (якщо потік не можна приєднати, його називають від’єднаним – detached). Якщо потік не є від’єднаним (nondetached або joinable, такий потік називатимемо приєднуваним), після завершення його обов’язково потрібно приєднувати, щоб унікнути витікання пам’яті.

1   ...   5   6   7   8   9   10   11   12   ...   24



  • 3.4.1 Створення процесів
  • 3.4.2 Керування адресним простором під час створення процесів
  • 3.4.3 Особливості завершення процесів
  • 3.4.4 Синхронне й асинхронне виконання процесів
  • 3.4.5 Створення і завершення потоків