Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Лекція №28 Тема 11 Багатопроцесорні розподілені системи Багатопроцесорні та розподілені системи Сьогодні є

Скачати 316.26 Kb.

Лекція №28 Тема 11 Багатопроцесорні розподілені системи Багатопроцесорні та розподілені системи Сьогодні є




Скачати 316.26 Kb.
Дата конвертації08.01.2020
Розмір316.26 Kb.
ТипЛекція

Лекція № 28

Тема 11.1. Багатопроцесорні розподілені системи

Багатопроцесорні та розподілені системи


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

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

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

  1. Багатопроцесорні системи

Тут зупинимося на основних типах багатопроцесорних систем і особливостях їх­ньої підтримки в сучасних ОС на прикладі Ті них і \Vincio\vs ХР.

  1. Типи багатопроцесорних систем

Залежно від особливостей апаратної реалізації, багатопроцесорні системи бува­ють такі:

4 з однорідним доступом до пам’яті або UMA-системи (Uniform Memory Access), у яких доступ до будь-якої адреси у пам’яті здійснюється з однаковою швидкістю; 4 з неоднорідним доступом до пам’яті або NUMA-системи (Non-Uniform Mem­ory Access), для яких це не виконується.

Однорідний доступ до пам’яті

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

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

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

У цьому разі, однак, виникає інша проблема, пов’язана із необхідністю під­тримки когерентності кеша (cache coherence) — погодженості даних, які перебу­вають у кешах різних процесорів.

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

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

Незважаючи на ці проблеми, UMA-архітектуру із когерентним кешем широко використовують на практиці.

Неоднорідний доступ до пам’яті

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

В NUMA-архітектурі із кожним процесором пов’язують його власну локальну пам’ять. Єдиний для всіх процесорів адресний простір при цьому збережено — кожен процесор у системі може одержати доступ до локальної пам’яті будь-якого іншого процесора, але доступ до такої віддаленої пам’яті відбувається повільніше, ніж до локальної.

Фактично NUMA-система складається з набору вузлів (nodes), кожен із яких містить один або кілька процесорів та мікросхеми їхньої локальної пам’яті (а та­кож, можливо, засоби введення-виведення). Вузли з’єднані між собою спільною шиною. Очевидно, що доступ до локальної пам’яті не вимагає звертання до шини, внаслідок чого навантаження на неї значно знижується. Крім того, звичайно орга­нізовують когерентний кеш для операцій доступу до цієї шини (системи із таким кешем називають CC-NUMA Cache-Coherent NUMA).

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Підтримка NUMA-архітектур

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

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

  1. Продуктивність багатопроцесорних систем

Масштабування навантаження

Під масштабуванням навантаження (workload scalability) у SMP-системах розу­міють вплив додавання нових процесорів на продуктивність системи. У реальних умовах воно залежить від багатьох факторів.

- У разі збільшення кількості процесорів зростає навантаження на системну шину та пам’ять і, як наслідок, ціна промаху кеша.

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

- Що більше процесорів, то більше зусиль потрібно докладати для забезпечен­ня когерентності кеша.

- Кількість блокувань у системі зростає із ростом кількості процесорів.

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

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

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

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

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

  1. Планування у багатопроцесорних системах

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

Планування з розподілом часу

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

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

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

Планування з розподілом простору

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

Найефективнішим алгоритмом планування із розподілом простору є бригадне планування (gang scheduling). Цей алгоритм працює так.

  1. Пов’язані потоки (наприклад, потоки одного процесу) одночасно запускають на виконання на максимально можливій кількості процесорів. Такі потоки становлять бригаду (gang).

  2. Усі потоки бригади виконуються впродовж однакового для всіх кванта часу.

  3. Після вичерпання кванта часу відбувається повне перепланування для всіх процесорів. Виконання починають потоки іншої бригади.

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

Робота цього алгоритму показана на рис. 20.1. По вертикалі відкладено мо­менти часу, по горизонталі — процесори. Буквами позначено процеси (бригади), цифрами індексу — номери потоків.


  1. Спорідненість процесора

