туть поступово, необов'язково викладати відразу всі гроші. Навпаки, можна придбати спочатку сервер тільки з одним процесором, а пізніше додавати додаткові процесори. Якщо масштабованість реальна, то в міру того, як розвивається інформаційна система і, відповідно, вимоги користувачів до потужності системи, можна додати ще один процесор без якої-небудь зміни програмного забезпечення.
Для досягнення масштабованості важливо використовувати також асинхронні операції. При асинхронному введенні/виведенні процесу не треба чекати завершення читання або запису, перш ніж він приступить до виконання іншої задачі. Кожен процес створюється з використанням єдиної нитки, яка виступає окремим блоком при виконанні процесором команд програми. Програми можуть запускати нові нитки в міру потреби, і ОС призначає і контролює їх без участі високоуровневой прикладної системи.
Прикладна програма може використовувати кілька ниток, не порушуючи основний потік програми. Програма може створити окрему нитку для кожної операції. Кожна з цих ниток, або операцій, з точки зору користувача, може виконуватися на окремому процесорі без контролю з боку прикладної програми.
Така архітектура має ще одну перевагу. Накладні витрати пов'язані радше з процесом, ніж з ниткою. Крім того, нитки створюються швидше, ніж процеси, і вони спільно використовують пам'ять всередині процесу, так що ниткам немає необхідності здійснювати яку-небудь спеціальну передачу даних. Крім цього, всі ресурси процесу доступні всім ниткам всередині процесу.
Звичайно, для роботи з текстовими редакторами і електронними таблицями міць багатопроцесорної архітектури не буде потрібно. Однак більш актуальним вона є в рамках мережевого сервера або сервера бази даних, відповідального за оперативну обробку транзакцій, що надходять від великого числа користувачів.
При виборі прикладної програми необхідно з'ясувати, чи використовує продукт всі переваги ОС на рівні нитки, а не на рівні процесу. Визначаючи продуктивність і гнучкість якої системи як єдиного цілого, необхідно мати на увазі, що апаратне забезпечення, мережева операційна система і прикладне програмне забезпечення працюють разом.
Необхідно мати на увазі, що ефективність не зростає лінійно при додаванні ще одного процесора. Для будь SMP-системи вигода від додаткового процесора поступово сходить нанівець з додаванням кожного подальшого процесора.
Продуктивність не росте лінійно, оскільки ОС повинна керувати кожним процесором і, отже, взаємодією процесора з внутрішніми викликами і периферійними пристроями на шині. Коли нитку в однопроцесорній системі не може більш виконуватися до здійснення деякої умови, процесор маскує програмне переривання так, що ніякий інший процес не може скористатися даним ресурсом. Потім він зберігає стан нитки, щоб виконання коду могло відновитися при здійсненні умови.
Коли є тільки один процесор, досить просто зберігати опис рівнів переривання і масок, контролюючих доступ до структур даних ОС. З додаванням кожного нового процесора це завдання стає все більш важким. Операційна система для SMP-платформи повинна уточнити, що тільки один процесор в даний момент виконує сегмент коду, який змінює глобальну структуру даних.
У системі з одним процесором масковане переривання запобігає використання процесором ресурсу. Але в SMP-середовищі цей механізм не дає можливості гарантувати, що різні процеси не будуть мати доступу до того ж самому ресурсу через інше переривання.
У SMP ОС доцільно використовувати метод взаімоблокіровкі для управління переривань між процесорами. По суті, взаімоблокіровка є програмної процедурою, яка блокує доступ другого процесора до вже зайнятому ресурсу. Наприклад, коли ядро ​​хоче отримати доступ до захищеної області, такий як черга відкладених викликів процедур, воно повинно "Придбати" замок, який пов'язаний з чергою. Якщо замок знаходиться в розпорядженні якого-небудь процесора, то інший процесор намагається отримати замок до тих пір, поки його не звільнить інший процесор.
Такий метод дозволяє запобігти псуванню процесорами глобальних структур даних на рівні ядра. Однак при непродуманої реалізації, він може призвести до того, що процесори будуть сидіти склавши руки протягом тривалого періоду, очікуючи звільнивши шійся замок. Цей метод добре працює, коли виконуються невеликі фрагменти коду. Такий код найбільш часто використовується в функціях ядра, які не викликають зовнішні процедури, які не витісняються з пам'яті і не генерують переривань. Таким чином, у багатьох випадках взаімоблокіровка не діє, в той час як ядро ​​повинне синхронізувати нитки між процесорами.
Ядро також може керувати ниткою, призначаючи їй одне з трьох станів: готова, виконується або чекає. Коли нитка чекає результатів запиту, ядро змінює стан нитки з "виконується" на "чекає" і видаляє її з черги на виконання. Після того як нитка отримала очікувану нею ін...