Кооперативная многозадачность , также известная как многозадачность без вытеснения , представляет собой стиль многозадачности компьютера, при котором операционная система никогда не инициирует переключение контекста с запущенного процесса на другой процесс. Вместо этого, чтобы одновременно запускать несколько приложений, процессы добровольно передают управление периодически, когда они простаивают или логически заблокированы . Этот тип многозадачности называется кооперативным, потому что все программы должны взаимодействовать, чтобы схема планирования работала.
В этой схеме планировщик процессов операционной системы известен как кооперативный планировщик , роль которого сводится к запуску процессов и предоставлению им возможности возвращать управление ему добровольно. [1] [2]
Применение
Хотя он редко используется в современных более крупных системах, он широко используется во встроенных системах с ограничением памяти, а также в определенных приложениях, таких как CICS или подсистема JES2 . Совместная многозадачность была основной схемой планирования для 16-разрядных приложений, используемых Microsoft Windows до Windows 95 и Windows NT (например, Windows 3.1x ), а также классической Mac OS . Windows 9x использовала беспрерывную многозадачность для 16-битных унаследованных приложений, а версии Mac OS X для PowerPC до Leopard использовали ее для классических приложений. [1] NetWare , ориентированная на сеть операционная система, использовала кооперативную многозадачность вплоть до NetWare 6.5. Кооперативная многозадачность все еще используется в системах RISC OS . [3]
Кооперативная многозадачность используется с ожиданием в языках с однопоточным циклом обработки событий во время выполнения, таких как JavaScript или Python.
Проблемы
Поскольку кооперативная многозадачная система полагается на то, что каждый процесс регулярно уступает время другим процессам в системе, одна плохо спроектированная программа может использовать все время ЦП для себя либо путем выполнения обширных вычислений, либо путем активного ожидания ; оба приведут к зависанию всей системы . В серверной среде это опасность, которая делает всю среду неприемлемо хрупкой. [1]
Напротив, вытесняющая многозадачность прерывает работу приложений и передает управление другим процессам, находящимся вне контроля приложения.
Потенциал зависания системы может быть уменьшен с помощью сторожевого таймера , часто реализуемого аппаратно; обычно это вызывает аппаратный сброс .
Совместная многозадачность позволяет значительно упростить реализацию приложений, поскольку их выполнение никогда не прерывается планировщиком процессов неожиданно; например, различные функции внутри приложения не нуждаются в повторной входимости . [2]
Смотрите также
Рекомендации
- ^ a b c «Определение невытесняющей многозадачности» . pcmag.com . Проверено 15 августа 2015 года .
- ^ а б Джо Бартель (5 ноября 2011 г.). «Бесперебойная многозадачность» (PDF) . classiccmp.org . Проверено 15 августа 2015 года .
- ^ «Вытесняющая многозадачность» . riscos.info . 2 ноября 2009 . Проверено 15 августа 2015 года .