Під спорідненістю процесора (CPU affinity) розуміють імовірність того, що потік буде запланований для виконання на процесорі, що виконував код цього потоку минулого разу [31, 79]. Висока спорідненість означає малу ймовірність міграції потоку між процесорами під час його виконання.

Типи спорідненості процесора

Є два типи спорідненості процесора — м’яка (soft affinity) і жорстка (hard affinity).

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

Відсутність реалізації м’якої спорідненості у планувальнику ОС може спри­чинити появу ефекту пінг-понгу (ping-pong effect), коли кожне перемикання кон­тексту спричиняє міграцію потоку на інший процесор.

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

Переваги задания спорідненості процесора

Опишемо деякі переваги, які надає задания спорідненості процесора для потоків.

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

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

Крім того, жорстка спорідненість дає можливість ефективніше розподіляти системне навантаження процесорами. Наприклад, коли відомо, що у системі з чо­тирма процесорами постійно виконуються процеси А і В, при цьому виконання А вимагає 75 % процесорного часу, а В — 25 %, доцільно прив’язати процес В до од­ного із процесорів, а процес А — до решти трьох.

Маска спорідненості

Задания жорсткої спорідненості для потоку відбувається із використанням маски спорідненості (affinity mask) — бітової маски, кожний біт якої відповідає процесо­ру, присутньому у системі. Коли такий біт увімкнуто, то це означає, що потоку дозволено виконуватися на відповідному процесорі; коли ні, то це може означати, що потік не може бути виконаний на відповідному процесорі або процесор відсут­ній у системі Цю маску передають як параметр у системний виклик задання жорст­кої спорідненості, після встановлення її звичайно зберігають у керуючому блоці потоку. Далі буде наведено приклади прив’язання потоків до процесорів у Linux і Windows ХР за допомогою задання маски спорідненості.

  1. Підтримка багатопроцесорності в Linux

Багатопроцесорні архітектури в Linux підтримують, починаючи із ядра версії 2.0 (1996 рік). Підтримка багатопроцесорності реалізована в засобах синхронізації процесів і планувальнику процесів.

Основи синхронізації у ядрі Linux описано в пункті 5.4.1. Первісна реалізація підтримки SMP ґрунтувалася на великому блокуванні ядра. Сучасні версії ядра підтримують підхід із розбиванням коду на окремі критичні секції.

Багатопроцесорне планування

Ядро Linux версії 2.4 реалізовувало стандартне планування із розподілом часу. Повна реалізація планування, розрахована на використання у багатопроцесорних архітектурах, уперше з’явилася у ядрі версії 2.6 [83].

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

- Реалізовано системні виклики, що дають змоіу задавати жорстку спорідне­ність для процесів [79].

Для встановлення маски спорідненості використовують системний виклик sched_setaffinity():

#include

long sched_setaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr):

де: pi dідентифікатор процесу (0 — поточний процес); і en — довжина маски;

user_mask_ptr — покажчик на змінну, що містить маску.

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

unsigned long mask = 7; // прив'язати процес до процесорів 0. 1 п 2 sched_setaff1nity(0. sizeof(mask), &mask);

Для того щоб дізнатися про поточне значення маски спорідненості, викори­стовують системний виклик sched_getaffinity(): unsigned long mask;

sched_getaffinity(0, sizeof(mask), &mask); printf("маска спорідненості: Mix". mask);Реалізація жорсткої спорідненості в ядрі

Маску процесу зберігають у його дескрипторі task_struct як поле cpus_allowed. У разі будь-якої спроби міграції процесу на новий процесор ядро перевіряє, чи увімкнуто в цьому полі біт, що відповідає тому процесору. Коли біт не встановле­но, міграція процесу не відбувається. Крім того, якщо внаслідок зміни маски з’ясується, що процес виконується на недопустимому процесорі, він негайно міг­рує на один із вказаних у новому значенні маски.

Підтримка NUMA-систем

Підтримка архітектури NUMA була вперше реалізована у ядрі версії 2.6. Основою такої підтримки є внутрішнє відображення топології вузлів, для роботи із якими при­значений спеціальний програмний інтерфейс топології (Topology АРІ). Інформацію про топологію вузлів використовують під час планування процесів. Основною метою планування є підвищення ймовірності використання локальної пам’яті.

  1. Підтримка багатопроцесорності у Windows ХР

