Открыть сервисСервис

Многозадачность в информатике

Многозадачность (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) и серверных. Она позволяет одновременно работать с несколькими приложениями, выполнять фоновые задачи (обновления, резервное копирование), обслуживать множество пользователей на серверах и управлять многоядерными процессорами.

Источники:

  • Таненбаум Э., Бос Х. «Современные операционные системы»
  • Столлингс У. «Операционные системы: принципы и практика»
  • Руфь Е. П. «Операционные системы»
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru