Механізм багатониткової обробки процесів із внутрішніми паралелізмом.
Багатозадачність – найважливіша якість ОС. Для її підтримки ОС визначає і створює для себе ті внутрішні одиниці роботи, між якими будуть розділятись всі ресурси комп’ютера. ОС підтримує відокремленість ресурсів. У кожного процесу є свій віртуальний адресний простір. Кожному процесу призначаються свої ресурси: файли, семафори, вікна тощо. Все це створюється для того, щоби захистити один процес від інших. При мультипрограмуванні підвищується пропускна здатність системи в цілому, але окремий процес ніколи не може бути виконаний швидше, ніж у випадку його виконання в однопрограмному режимі, оскільки витричається час на очікування розділюваних ресурсів. Але задачі, яка розв’язуються в рамках одного процесу, може бути притаманний внутрішній паралелізм, який в принципі дозволяє прискорити її розв’язок. Наприклад, в ході виконання задачі відбувається звертання до завантаження принтера. Під час цієї операції можна не блокувати цей процес, а продовжити виконання по іншій гілці алгоритму. Для цього пропонується механізм багатониткової обробки (multithreating). І мультипрограмування тепер можна реалізувати на рівні ниток. Оскільки всі нитки одного процесу завжди належать одній програмі, між ними досить легко організувати тісну взаємодію. Програміст може завчасно продумати роботу множини тредів процеса таким чином, щоби вони могли взаємодіяти, а не боротись за ресурс. Тобто нитки подібні до процесів, але в рамках одного процеса не такі незалежні. Всі нитки мають один адресний простір, вони розділяють одні і ті самі глобальні змінні, кожний тред має доступ до кожної віртуальної адреси. Одна нитка може використовувати стек іншої нитки і між ними немає повного захисту. Всі нитки розділяють набір відкритих файлів, таймерів, сигналів тощо.
Таким чином нитки мають власні: 1) програмний лічильник; 2) стек; 3) регістри; 4) треди-нащадки; 5) стани.
Треди розділяють: 1) адресний простір; 2) глобальні змінні; 3) відкриті файли; 4) таймера; 5) семафори; 6) статистичну інформацію про роботу системи.
Головне, що забезпечують нитки – це можливість паралельно виконувати декілька видів операцій в одній прикладній програмі. Паралельність обчислень, а значить і більш ефективне використання ЦП і менший сумарний час виконання задач тепер реалізується і на рівні тредів. Об’єкт-процес припускає, що при диспетчеризації треба враховувати всі ресурси, а при роботі з об’єктом “тред” можна міняти тільки контекст задачі, якщо ми переключаємось в рамках одного процесу. Всі інші ресурси не торкаються. Кожний процес складається як мінімум з одного треда. І тільки якщо є внутрішній паралелізм програміст може його розділити на декілька тредів. В багатопроцесорних системах із спільною пам’яттю треди просто необхідні, оскільки вони дозволяють завантажити роботою всі процеси. Але треба мати на увазі, що все-таки бажано зменшити взаємодію тредів між собою, оскільки прискорення від одночасного використання паралельних потоків обробки даних може бути зведене до мінімуму через затримки синхронізації і обмін даними. Для того, щоб можна було ефективно організувати паралельне виконання як процесів так і тредів, в архітектуру включається можливість працювати із спеціальною інформаційною структурою, яка описує або процес, або тред. Для цього на рівні архітектури процесора використовується поняття задачі (task). Воно об’єднує в собі як процес, так і тред. Це поняття і інформаційна структура, яка підтримується для нього на рівні апаратури, дозволяє побудувати відповідні дескриптори. Вони будуть відрізнятись перш за все тим, що дескриптор треда може зберегти тільки контекст призупиненого обчислювального процесу, а дескриптор процесу повинен вміщувати поля, які описують всі ресурси, які виділені цьому процесу.