Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Розділ З

Читайте также:
  1. IV. РОЗПОДІЛ НАВЧАЛЬНОГО ЧАСУ ЗА РОЗДІЛАМИ, ТЕМАМИ ТА ВИДАМИ НАВЧАЛЬНИХ ЗАНЯТЬ
  2. IV. РОЗПОДІЛ НАВЧАЛЬНОГО ЧАСУ ЗА РОЗДІЛАМИ, ТЕМАМИ ТА ВИДАМИ НАВЧАЛЬНИХ ЗАНЯТЬ.
  3. Б) коли складові частки чітко визначені і відомо, хто із співавторів створив ту чи іншу частину — роздільне співавторство.
  4. Бойові завдання і бойові порядок механізованих підрозділів у наступі.
  5. Взаємодія слідчого з оперативними підрозділами
  6. Взаємозв'язки структури (банку) з іншими організаційними підрозділами
  7. ВИРОБНИЧИЙ ПІДРОЗДІЛ З ВИРОБНИЦТВА ПРОДУКЦІЇ ТВАРИННЦТВА
  8. Висновки до 2 розділу
  9. Висновки до другого розділу
  10. Висновки до першого розділу

10-литровую кастрюлю на 3/4 заполнить измельченной овсяной соломой, залить холодной водой, после закипания варить на медленном огне 30 мин., настоять 1 час. Процедить и добавить в ванну. Продолжительность процедуры 15-20 минут. Такие ванны полезны также при заболеваниях мочевого пузыря и почек.

 

Розділ З

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

 

¨ Означення процесу та потоку

¨ Реалізація та використання моделі процесів і багатопотоковості

v

¨ Подання процесів і потоків в операційній системі

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

¨ Керування процесами та потоками в UNIX

¨ Керування процесами та потоками у Windows ХР

 

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

У викладі орієнтуватимемося на сучасні ОС, для яких потоки є фундамен­тальними абстракціями системи нарівні з процесами.

 

3.1. Базові поняття процесів і потоків

 

3.1.1. Процеси і потоки в сучасних ОС

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

Дамо попереднє означення процесу.

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

 

 

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

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

¨ ресурси, необхідні для послідовного виконання програмного коду (передусім процесорний час);

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

Ці групи ресурсів визначають дві складові частини процесу:

¨ послідовність виконуваних команд процесора;

¨ набір адрес пам’яті (адресний простір), у якому розташовані ці команди і дані для них.

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

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

Тепер можна дати ще одне означення процесу.

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

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

На відміну від процесів потоки розпоряджаються загальною пам'яттю. Дані потоку не захищені від доступу до них інших потоків за умови, що всі вони вико­нуються в адресному просторі одного процесу. Це надає додаткові можливості для розробки застосувань, але ускладнює програмування.

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

Адресний простір процесу не завжди відповідає адресам оперативної пам'яті. Наприклад, у нього можуть відображатися файли або регістри контролерів введення-виведення, тому запис за певною адресою в цьому просторі призведе до за­пису у файл або до виконання операції введення-виведення. Таку технологію на­зивають відображенням у пам'ять (memory mapping).

 

3.1.2. Моделі процесів і потоків

Максимально можлива кількість процесів (захищених адресних просторів) і потоків, які в них виконуються, може варіюватися в різних системах.

¨ В однозадачних системах є тільки один адресний простір, у якому в кожен мо­мент часу може виконуватися один потік.

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

¨ У системах, подібних до традиційних версій UNIX, допускається наявність багатьох процесів, але в рамках адресного простору процесу виконується тіль­ки один потік. Це традиційна однопотокова модель процесів. Поняття потоку в даній моделі не застосовують, а використовують терміни «перемикання між процесами», «планування виконання процесів», «послідовність команд про­цесу» тощо (тут під процесом розуміють його єдиний потік).

¨ У більшості сучасних ОС (таких, як лінія Windows ХР, сучасні версії UNIX) може бути багато процесів, а в адресному просторі кожного процесу — багато потоків. Ці системи підтримують багатопотоковість або реалізують модель по­токів. Процес у такій системі називають багатопотоковим прогресом.

Надалі для позначення послідовності виконуваних команд вживатимемо термін

«потік», за винятком ситуацій, коли обговорюватиметься реалізація моделі процесів.

 

3.1.3. Складові елементи процесів і потоків

До елементів процесу належать:

¨ захищений адресний простір;

¨ дані, спільні для всього процесу (ці дані можуть спільно використовувати всі його потоки);

¨ інформація про використання ресурсів (відкриті файли, мережні з’єднан­ня тощо);

¨ інформація про потоки процесу.

Потік містить такі елементи:

¨ стан процесора (набір поточних даних із його регістрів), зокрема лічильник поточної інструкції процесора;

