69303

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

Лекция

Информатика, кибернетика и программирование

Створення процесів Базові принципи створення процесів Процеси можуть створюватися ядром системи під час її ініціалізації. Таке створення процесів однак є винятком а не правилом. Найчастіше процеси створюються під час виконання інших процесів.

Украинкский

2014-10-03

50.5 KB

12 чел.

Лекція № 7

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

План

  1.  Створення процесів
  2.  Ієрархія процесів
  3.  Керування адресним простором під час створення процесів
  4.  Особливості завершення процесів
  5.  Синхронне і асинхронне виконання процесів
  6.  Створення і завершення потоків

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

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

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

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

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

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

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

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

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

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

Ієрархія процесів

Після того як процес-предок створив процес-нащадок, потрібно забезпечити їхній взаємозв'язок. Є різні варіанти розв'язання цього завдання.

Можна організувати на рівні ОС однозначний зв'язок «предок-нащадок» так, щоб для кожного процесу завжди можна було визначити його предка. Наприклад, якщо процеси визначені унікальними ідентифікаторами, то для реалізації цього підходу в керуючому блоці процесу-нащадка повинен завжди зберігатися ідентифікатор процесу-предка або посилання на його керуючий блок.

Таким чином формується ієрархія (дерево) процесів, оскільки нащадки можуть у свою чергу створювати нових нащадків і т. ін. У таких системах звичайно існує спеціальний вихідний процес (в UNIX-системах його називають і пі t), з якого починається побудова дерева процесів (його запускає ядро системи). Якщо предок завершить виконання процесу перед своїм нащадком, функції предка бере на себе вихідний процес.

З іншого боку, зв'язок «предок-нащадок» можна не реалізовувати на рівні ОС. При цьому всі процеси виявляються рівноправними. Якщо зв'язок «предок-нащадок» для конкретної пари процесів все ж таки потрібен, за його підтримку відповідають самі процеси (процес-предок, наприклад, може сам зберегти свій ідентифікатор у структурі даних нащадка у разі його створення).

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

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

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

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

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

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

Коли створення нового процесу відбувається шляхом дублювання адресного простору предка, виникає потреба у спеціальних засобах для завантаження програмного коду в адресний простір процесу. Такі засоби реалізує системний виклик, який у POSIX-системах називають ехес(). Як параметр для виклику ехес() треба вказувати весь шлях до виконуваного файлу програми, який буде завантажено у пам'ять.

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

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

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

Можна виділити два етапи виконання такого системного виклику:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Під час створення потоку система повинна виконати такі дії.

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

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

Локальні змінні функції потоку розташовані у стеку потоку і доступні лише його коду, глобальні змінні доступні всім потокам.

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

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

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

Дамо деякі рекомендації щодо розробки багатопотокових програм.

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

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

Стек потоку очищається після виходу із функції потоку. Щоб цьому запобігти, не слід, наприклад, передавати нікуди покажчики на локальні змінні такої функції. Якщо необхідні змінні, значення яких мають зберігатися між викликами функції потоку, але при цьому вони не будуть доступні іншим потокам, треба скористатися локальною пам'яттю потоку (Thread Local Storage, TLS) — певним чином організованими даними, доступ до яких здійснюється за допомогою спеціальних функцій.

Питання для самоконтролю:

1. Поняття предок і нащадок.

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

3. Ієрархія процесів.

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

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

6. Варіанти завершення процесів.

7. Синхронне і асинхронне виконання процесів.

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

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


 

А также другие работы, которые могут Вас заинтересовать

65695. РОБОТА І РОЗРАХУНОК ЕЛЕМЕНТІВ КІЛЬЦЕВОГО ПЕРЕРІЗУ ЗІ СТАЛЕФІБРОБЕТОНУ ПРИ ПОВТОРНИХ НАВАНТАЖЕННЯХ 1.99 MB
  Так практично не досліджена робота елементів кільцевого перерізу зі сталефібробетону. Відомо що переважна більшість конструкцій піддається дії повторних навантажень це також стосується і елементів кільцевого перерізу. З огляду на наведе дослідження особливостей роботи...
