Многозадачность в информатике¶
Многозадачность (multitasking) — это свойство операционной системы выполнять несколько задач (процессов или потоков) одновременно за счёт переключения процессорного времени между ними. В отличие от многопроцессности, где для параллельного выполнения требуется несколько физических или логических процессоров, многозадачность реализуема и на однопроцессорной системе: центральный процессор чередует фрагменты кода разных задач настолько быстро, что для пользователя они выполняются одновременно.
¶Принцип работы
Основа многозадачности — планировщик (scheduler), компонент ядра операционной системы, который решает, какая задача в каждый момент получает процессорное время. Задача выполняется до тех пор, пока не исчерпит выделенный квант времени, не заблокируется по вводу-выводу или не будет приостановлена по другим причинам. После этого контекст выполнения (регистры, счётчик команд, страницы памяти) сохраняется, и процессор передаётся следующей задачи. Переключение происходит настолько часто (обычно десятки и сотни раз в секунду), что смена задач незаметна.
¶Виды многозадачности
- С кооперативной (добровольной) многозадачностью задача сама передаёт управление планировщику, когда считает нужным. Так работали早期 версии Windows (до Windows 95) и Mac OS классической линии. Недостаток — зависшая задача останавливает всю систему.
- С вытесняющей (принудительной) многозадачностью планировщик может прервать выполнение задачи в любой момент. Так работают Linux, Windows NT и все современные ОС. Зависание одной программы не блокирует остальные.
- Симметричная многозадачность (SMP) — все процессоры равноправны, задачи распределяются между ними динамически. Используется в большинстве настольных и серверных систем.
- Асимметричная многозадачность — задачи жёстко закреплены за определёнными процессорами. Применяется реже, в специализированных системах.
¶Многозадачность и многопоточность
Многозадачность оперирует процессами — независимыми единицами выполнения со своей памятью. Многопоточность (multithreading) работает внутри одного процесса: потоки разделяют общее адресное пространство, но выполняются параллельно. Многопоточность повышает отзывчивость приложений (например, интерфейс остаётся активным, пока фоновый поток загружает данные) и эффективно использует многоядерные процессоры.
¶Планирование процессов
Алгоритмы планирования определяют порядок выделения процессорного времени:
- Round-robin — каждому процессу выделяется равный квант времени, после чего управление передаётся следующему.
- Приоритетное планирование — процессы выполняются в порядке убывания приоритета; возможно «старение» (aging) задач, чтобы предотвратить голодание низкоприоритетных.
- Многоуровневая очередь с обратной связью — процессы распределяются по очередям с разной длиностью кванта времени.
¶Многозадачность в разных системах
| Система | Тип многозадачности | Особенности |
|---|---|---|
| Unix/Linux | Вытесняющая, симметричная | Планировщик CFS, приоритеты nice |
| Windows NT/10/11 | Вытесняющая, симметричная | Диспетчер задач, кванты ~2 мс |
| macOS | Вытесняющая, симметричная | Гибридное ядро XNU |
| FreeRTOS | Кооперативная или вытесняющая | Для встраиваемых систем |
¶Многозадачность в оперативной памяти
Каждая задача требует выделения собственного пространства памяти. При нехватке оперативной памяти система использует подкачку (swapping) — перемещение неактивных страниц на диск. Это замедляет работу, но позволяет держать в памяти больше задач. Современные ОС используют виртуальную память и управление страницами для оптимизации этого процесса.
¶Проблемы и особенности
- Взаимоблокировка (deadlock) — задачи бесконечно ждут ресурсы, занятые друг другом.
- Гонка данных (race condition) — результат выполнения зависит от порядка доступа к общим ресурсам; предотвращается синхронизацией (мьютексы, семафоры).
- Деградация производительности — при избыточном числе задач значительная часть времени тратится на переключение контекста и управление очередями.
¶История
Идея многозадачности появилась в 1950-х годах в мейнфреймах IBM и Univac. Операционная система CTSS (1961, Массачусетский технологический институт) стала одной из первых систем с вытесняющей многозадачностью. Unix, разработанная в Bell Labs в конце 1960-х, заложила основы современной многозадачности для мини-компьютеров. Персональные компьютеры получили многозадачность в 1980-х — сначала кооперативную (Windows 1.0–3.x, Mac OS), затем вытесняющую (Windows NT с 1993 года, Linux с начала 1990-х).
¶Применение
Многозадачность лежит в основе работы всех современных операционных систем — от настольных до мобильных (Android, iOS) и серверных. Она позволяет одновременно работать с несколькими приложениями, выполнять фоновые задачи (обновления, резервное копирование), обслуживать множество пользователей на серверах и управлять многоядерными процессорами.
Источники:
- Таненбаум Э., Бос Х. «Современные операционные системы»
- Столлингс У. «Операционные системы: принципы и практика»
- Руфь Е. П. «Операционные системы»
