Ви слухаєте музику в потоковому режимі, завантажуєте файл і пишете код у фоновому режимі. Здається, що це відбувається одночасно. Насправді, це не так.
Ваш процесор з хірургічною точністю керує цими завданнями, перемикаючись між ними тисячі разів на секунду. Цей чарівний трюк називається перемикання контексту. Без нього ваш комп’ютер зависав би до завершення одного завдання. Вам довелося б чекати на завантаження сторінки, перш ніж ви зможете навіть перевірити електронну пошту.
Перемикання контексту – це механізм, що дозволяє операційній системі керувати кількома процесами без необхідності використання додаткового обладнання. Він підтримує ілюзію паралельності, розбиваючи час мікроскопічні інтервали.
Механіка перемикання контексту
У своїй основі перемикання контексту пов’язане зі збереженням та відновленням стану.
Коли процесор перемикається із Завдання А на Завдання Б, він повинен запам’ятати, на якому етапі зупинилося Завдання А. В іншому випадку, при поверненні до нього, він не знатиме, яку інструкцію виконуватиме наступна. Цей збережений стан є «контекст».
Два основних регістри містять критично важливі дані:
- Лічильник команд (Program Counter): Вказує на точну адресу пам’яті наступної інструкції для виконання. Зберігши його, ви знаєте, з чого поновити роботу.
- Регістри: Містять тимчасові дані та поточні команди. Вони фіксують знімок «ментального стану» процесора у цей момент.
На старих комп’ютерах це часто була операція лише на рівні апаратного забезпечення. Фізичні схеми виконували обмін. Сьогодні більшість сучасних процесорів використовують програмно керовані перемикання контексту. Ця гнучкість дозволяє одному процесору виконувати сотні таких перемикань на секунду. Результат? Ви сприймаєте роботу кількох додатків як паралельну, хоча технічно процесор з шаленою швидкістю чергує їх виконання.
Чому перемикання контексту важливе
Навіщо операційній системі потрібна ця складність?
Тому що ресурси обмежені. У вас немає виділеного процесора для кожного фонового процесу. Натомість у вас є одне (або кілька) ядер, що розділяють робоче навантаження. Перемикання контексту забезпечує багатозадачність на обмеженому обладнанні.
Йдеться не лише про запуск кількох додатків. Це також необхідно для стабільності та чуйності системи.
Розгляньте такі сценарії:
Вимоги до багатозадачності
Коли ви перемикаєте вкладки у браузері, процесор зупиняє поточний процес, зберігає його стан та завантажує стан нового процесу. Без цього перемикання вікон зажадало б очікування завершення поточної програми.
Перемикання між режимами ядра та користувача
Ваші програми працюють у режимі користувача для забезпечення безпеки. Системні завдання виконуються у «режимі ядра». Коли програма запитує щось у операційній системі (наприклад, доступ до файлу), процесор повинен переключити режим. Цей перехід часто включає перемикання контексту, щоб переконатися, що ядро має правильні дані, а програма зможе коректно відновити роботу післянадання.
Обробка переривань
Читання з диска відбувається миттєво. Коли ваш процесор запитує дані із жорсткого диска, він не простоює. Він переключається на інше завдання під час очікування. Як тільки дані надходять, переривання сигналізує процесору про необхідність повернутися, відновити попередній стан та обробити вхідні байти.
Прихована ціна
Перемикання контексту обходиться недешево.
Щоразу, коли процесор змінює контексти, він витрачає цикли збереження і завантаження даних. Він також очищає кеш процесора, що може уповільнити продуктивність, якщо це відбувається занадто часто. Якщо система занадто часто перемикає контексти, ви помітите затримки. Процесор зайнятий управлінням завданнями, а чи не їх виконанням.
Саме тому важливим є ефективне планування завдань. Чим краще операційна система управляє цими перемиканнями, тим плавніше відчувається ваш досвід роботи.
Так що наступного разу, коли ваш комп’ютер, здається, справляється з усім одночасно, пам’ятайте: це не магія. Це швидка серія замін, збережень та відновлення. Процесор ніколи не виконує завдання по-справжньому паралельно. Він просто дуже добре вміє перемикатися.
І це продовжується.



















































