69303

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

Лекция

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

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

Украинкский

2014-10-03

50.5 KB

21 чел.

Лекція № 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. Особливості завершення потоків.


 

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

78993. Эстетические аспекты научной деятельности, их функция и роль в формировании идеала науки. Наука и искусство в их соотношении 19.76 KB
  Наука и искусство в их соотношении. В современной философской литературе понятия эстетики отнесены главным образом к искусству эстетическое содержание научного творчества и других видов человеческой деятельности не связанных с искусством практически не рассматривается. В 1931 голу была опубликована книга моего отца драматурга и искусствоведа В. Наука сближается с искусством то есть с эстетикой и высшее эстетическое значение имеет простая и ясная картина мира.
78994. Космологический дискурс научного знания. Наука как часть ноосферы. Проблемы современной экологической этики 23.12 KB
  Понятие экологической этики Подъем этики окружающей среды был в первый День Земли в 1970 году когда сторонники защиты окружающей среды вынудили философов которые работали в области окружающей среды сгруппироваться чтобы сделать некоторые замечания об этике окружающей среды. Дискуссия началась в 1974 когда австралиец именуемый John Pssmore опубликовал книгу пол названием Ответственность человека за природу: экологические проблемы и западные традиции в которой он аргументировал точку зрения что сохранение окружающей среды и ее...
78995. Наука в контексте традиционалистского и техногенного цивилизационного развития. Футурологические аспекты научного знания 16.91 KB
  Понятие цивилизации впервые возникло в 18 веке во Франции для обозначения общества в котором господствует свобода равенство и братство. Традиционные цивилизации. Техногенные цивилизации. Особенности техногенной цивилизации: Ориентация на совершенствование техники производства.
78996. Научное знание в контексте глобальных проблем. Особенности развития науки в глобализующемся мире. Роль науки в преодолении современного кризиса 14.1 KB
  К глобальным проблемам современности относят экологические демографические проблемы войны и мира проблемы кризиса культуры проблемы терроризма. Это включает в себя медикобиологические проблемы указывающие риски для здоровья современного человека сокращение ареалов нищеты и бедности комплекс минеральносырьевых проблем проблемы энергетического кризиса проблемы прекращения гонки вооружения и предотвращения использования средств массового уничтожения. Глобальные экологические проблемы требуют от ученых и предпринимателей повышения...
78997. Философские проблемы науки, их сущность, специфика и типология. Историко-философские, онтологические, логико-методологические, аксиологические аспекты науки в их соотношении 18.15 KB
  Философские проблемы науки их сущность специфика и типология. Историкофилософские онтологические логикометодологические аксиологические аспекты науки в их соотношении. Предметом философии науки являются общие закономерности и тенденции научного познания как особой деятельности по производству научных знаний взятых в их историческом развитии и рассматриваемых в исторически изменяющемся социокультурном контексте. Философия науки иногда отождествляется с ближними областями науковедения наукометрии социологии науки что неправомерно.
78998. Проблема генезиса научного знания и плюрализма историко-научных концепций. Интернализм и экстернализм в анализе факторов развития науки 15.95 KB
  Интернализм и экстернализм в анализе факторов развития науки. Средоточием научных знаний является философия и ее предмет неотделим от философии науки и от естественных наук вообще. В истории формирования и развития науки можно выделить две стадии которые соответствуют двум различным методам построения знаний и двум формам прогнозирования результатов деятельности. создавших принципиально новое по сравнению с античностью и средневековьем понимание мира и началась классическая наука ознаменовавшая генезис науки как таковой как целостного...
78999. Позитивистская традиция философии науки: эволюция основных подходов и концепций. Критический рационализм и перспективы его развития 17.51 KB
  Позитивистская традиция философии науки: эволюция основных подходов и концепций. и был ориентирован на развитие науки. Позитивисты видели роль философии в развитии науки исследования закономерностей языка науки. Позитивизм наиболее широко распространенное течение западной философии второй половины XIXXX веков утверждающее что источником подлинного положительного позитивного знания могут быть лишь отдельные конкретные эмпирические науки и их синтетические объединения а философия как особая наука не может претендовать на...
79000. Философские аспекты обоснования научного знания. Проблемы формализации и математизации научных теорий: история и современность 39.5 KB
  Научное знание выраженное в рамках соответствующей теории позволяет человеку: предвидеть наступление соответствующих событий совершаемых в природе или обществе и тем самым предсказать ход их дальнейшего развития и изменить эту объективную действительность посредством человеческой деятельности в соответствии с полученными научными знаниями и тем самым подчинить эту действительность...
79001. Типология научных проблем, их философско-методологический анализ. Генезис научной проблемы и пути её разрешения 15.5 KB
  Проблема форма теоретического знания содержанием которой является то что еще не познано человеком но что нужно познать. Проблема это процесс включающий 2 момента постановку и решение. Однако этим процедурам всегда предшествует вопрос или проблема. Для успешного решения научной проблемы Поппер формулирует 2 основных условия: Ясное четкое формулирование Критическое исследование различных ее решений Тем самым научная проблема выражается в наличии противоречивой ситуации которая требует разрешения.