Відмінності між версіями «Тема 11. Багатопроцесорні системи.»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
Рядок 44: Рядок 44:
 
== '''Особливості SMP-систем'''==
 
== '''Особливості SMP-систем'''==
  
•Усі   процесори системи доступні з коду           ОС .   Планувальник   О С  може   організу­
+
•Усі процесори системи доступні з коду ОС. Планувальник ОС може організу­вати виконання її коду або коду потоку користувача на будь-якому процесорі.
    вати виконання її коду або коду потоку користувача на будь-якому процесорі .  
+
•Для всіх процесорів доступні спільні дані, при цьому когерентність кеша під­тримується апаратно.
 +
•Потоки користувача і потоки ядра можуть виконуватися паралельно на різних процесорах. Під час виконання потік може мігрувати із процесора на процесор.
 +
•Спроба повторного читання одних і тих самих даних процесором CPUA може дати інший результат внаслідок того, що ці дані були змінені процесором CPUB.
 +
•У системі можливе вирівнювання навантаження між процесорами, для чого планувальник ОС може передавати новий потік для виконання найменш за­вантаженому процесору.  
  
•    Д л я  всіх  процесорів  доступні      спільні дані ,  при  цьому  когерентність      кеша під­
+
Додавання нового процесора у систему автоматично робить його доступним для виконання коду ОС або процесів користувача. При цьому  навантаження на інші процесори автоматично знижується.  
    тримується      апаратно .  
+
  
•    Потоки  користувача і  потоки ядра  можуть  виконуватися              паралельно  на різних
+
Для того, щоб скористатися перевагами багатопроцесорної архітектури, код ОС має бути багатопотоковим і реентерабельним. При цьому   необхідна підтрим­ка синхронізації на рівні ядра.
    процесорах Під час виконання потік може мігрувати із процесора на процесор .  
+
Найпримітивнішим підходом до забезпечення синхронізації є велике блоку­вання ядра (big kernellock). При цьому кожен процесор перед   виконанням будь-якого коду ОС займає глобальний м'ютекс. Цей підхід неефективний, оскільки в конкретний момент часу код ОС може бути виконаний тільки на одному процесорі.  
  
•    Спроба  повторного  читання        одних    і  тих  самих  даних    процесором      CPUA  може
+
Сучасні ОС реалізують гнучкіший підхід, у якому код ядра розбивають на не­залежні критичні ділянки, із кожною з яких пов'язують окремий м'ютекс.
    дати  інший  результат  внаслідок того,  що  ці  дані    були  змінені  процесором      CPUB.
+
 
+
•    У  системі    можлив е    вирівнювання        навантаження        між  процесорами ,      для  чого
+
    планувальник        О С  мож е  передавати    новий    потік  для  виконання      найменш      за­
+
    вантаженому        процесору .
+
 
+
+    Додавання      нового    процесора      у  систему    автоматичн о    робить    його  доступним
+
    для    виконання      коду    О С  або  процесів  користувача .    Пр и  цьому  навантаження
+
    на  інші  процесори      автоматично  знижується .
+
 
+
    Д л я  того  що б  скористатися      перевагами      багатопроцесорної        архітектури ,    код
+
ОС   має  бути  багатопотоковим  і      реентерабельним .      Пр и  цьому  необхідна  підтрим­
+
ка  синхронізації      на  рівні  ядра .
+
    Найпримітивнішим            підходом  до    забезпечення      синхронізації      є  велике    блоку­
+
вання  ядр а  (big kernel  lock) .  Пр и  цьому  кожен  процесор    перед  виконання м  будь-
+
яког о    коду  О С  займа є  глобальний      м'ютекс .    Цей  підхід  неефективний ,      оскільки
+
в конкретний момент часу код ОС може бути виконаний тільки на одному процесорі .
+
    Сучасні    О С  реалізують   гнучкіший   підхід ,   у якому     код ядр а розбивають   на не­
+
залежні    критичні   ділянки ,   із   кожною   з   яких   пов'язують     окремий     м'ютекс .
+

