ТОП 10:

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



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

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

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

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

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

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

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

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

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

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

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

♦ Процес

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

 

 

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

♦ стек користувача (стек потоку, доступний у користувацькому режимі). Схема розташування в пам'яті образів процесу і його потоків зображена на

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

 

 

3.5. Перемикання контексту й обробка переривань

 







Последнее изменение этой страницы: 2017-02-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.231.21.83 (0.009 с.)