Головна

Процеси і треди

  1. Автоматизація ділових процесів. Основні ділові процеси. Опис ділових процесів. Методика IDEF0.
  2. Адіабатний і політропний процеси.
  3. Антропогенні природні процеси в геосистемах
  4. Базові процеси сприйняття. Зміна умов стимуляції як умова сприйняття. Ефект Ganzfeld. Стабілізований образ.
  5. Базові процеси сприйняття. Поняття латерального гальмування. Нейронні механізми сприйняття контуру і контрасту з прикладами.
  6. Базові процеси сприйняття. Поняття просторової частоти. Основні положення Фур'є-аналізу зорового сприйняття.
  7. Квиток 39. Основні процеси і механізми пам'яті.

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

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

1 TSS (Task state segment) - сегмент стану задачі.

2 Thread - потік, нитка.


мимі. При цьому саме ОС бере на себе роль арбітра в конкуренції між процесами з приводу ресурсів.

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

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


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

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

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

Як ми вже знаємо, все треди мають один і той же віртуальний адресний простір свого процесу. Це означає, що вони поділяють одні й ті ж глобальні змінні. Оскільки кожен тред може мати доступ до кожного віртуального адресою, один тред може використовувати стек іншого тред. Між потоками немає повного захисту, так як це, по-перше, неможливо, а по-друге, не потрібно. Всі потоки одного процесу завжди вирішують загальну задачу одного користувача, і механізм потоків використовується тут для більш швидкого вирішення завдання шляхом її розпаралелювання. При цьому програмісту дуже важливо отримати в своє розпорядження зручні засоби організації взаємодії частин однієї програми. Повторимо, що крім поділу адресного простору, все треди поділяють також набір відкритих файлів, використовують загальні пристрої, виділені процесу, мають одні й ті ж набори сигналів, семафори і т. П. А що у тредов буде їх власним? Власними є програмний лічильник, стек, робочі регістри процесора, потоки-нащадки, стан.

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


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

Для того щоб можна було ефективно організувати паралельне виконання розглянутих сутностей (процесів і тредов), в архітектуру сучасних процесорів включена можливість працювати зі спеціальною інформаційною структурою, яка описує ту чи іншу сутність. Для цього вже на рівні архітектури мікропроцесора використовується поняття «завдання» (task). Воно як би об'єднує в собі звичайний і «легкий» процеси. Це поняття і підтримувана для нього на рівні апаратури інформаційна структура дозволяють надалі при розробці операційної системи побудувати відповідні дескриптори як для процесу, так і для тред. Відрізнятися ці дескриптори будуть перш за все тим, що дескриптор тред може зберігати тільки контекст призупиненого обчислювального процесу, тоді як дескриптор процесу (process) повинен вже містити поля, що описують той чи інший спосіб ресурси, виділені цього процесу. Іншими словами, той же task state segment (сегмент стану задачі), докладно розглянутий в розділі «Адресація в 32-розрядних мікропроцесорах 180x86 при роботі в захищеному режимі» глави 3, використовується як основа для дескриптора процесу. Кожен тред (в разі використання так званої «плоскою» моделі пам'яті - див. «Підтримка сторінкового способу організації віртуальної пам'яті», глава 3 - може бути оформлений у вигляді самостійного сегмента, що призводить до того, щопроста (НЕ багатопотокова) програма буде мати всього один сегмент коду в віртуальному адресному просторі.

На завершення можна навести кілька порад з використання потоків при створенні додатків, запозичених з роботи [55].

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

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

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


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

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

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

6. Всякий раз, коли який-небудь з ваших потоків намагається скористатися
 загальним ресурсом обчислювального процесу, якому він належить, ви
 зобов'язані тим чи іншим чином легалізувати і захистити свою діяльність.
 Хорошим засобом для цього є критичні секції, семафори і оче
 реді повідомлень. Якщо ви протестували свій додаток і не виявили
 помилок синхронізації, то це ще не означає, що їх там немає. Користувач
 може створити найбільш непередбачувані ситуації. Це дуже відповідальний
 момент в розробці багатопоточних додатків.

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



Реалізація поняття послідовного процесу в ОС | переривання

ЧАСТИНА I Операційні | Системи і середовища | Поняття операційного середовища | Поняття обчислювального процесу і ресурсу | Діаграма станів процесу | Основні види ресурсів | Класифікація операційних систем |

© um.co.ua - учбові матеріали та реферати