Версія за 20:06, 22 квітня 2013

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

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

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

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

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

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

Припустимо, що в операції можна виділити п'ять мікрооперацій, кожна з яких виконується за одну одиницю часу. Якщо є один неподільний послідовний пристрій, то 100 пар аргументів він опрацює за 500 одиниць, якщо кожну мікрооперацію виконати в окремому конвеєрному пристрої, то на п'ятій одиниці часу на різній стадії обробки такого пристрою будуть знаходиться перші п'ять пар аргументів, а весь набір зі ста пар буде опрацьований за 5+99=104 одиниці часу — прискорення в порівнянні з послідовним пристроєм майже в п'ять разів (відповідно кількості ступенів конвеєра).

Усі сучасні мікропроцесори, Pentium П, Ш, IV, Athlon, PA-8200, MIPS R10000 або Power2 SuperChip використовують той або інший метод паралельного опрацювання, хоча ці ідеї з'явилися досить давно і були реалізовані у деяких комп'ютерах у 60-70 роках. Після належного відпрацьовування технології і здешевлення виробництва ідеї паралельного опрацювання даних почали використовуватися в комп'ютерах середнього класу, а сьогодні все це в повному обсязі втілюється в робочих станціях і персональних комп'ютерах.

Сьогодні розвиток високопродуктивної обчислювальної техніки проводиться у чотирьох напрямках: Векторно-конвейєрні комп'ютери. Особливістю таких машин є конвеєрні функціональні пристрої, які містять набір векторних інструкцій у системі команд. На відміну від традиційного підходу, векторні команди оперують цілими масивами незалежних даних, що дозволяє ефективно завантажувати доступні конвеєри. Типовим представником даного напрямку є лінія векторно-конвеєрних комп'ютерів CRAY компанії Cray Research. Масивно-паралельні комп'ютери з розподіленою пам'яттю. Ідея побудови комп'ютерів цього класу досить проста, реалізується з серійних мікропроцесорів з локальною пам'яттю, об'єднаних за допомогою комунікаційного середовища, наприклад, мережі. Серед переваг виділяють простий підбір оптимальної конфігурації, якщо потрібна висока продуктивність — додаються процесори, якщо ні — вилучаються. Недоліком є мала швидкість міжпроцесорної взаємодія відносно локального опрацювання даних самими процесорами. Написати ефективну програму для таких комп'ютерів досить складно, а для деяких алгоритмів іноді просто неможливо.

До даного класу належать комп'ютери Intel Paragon, IBM SP1, Parsytec, до певної міри IBM SP2 і CRAY T3D/T3E, хоча в цих комп'ютерах вплив зазначеного недоліку намагаються зробити мінімальним. До цього ж класу можна віднести і мережі комп'ютерів, що досить часто розглядають як дешеву альтернативу дорогим суперкомп'ютерам.

Паралельні комп'ютери з загальною пам'яттю. Вся оперативна пам'ять таких комп'ютерів розподіляється між кількома однаковими процесорами. Це знімає проблеми попереднього класу, але додає нові -число процесорів, що мають доступ до загальної пам'яті з технічних причинах не можна зробити великим. До даного напрямку входять багато сучасних багатопроцесорних SMP-комп'ютерів, сервер HP Т600 або Sun Ultra Enterprise 5000. Останній напрямок не є самостійним, а скоріше являє собою комбінації попередніх трьох. З кількох процесорів, традиційних або векторно-конвеєрних і загальної для них пам'яті формується обчислювальний вузол. Якщо обчислювальної потужності отриманого вузла не досить, то об'єднують кілька вузлів високошвидкісними каналами. Подібну архітектуру називають кластерною, по такому принципу побудовані CRAY SV1, HP Exemplar, Sun StarFire, NEC SX-5, останні моделі IBM SP2 і інші. Саме цей напрямок на сьогодні є найбільш перспективним.

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

              Підтримка багатопроцесорності в операційних системах

Асиметрична багатопроцесорність

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

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

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

Симетрична багатопроцесорність

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


Особливості SMP-систем

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

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

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

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