Многозада́чность (англ. multitasking) — свойство операционной системы обеспечивать возможность параллельной обработки нескольких задач. Существует 2 типа многозадачности[1]:
· Процессная многозадачность (основанная на процессах — одновременно выполняющихся программах). Здесь программа — наименьший элемент управляемого кода, которым может управлять планировщик операционной системы. Более известна большинству пользователей (работа в текстовом редакторе и прослушивание музыки).
· Поточная многозадачность (основанная на потоках). Наименьший элемент управляемого кода — поток (одна программа может выполнять 2 и более задачи одновременно).
Примитивные многозадачные среды обеспечивают чистое «разделение ресурсов», когда за каждой задачей закрепляется определённый участок памяти, и задача активизируется в строго определённые интервалы времени.
Более развитые многозадачные системы проводят распределение ресурсов динамически, когда задача стартует в памяти или покидает память в зависимости от её приоритета и от стратегии системы. Такая многозадачная среда обладает следующими особенностями:
· Каждая задача имеет свой приоритет, в соответствии с которым получает процессорное время и память
· Система организует очереди задач так, чтобы все задачи получили ресурсы, в зависимости от приоритетов и стратегии системы
· Система организует обработку прерываний, по которым задачи могут активироваться, деактивироваться и удаляться
· По окончании положенного кванта времени ядро временно переводит задачу из состояния выполнения в состояние готовности, отдавая ресурсы другим задачам. При нехватке памяти страницы невыполняющихся задач могут быть вытеснены на диск (своппинг), а потом, через определённое системой время, восстанавливаться в памяти
· Система обеспечивает защиту адресного пространства задачи от несанкционированного вмешательства других задач
· Система обеспечивает защиту адресного пространства своего ядра от несанкционированного вмешательства задач
· Система распознаёт сбои и зависания отдельных задач и прекращает их
· Система решает конфликты доступа к ресурсам и устройствам, не допуская тупиковых ситуаций общего зависания от ожидания заблокированных ресурсов
· Система гарантирует каждой задаче, что рано или поздно она будет активирована
· Система обрабатывает запросы реального времени
· Система обеспечивает коммуникацию между процессами
· Основной трудностью реализации многозадачной среды является её надёжность, выраженная в защите памяти, обработке сбоев и прерываний, предохранении от зависаний и тупиковых ситуаций.
· Кроме надёжности, многозадачная среда должна быть эффективной. Затраты ресурсов на её поддержание не должны: мешать процессам проходить, замедлять их работу, резко ограничивать память.