За умов багатопроцесорної системи планувальник Windows ХР визначає поря­док виконання потоків і процесори, на яких вони мають виконуватися. При цьо­му за замовчуванням підтримують м’яку спорідненість. Крім того, аналогічно до Linux у системі може бути задана жорстка спорідненість на основі маски спорід­неності, а серед процесорів, заданих у масці спорідненості потоку, додатково виби­рають ідеальний процесор (ideal processor). Планувальник планує потік для вико­нання на ідеальному процесорі, якщо він є доступним у цей момент.

Маска спорідненості потоку, номер ідеального процесора і номер процесора, на якому потік виконувався останній раз, містяться в керуючому блоці потоку (KTHREAD), маска спорідненості процесу — у блоці «PROCESS. Під час створення потоку його маску спорідненості ініціалізують значенням маски спорідненості процесу.

У разі постановки потоку на виконання відбуваються такі дії.

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

  2. Якщо ідеальний процесор недоступний, вибирають процесор, на якому потік виконувався востаннє.

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

Задания жорсткої спорідненості та ідеального процесора

Жорстка спорідненість може бути задана (маска спорідненості змінена із програми) за допомогою функцій SetProcessAffinityHaskO (для процесу) або SetThreadAffinity- MaskO (для окремого потоку).

DWORD mask_proc = 2; // другий процесор (маска 000. .0010) SetProcessAffinityMask(GetCurrentProcess(). &nask_proc)

Для визначення поточного значення маски спорідненості процесу використо­вують функцію GetProcessAffinityMaskO.

DWORD mask_proc. mask_sys;

// у масці mask_sys увімкнуто біти для всіх доступних процесорів

GetProcessAffі піtyMask(GetCurrentProcess(). Smask proc, &mask_sys): printfC'MacKa процесу: M8ix, системна маска: Mlx\n". mask_proc, mask_sys);

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

SetThreadldealProcessorCGetCurrentThreadO. 1): // другий процесор

Підтримка NUMA-систем

Windows ХР, як і Linux, підтримує внутрішнє відображення топології вузлів і ви­користовує його під час планування потоків. Win32 АРІ містить ряд функцій, що дають змогу отримати інформацію про поточну топологію (наприклад, функція GetNumaProcessorNodeC) повертає номер вузла для заданого процесора). Цю інформа­цію можна застосувати для оптимізації використання локальної пам’яті, наприклад шляхом задання маски спорідненості, що включає всі процесори одного вузла.


Каталог: lekcii
lekcii -> Конспект лекцій з навчальної дисципліни "безпека життєдіяльності" для студентів денної та заочної форм навчання
lekcii -> Індивідуальні та колективні засоби захисту
lekcii -> Склад І будова комплексних сполук. Природа хімічного зв’язку в комплексних сполуках
lekcii -> І включає в себе
lekcii -> Конспект лекцій з дисципліни «Основи ергономіки та дизайну автомобілів»
lekcii -> Тема. Розчини
lekcii -> Стандартизація І сертифікація продукції та послуг тема1: сутність стандартизації та її роль у розвитку національної економіки


Скачати 316.26 Kb.

  • Типи багатопроцесорних систем
  • Однорідний доступ до пам’яті
  • Неоднорідний доступ до пам’яті
  • Підтримка багатопроцесорності в операційних системах
  • Асиметрична багатопроцесорність
  • Симетрична багатопроцесорність
  • Продуктивність багатопроцесорних систем
  • Продуктивність окремих застосувань
  • Планування у багатопроцесорних системах
  • Планування з розподілом часу
  • Планування з розподілом простору
  • Типи спорідненості процесора
  • Переваги задания спорідненості процесора
  • Маска спорідненості
  • Підтримка багатопроцесорності в Linux
  • Багатопроцесорне планування
  • Підтримка NUMA -систем
  • Підтримка багатопроцесорності у Windows ХР
  • Задания жорсткої спорідненості та ідеального процесора
  • GetProcessAff