БАГАТОЗАДАЧНІСТЬ І ПРОЦЕСОРИ
Кооперативна та витісняюча багатозадачність
Багатозадачність, multitasking - властивість операційної системи або середовища програмування, забезпечувати можливість паралельної (або псевдопаралельної) обробки кількох процесів. Справжня багатозадачність операційної системи можлива лише у розподілених обчислювальних системах.
Примітивні багатозадачні середовища забезпечують чисте “розподіл ресурсів”, коли за кожним завданням закріплюється певний ділянку пам'яті, і завдання активізується в певні інтервали часу.
Найрозвиненіші багатозадачні системи проводять розподіл ресурсів динамічно, коли завдання стартує у пам'яті чи залишає пам'ять залежно від її пріоритету і зажадав від стратегії системи. Таке багатозадачне середовище має такі особливості:
Кожне завдання має свій пріоритет, відповідно до якого отримує час та пам'ять
Система організує черги завдань так, щоб усі завдання отримали ресурси, залежно від пріоритетів та стратегії системи
Система організує обробку переривань, за якими завдання можуть активуватися, деактивуватися та видалятися
Після закінчення кванта часу завдання може тимчасово викидатися з пам'яті, віддаючи ресурси іншим завданням, а потім через певний системою час, відновлюватися в пам'яті (свопінг)
Система забезпечує захист пам'яті від несанкціонованого втручання інших завдань
Система розпізнає збої та зависання окремих завдань та припиняє їх
Система вирішує конфлікти доступу до ресурсів та пристроїв, не допускаючи тупикових ситуацій загального зависання від очікування заблокованих ресурсів
Система гарантує кожному завданню, що рано чи пізно вонабуде активовано
Система обробляє запити реального часу
Система забезпечує комунікацію між процесами
Типи псевдопаралельної багатозадачності
Тип багатозадачності, у якому операційна система одночасно завантажує на згадку про два або більше додатків, але процесорний час надається лише основному додатку. Для виконання фонової програми вона має бути активізована.
Спільна чи кооперативна багатозадачність
Тип багатозадачності, при якому фонові завдання виконуються тільки під час простою основного процесу і лише в тому випадку, якщо на це отримано дозвіл основного процесу.
Кооперативну багатозадачність можна назвати багатозадачністю "другого ступеня" оскільки вона використовує більш передові методи, ніж просте перемикання завдань, реалізоване багатьма відомими програмами (наприклад, МS-DOS shell з МS-DOS 5.0 при простому перемиканні активна програма отримує весь процесорний час, а фонові програми повністю заморожуються.При кооперативної багатозадачності додаток може захопити фактично стільки процесорного часу, скільки він вважає за потрібне.Усі програми ділять процесорний час, періодично передаючи управління наступному завданню.
Витіснюючи або пріоритетна багатозадачність (режим реального часу)
Вид багатозадачності, у якому операційна система сама передає управління від однієї виконуваної програми інший. Розподіл процесорного часу здійснюється планувальником процесів. Цей вид багатозадачності забезпечує швидший відгук дії користувача.
Витіснюючий багатозадачність - це вид багатозадачності при якому планування процесів ґрунтується на абсолютних пріоритетах.Процес з меншим пріоритетом (наприклад програма користувача) може бути витіснений при його виконанні більш пріоритетним процесом (наприклад системною або діагностичною програмою). Іноді цей вид багатозадачності називають пріоритетним.
Процеси, потоки виконання
Багатозадачна (multi-process) система дозволяє двом або більше програмам виконуватися одночасно. Багатопотокова (multi-threaded) система дозволяє одній програмі виконувати відразу кілька потоків одночасно. Сучасні операційні системи поєднують у собі обидві ці властивості.
Процес - це поняття, що відноситься до операційної системи. Щоразу, як ви запускаєте програму, система створює і запускає новий процес. З кожним процесом система пов'язує такі ресурси, як:
здійсненний код та дані;
Потік (thread) — основний елемент системи, якому ОС виділяє машинний час. Потік може виконувати якусь частину загального коду процесу, у тому числі й ту частину, яка в цей час виконується іншим потоком.
Потік (thread) визначає послідовність виконання коду у процесі.
Процес нічого не виконує, він просто слугує контейнером потоків.
Потоки завжди створюються в контексті будь-якого процесу, і все їхнє життя проходить тільки в його межах.
Потоки можуть виконувати той самий код і маніпулювати одними й тими самими даними, і навіть спільно використовувати описувачі об'єктів ядра, оскільки таблиця описувачів створюється над окремих потоках, а процесах.
Так як потоки витрачають значно менше ресурсів, ніж процеси, намагайтеся вирішувати свої завдання за рахунок використання додаткових потоків і уникайте створення нових процесів (але підходите до цього з розумом).
Скалярні, супер-скалярні, векторні, SMT процесори
Класифікація паралельних архітектур за Флінном (M. Flynn)
Обчислювальна система з одним потоком команд і даних (однопроцесорна ЕОМ - SISD, Single Instruction stream over a Single Data stream).
Обчислювальна система із загальним потоком команд (SIMD, Single Instruction, Multiple Data - одиночний потік команд та множинний потік даних).
Обчислювальна система з множинним потоком команд та одиночним потоком даних (MISD, Multiple Instruction Single Data - конвеєрна ЕОМ).
Обчислювальна система з множинним потоком команд та даних (MIMD, Multiple Instruction Multiple Data).
Скалярний процесор – це найпростіший клас мікропроцесорів. Скалярний процесор обробляє один елемент даних за одну інструкцію (SISD процесор, типовими елементами даних можуть бути цілі чи числа з плаваючою комою).
Суперскалярний процесор є чимось більшим, ніж звичайний послідовний (скалярний) процесор. На відміну від останнього він може виконувати кілька операцій за один такт. Основними компонентами суперскалярного процесора є пристрої для інтерпретації команд, з логікою, що дозволяє визначити, чи є команди незалежними, і достатня кількість виконуючих пристроїв. У пристроях, що виконують, можуть бути конвеєри. Суперскалярні процесори реалізують паралелізм лише на рівні команд.
Термін "конвеєр" у комп'ютерній архітектурі означає . конвеєр. Ідея конвеєра полягає в тому, щоб складну операцію розбити на безліч простіших, які можуть виконуватися одночасно. Під час руху об'єктів конвеєром на різних його ділянках виконуються різні операції, а при досягненні кожним об'єктом кінця конвеєра він виявитьсяповністю обробленим. Конвеєри застосовують як при обробці команд, так і в арифметичних операціях. Для ефективної реалізації конвеєра повинні виконуватись такі умови:
система виконує операцію, що повторюється;
ця операція може бути поділена на незалежні частини, ступінь перекриття яких невелика;
трудомісткість підоперацій приблизно однакова.
Кількість підоперацій називають глибиною конвеєра. Важливою умовою нормальної роботи конвеєра є відсутність конфліктів, тобто дані, що подаються до конвеєра, мають бути незалежними. У тому випадку, коли черговий операнд залежить від результату попередньої операції, виникають такі періоди роботи конвеєра ("бульбашки"), коли він порожній. Це ще одна проблема у роботі конвеєрних систем.
Збільшення швидкодії, яку можна отримати за допомогою конвеєра, приблизно дається такою формулою: nd/(n+d)
де n – кількість операндів, що завантажуються в конвеєр, d – глибина конвеєра. Нехай потрібно виконати операцію додавання над двома одновимірними масивами по 200 елементів, причому виконання додавання вимагає п'ять операцій. У цьому випадку прискорення становитиме (200*5)/(200+5)=4.88. Зрозуміло, це ідеальна ситуація, недосяжна в реальному житті, зокрема, вважається, що немає "бульбашок" і т.д. Це передбачає, як згадувалося, взаємну незалежність даних.
У конвеєрах команд можуть виникати простої, джерелом яких є залежність між командами. Такі ситуації виникають за наявності у циклах розгалужень, тобто умовних операторів.
Приклад комп'ютера з суперскалярним процесором є IBM RISC/6000. Тактова частота процесора у ЕОМ була 62.5 МГц, а швидкодія системи на обчислювальних тестах досягала 104Mflop (Mflop - одиниця виміру швидкодії процесора - мільйон операцій із плаваючою точкою на секунду). Суперскалярний процесор не вимагає спеціальних векторизуючих компіляторів, хоча компілятор повинен у цьому випадку враховувати особливості архітектури.
Векторний процесор – це процесор, у якому операндами деяких команд можуть виступати впорядковані масиви даних – вектори (SIMD процесор). Відрізняється від скалярних процесорів, які можуть працювати лише з одним операндом за одиницю часу. Абсолютна більшість процесорів є скалярними або близькими до них. Векторні процесори були поширені у сфері наукових обчислень, де вони були основою більшості суперкомп'ютерів, починаючи з 1980-х до 1990-х. Але різке збільшення продуктивності та активна розробка нових процесорів призвели до витіснення векторних процесорів зі сфери повсякденних процесорів.
Одночасна багатопоточність (SMT - simultaneous multithreading) - наступний крок у розширенні можливостей процесора, орієнтований на додатки, вимогливі до продуктивності, і підтримує метод розпаралелювання завдань на рівні інструкцій на кілька каналів обробки процесора.
Одночасна багатопотокова обробка на рівні додатків дозволяє "бачити" два процесори замість одного задіяного. Якщо режим SMT вимкнено (однопотокова обробка), кожен фізичний процесор використовує один логічний. Коли ж режим SMT активовано, кожен процесор, який виконує в даний момент команди програми, використовує два логічні процесори замість одного. Технологія багатопоточності реалізується за рахунок того, що при виконанні різних команд програми використовуються різні пристрої процесора, що дозволяє розподіляти по них потоки.
Шинидоступу до пам'яті та NUMA
Рівні цих сигналів в даний момент визначають стан системи в цей момент.
Шина даних складається із 16 ліній. якими можлива передача як окремих байтів. і двобайтових слів. При пересиланні байтів можлива передача і старшим 8 лініям, і молодшим. Шина даних двонаправлена, оскільки передача байтів і слів може виробляється як і мікропроцесор, і з нього.
Шина управління формується сигналами, що надходять безпосередньо від мікропроцесора, сигналами від шинного контролера, а також сигналами, що йдуть до мікропроцесора від інших мікросхем та периферійних адаптерів.
Мікропроцесор використовує шинний контролер формування керуючих сигналів, визначальних перенесення даних по шині. Він виставляє три сигнали -SO, -SI, M/-IO, які визначають тип циклу шини (підтвердження переривання, читання порту вводу/виводу, зупинка, читання пам'яті, запис у пам'ять). З значень цих сигналів шинний контролер формує управляючі сигнали, контролюючі динаміку цього типу шини.
Таким чином, якщо частота кварцового генератора, що визначає частоту CLK, дорівнює 20 МГц, то максимальна пропускна здатність шини даних дорівнює (20/4) мільйонів слів за секунду, або 10 В/сек. Реальна пропускна здатність значно нижча.
Симетричне мультипроцесування (Symmetric Multiprocessing, або SMP) це архітектура багатопроцесорних комп'ютерів, в якій два або більше однакових процесорів підключаються до загальної пам'яті. Більшість багатопроцесорних систем сьогодні використовують архітектуру SMP. SMP системи дозволяють будь-якому процесору працювати над будь-яким завданням незалежно від того, де в пам'яті зберігаються дані для цього завдання; з належною підтримкою операційної системи, SMP системиможуть легко переміщати завдання між процесорами ефективно розподіляючи навантаження. З іншого боку, пам'ять набагато повільніша за процесори, які до неї звертаються, навіть однопроцесорним машинам доводиться витрачати значний час на отримання даних з пам'яті. У SMP ситуація ще більше посилюється, оскільки лише один процесор може звертатися до пам'яті на даний момент часу.
SMP це лише один підхід до побудови багатопроцесорної машини; Іншим підходом є NUMA, яка надає процесорам окремі банки пам'яті.
NUMA, Non-Uniform Memory Architecture - "Архітектура з нерівномірною пам'яттю") - схема реалізації комп'ютерної пам'яті, яка використовується в мультипроцесорних системах, коли час доступу до пам'яті визначається її розташуванням по відношенню до процесора.
Системи NUMA складаються з однорідних базових вузлів, що містять невелику кількість процесорів із модулями основної пам'яті.
Практично всі архітектури ЦПУ використовують невелику кількість дуже швидкої пам'яті, що не розділяється, відомої як кеш, який прискорює звернення до часто необхідних даних. У NUMA підтримка когерентності через пам'ять, що розділяється, дає істотну перевагу в продуктивності.
Хоча системи з некогерентним доступом до NUMA простіше проектувати та створювати, стає гранично складно створювати програми у класичній моделі архітектури фон Неймана. В результаті, всі NUMA-комп'ютери, що продаються, використовують спеціальні апаратні рішення для досягнення когерентності кешу, і класифікуються як кеш-когерентні системи з розподіленою пам'яттю, що розділяється, або ccNUMA.
Це дозволяє процесорам працювати з пам'яттю паралельно, і це може значно підвищити пропускну здатність пам'яті, якщо дані прив'язані до конкретного процесу.(Отже і процесору). З іншого боку, NUMA підвищує вартість переміщення даних між процесорами, а отже, і балансування завантаження обходиться дорожче. Переваги NUMA обмежені специфічним колом завдань, переважно серверами, де дані часто міцно прив'язані до конкретних завдань чи користувачам.