Добавил:
twitch.tv Заведующий методическим кабинетом, преподаватель на кафедре компьютерного спорта и прикладных компьютерных технологий. Образование - Магистр Спорта. Суета... Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
29.04.2022
Размер:
11.63 Mб
Скачать

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

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

Цей підхід було використано на ранніх стадіях розвитку підтримки багато­процесорних архітектур в ОС. Наведемо його недоліки.

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

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

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

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

Особливості SMP-систем наведено нижче.

  • Усі процесори системи доступні з коду ОС. Планувальник ОС може організу­вати виконання її коду або коду потоку користувача на будь-якому процесорі.

  • Для всіх процесорів доступні спільні дані, при цьому когерентність кеша під­тримується апаратно.

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

  • Спроба повторного читання одних і тих самих даних процесором CPUA може дати інший результат внаслідок того, що ці дані були змінені процесором CPUB.

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

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

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

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

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