65696. Математичні моделі оцінювання стратегічного потенціалу підприємства та прийняття рішень щодо його підвищення 329 KB
  Велика кількість існуючих моделей та методологічних підходів до визначення СПП дає можливість керівникам здійснити вибір засобів прийняття рішення щодо подальшого розвитку підприємства проте жоден з існуючих підходів не є достатньо ефективним як за критерієм повноти аналізованої інформації...
65697. УДОСКОНАЛЕННЯ ВИЗНАЧЕННЯ СТРАТЕГІЇ ПІДПРИЄМСТВА В УМОВАХ КРИЗИ НА ОСНОВІ ЗБАЛАНСОВАНОЇ СИСТЕМИ ПОКАЗНИКІВ 1.13 MB
  Сучасна фінансова, політична та економічна нестабільність в Україні, головними ознаками якої є високе боргове навантаження на вітчизняну економіку, негативні тенденції на грошово-кредитному ринку, ринку праці та у промисловості – провідній галузі вітчизняної економіки...
65698. Діяльність Служби безпеки ОУН(б) на території Волині та Полісся (1946 − 1951 рр.) 159.5 KB
  Обєктивне дослідження історії ОУНб є неможливим без скрупульозного аналізу діяльності її регіональних складових. Метою роботи є встановлення впливу СБ ОУНб на розвиток українського національно-визвольного руху на Волині та Поліссі в період поступового згасання збройної антирадянської боротьби.
65699. ПРАВОВЕ РЕГУЛЮВАННЯ ВІДШКОДУВАННЯ ПОДАТКУ НА ДОДАНУ ВАРТІСТЬ В УКРАЇНІ 216.5 KB
  Хоча останній і запровадив спрощення адміністративних процедур автоматичне відшкодування зменшення податкового навантаження стимулював інноваційно-інвестиційну діяльність урегулював адміністрування податків взаємовідносини з контролюючими органами окремі проблеми залишились актуальними.
65700. АДМІНІСТРАТИВНО-ПРАВОВИЙ СТАТУС ПРАЦІВНИКА ДЕРЖАВНОЇ КОНТРОЛЬНО-РЕВІЗІЙНОЇ СЛУЖБИ УКРАЇНИ 186.5 KB
  Працівники ДКРСУ виконують завдання держави спрямовані на забезпечення фінансової діяльності держави. З метою забезпечення успішної реалізації цих завдань суттєвого поліпшення потребують не лише форми і методи діяльності ДКРСУ але й якісний підхід до визначення адміністративно-правового статусу працівника ДКРСУ.
65701. СТАНОВЛЕННЯ І РОЗВИТОК ПРИВАТНОЇ ОСВІТИ НА ВОЛИНІ (ДРУГА ПОЛОВИНА ХІХ – ПОЧАТОК ХХ СТ.) 205 KB
  Робота виконана в Житомирському державному університеті імені Івана Франка Міністерство освіти і науки молоді та спорту України. В умовах розвитку України в європейському та світовому контекстах сучасних соціальноекономічних змін особливої ваги набувають процеси оптимізації та вдосконалення...
65702. ОСОБЛИВОСТІ ЦИВІЛЬНО-ПРАВОВОГО СТАТУСУ ГОСПОДАРСЬКОГО ТОВАРИСТВА ОДНІЄЇ ОСОБИ (НА ПРИКЛАДІ ЗАКОНОДАВСТВА УКРАЇНИ ТА ФРН) 157.5 KB
  У теперішній час формування інституту господарського товариства однієї особи у рамках національного законодавства України нерозривно повязане із розвитком та вдосконаленням його у світовій практиці враховуючи орієнтацію національної економіки на глобалізацію...
65703. ГРОШОВО-КРЕДИТНЕ РЕГУЛЮВАННЯ ТА ЙОГО РОЛЬ У ЗАБЕЗПЕЧЕННІ РІВНОВАГИ ДОХОДУ ТА ПЛАТІЖНОГО БАЛАНСУ ДЕРЖАВИ 362.5 KB
  Фінансові системи країн ЦСЄ та колишнього Радянського Союзу істотно відрізняються обраними режимами грошово-кредитної політики та рівнем монетизації, проте динаміка монетарних показників залишається як універсальним індикатором відхилень від рівноваги доходу і платіжного балансу...