¨ стек потоку (ділянка пам'яті, де перебувають локальні змінні потоку й адреси повернення функцій, що викликані у його коді).

 

3.2. Багатопотоковість та її реалізація

 

3.2.1. Поняття паралелізму

Використання декількох потоків у застосуванні означає внесення в нього парале­лізму (concurrency). Паралелізм ~~ це одночасне (з погляду прикладного програ­міста) виконання дій різними фрагментами коду застосування. Така одночасність може бути реалізована на одному процесорі шляхом перемикання задач (випадок псевдопаралелізму), а може ґрунтуватися на паралельному виконанні коду на декількох процесорах (випадок справжнього паралелізму). Потоки абстрагують цю відмінність, даючи можливість розробляти застосування, які в однопроцесор- них системах використовують псевдопаралелізм, а при доданні процесорів - справжній паралелізм (такі застосування масштабуються зі збільшенням кілько­сті процесорів).

 

3.2.2. Види паралелізму

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

¨ паралелізм багатопроцесорних систем;

¨ паралелізм операцій введення-виведення;

¨ паралелізм взаємодії з користувачем;

¨ паралелізм розподілених систем.

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

 

Паралелізм операцій введення-виведення

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

Багатопотокове застосування може реалізувати цей вид паралелізму через створення нових потоків, які виконуватимуться, коли поточний потік очікує опе­рації введення-виведення. Так реалізується асинхронне введення-виведення, ко­ли застосування продовжує своє виконання, не чекаючи на завершення операцій введення-виведення. У розділі 15 буде розглянуто організацію такого введен­ня-виведення.

 

Паралелізм взаємодії з користувачем

Під час інтерактивного сеансу роботи користувач може виконувати різні дії із застосуванням (і очікувати негайної реакції на них) до завершення обробки попе­редніх дій. Наприклад, після запуску команди «друкування документа» він може негайно продовжити введення тексту, не чекаючи завершення друкування.

Щоб розв’язати це завдання, можна виділити окремі потоки для безпосеред­ньої взаємодії із користувачем (наприклад, один потік може очікувати введення з клавіатури, інший - від миші, додаткові потоки — відображати інтерфейс користувача). Основні задачі застосування (розрахунки, взаємодія з базою даних тощо) у цей час виконуватимуть інші потоки.

 

Паралелізм розподілених застосувань

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

 

♦ '

3.2.3. Переваги і недоліки багатопотоковості

Назвемо проблеми, які можуть бути вирішені за допомогою потоків.

¨ Використання потоків дає змогу реалізувати різні види паралелізму і дозволяє застосуванню масштабуватися із ростом кількості процесорів.

j

¨ Для підтримки потоків потрібно менше ресурсів, ніж для підтримки процесів (наприклад, немає необхідності виділяти для потоків адресний простір).

¨ Для обміну даними між потоками може бути використана спільна пам’ять (адресний простір їхнього процесу). Це ефективніше, ніж застосовувати засо­би міжпроцесової взаємодії.

Незважаючи на перелічені переваги, використання потоків не є універсальним засобом розв'язання проблем паралелізму, і пов’язане з деякими труднощами.

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

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

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

 

3.2.4. Способи реалізації моделі потоків

Перш ніж розглянути основні підходи до реалізації моделі потоків, дамо означен­ня важливих понять потоку користувача і потоку ядра.

Потік користувача — це послідовність виконання команд в адресному просторі процесу. Ядро ОС не має інформації про такі потоки, вся робота з ними викону­ється в режимі користувача. Засоби підтримки потоків користувача надають спе­ціальні системні бібліотеки; вони доступні для прикладних програмістів у вигляді бібліотечних функцій. Бібліотеки підтримки потоків у наш час звичайно реалізу­ють набір функцій, визначений стандартом POSIX (відповідний розділ стандарту називають POSIX.1b); тут прийнято говорити про підтримку потоків POSIX.

Потік ядра — це послідовність виконання команд в адресному просторі ядра. Потоками ядра управляє ОС, перемикання ними можливе тільки у привілейова­ному режимі. Є потоки ядра, які відповідають потокам користувача, і потоки, що не мають такої відповідності.

Співвідношення між двома видами потоків визначає реалізацію моделі пото­ків. Є кілька варіантів такої реалізації (схем багатопотоковості); розглянемо най­важливіші з них (рис. 3.1).

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

¨ Схема М:1 не дає змоги скористатися багатопроцесорними архітектурами, ос­кільки визначити, який саме код виконуватиметься на кожному із процесорів, може тільки ядро ОС. У результаті всі потоки одного процесу завжди викону­ватимуться на одному процесорі.

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

Схема багатопотоковості 1:1 ставить у відповідність кожному потоку користу­вача один потік ядра. У цьому разі планування і перемикання контексту зачіпа­ють лише потоки ядра, у режимі користувача ці функції не реалізовані. Оскільки ядро ОС має інформацію про потоки, ця схема вільна від недоліків попередньої (різні потоки можуть виконуватися на різних процесорах, а при зупиненні одного потоку інші продовжують роботу). Вона проста і надійна в реалізації і сьогодні є найпоширенішою. Хоча схема передбачає, що під час керування потоками треба постійно перемикатися між режимами процесора, на практиці втрата продуктив­ності внаслідок цього виявляється незначною.

Схема багатопотоковості M:N. У цій схемі присутні як потоки ядра, так і по­токи користувача, які відображаються на потоки ядра так, що один потік ядра мо­же відповідати декільком потокам користувача. Число потоків ядра може бути змінене програмістом для досягнення максимальної продуктивності. Розподіл по­токів користувача по потоках ядра виконується в режимі користувача, плануван­ня потоків ядра — у режимі ядра. Схема є складною в реалізації і сьогодні здає свої позиції схемі 1:1.

 

3.3. Стани процесів і потоків

Для потоку дозволені такі стани:

¨ створення (new) — потік перебуває у процесі створення;

¨ виконання (running) — інструкції потоку виконує процесор (у конкретний мо­мент часу на одному процесорі тільки один потік може бути в такому стані);

¨ очікування (waiting) — потік очікує деякої події (наприклад, завершення опе­рації введення-виведення); такий стан називають також заблокованим, а по­тік — припиненим;

¨ готовність (ready) — потік очікує, що планувальник перемкне процесор на нього, при цьому він має всі необхідні йому ресурси, крім процесорного часу;

¨ завершення (terminated) — потік завершив виконання (якщо при цьому його ресурси не були вилучені з системи, він переходить у додатковий стан - стан зомбі).

Можливі переходи між станами потоку зображені на рис. 3.2.

 

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

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

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

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

 

3.4. Опис процесів і потоків

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

Для керування розподілом ресурсів ОС повинна підтримувати структури да­них, які містять інформацію, що описує процеси, потоки і ресурси. До таких структур даних належать:

¨ таблиці розподілу ресурсів: таблиці пам’яті, таблиці введення-виведення, таб­лиці файлів тощо;

¨ таблиці процесів і таблиці потоків, де міститься інформація про процеси і по­токи, присутні у системі в конкретний момент.

3.4.1. Керуючі блоки процесів і потоків

Інформацію про процеси і потоки в системі зберігають у спеціальних структурах даних, які називають керуючими блоками процесів і керуючими блоками потоків. Щ структури дуже важливі для роботи ОС, оскільки на підставі їхньої інформації система здійснює керування процесами і потоками.

Керуючий блок потоку (Thread Control Block, ТСВ) відповідає активному по­току, тобто тому, який перебуває у стані готовності, очікування або виконання. Цей блок може містити таку інформацію:

¨ ідентифікаційні дані потоку (зазвичай його унікальний ідентифікатор);

¨ стан процесора потоку: користувацькі регістри процесора, лічильник інструк­цій, покажчик на стек;

¨ інформацію для планування потоків.

Таблиця потоків — це зв’язний список або масив керуючих блоків потоку. Во­на розташована в захищеній області пам’яті ОС.

Керуючий блок процесу (Process Control Block, РСВ) відповідає процесу, що присутній у системі. Такий блок може містити:

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

¨ інформацію про потоки, які виконуються в адресному просторі процесу (на­приклад, покажчики на їхні керуючі блоки);

¨ інформацію, на основі якої можна визначити права процесу на використання різних ресурсів (наприклад, ідентифікатор користувача, який створив процес);

¨ інформацію з розподілу адресного простору процесу;

¨ інформацію про ресурси введення-виведення та файли, які використовує процес.

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

Таблицю процесів організовують аналогічно до таблиці потоків. Як елементи в ній зберігатимуться керуючі блоки процесів.

 

3.4.2. Образи процесу і потоку

Сукупність інформації, що відображає процес у пам’яті, називають образом процесу (process image), а всю інформацію про потік — образом потоку (thread image). До образу процесу належать:

¨ керуючий блок процесу;

¨ програмний код користувача;

¨ дані користувача (глобальні дані програми, загальні для всіх потоків);

¨ інформація образів потоків процесу.

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

До образу потоку належать:

¨ керуючий блок потоку;

¨ стек ядра (стек потоку, який використовується під час виконання коду потоку в режимі ядра);

¨ стек користувача (стек потоку, доступний у користувацькому режимі).

Схема розташування в пам'яті образів процесу і його потоків зображена на рис. 3.3. Усі потоки конкретного процесу можуть користуватися загальною ін­формацією його образу.

 

 

1.5.

2.5.


Дата добавления: 2014-12-20; просмотров: 15 | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2021 год. (0.073 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав