stringtranslate.com

Многозадачность компьютера

Современные настольные операционные системы способны обрабатывать большое количество различных процессов одновременно. На этом снимке экрана показан Linux Mint, работающий одновременно со средой рабочего стола Xfce , Firefox , программой калькулятора, встроенным календарем, Vim , GIMP и медиаплеером VLC .
Многозадачность Microsoft Windows 1.01 , выпущенной в 1985 году. Здесь показаны работающие программы MS-DOS Executive и Calculator.

В вычислительной технике многозадачность — это одновременное выполнение нескольких задач (также известных как процессы ) в течение определенного периода времени. Новые задачи могут прерывать уже запущенные до их завершения, вместо того чтобы ждать их завершения. В результате компьютер выполняет сегменты нескольких задач поочередно, при этом задачи совместно используют общие вычислительные ресурсы, такие как центральные процессоры (ЦП) и оперативную память . Многозадачность автоматически прерывает запущенную программу, сохраняя ее состояние (частичные результаты, содержимое памяти и содержимое регистров компьютера) и загружая сохраненное состояние другой программы и передавая ей управление. Это « переключение контекста » может быть инициировано через фиксированные интервалы времени ( упреждающая многозадачность ), или запущенная программа может быть закодирована для подачи сигнала управляющему программному обеспечению, когда ее можно прервать ( кооперативная многозадачность ).

Многозадачность не требует параллельного выполнения нескольких задач в одно и то же время; вместо этого она позволяет нескольким задачам выполняться в течение определенного периода времени. [1] Даже на многопроцессорных компьютерах многозадачность позволяет запускать гораздо больше задач, чем имеется ЦП.

Многозадачность является общей чертой компьютерных операционных систем по крайней мере с 1960-х годов. Она позволяет более эффективно использовать аппаратное обеспечение компьютера; когда программа ожидает некоторого внешнего события, такого как пользовательский ввод или передача ввода/вывода с периферийным устройством для завершения, центральный процессор все еще может использоваться с другой программой. В системе с разделением времени несколько операторов-людей используют один и тот же процессор, как если бы он был выделен для их использования, в то время как за кулисами компьютер обслуживает многих пользователей, выполняя многозадачность их индивидуальных программ. В многопрограммных системах задача выполняется до тех пор, пока она не должна будет дождаться внешнего события или пока планировщик операционной системы принудительно не выгрузит запущенную задачу из ЦП. Системы реального времени, такие как те, которые предназначены для управления промышленными роботами, требуют своевременной обработки; один процессор может быть разделен между расчетами движения машины, коммуникациями и пользовательским интерфейсом. [2]

Часто многозадачные операционные системы включают меры по изменению приоритета отдельных задач, так что важные задания получают больше процессорного времени, чем те, которые считаются менее важными. В зависимости от операционной системы задача может быть такой же большой, как целая прикладная программа, или может состоять из более мелких потоков , которые выполняют части общей программы.

Процессор, предназначенный для использования с многозадачными операционными системами, может включать в себя специальное оборудование для надежной поддержки нескольких задач, например, защиту памяти и защитные кольца , которые гарантируют, что управляющее программное обеспечение не будет повреждено или нарушено ошибками программ пользовательского режима.

Термин «многозадачность» стал международным термином, поскольку это же слово используется во многих других языках, таких как немецкий, итальянский, голландский, румынский, чешский, датский и норвежский.

Мультипрограммирование

На заре вычислений процессорное время было дорогим, а периферийные устройства были очень медленными. Когда компьютер запускал программу, которой требовался доступ к периферийному устройству, центральный процессор (ЦП) должен был прекратить выполнение программных инструкций, пока периферийное устройство обрабатывало данные. Обычно это было очень неэффективно. Мультипрограммирование — это вычислительная техника, которая позволяет нескольким программам одновременно загружаться и выполняться в памяти компьютера, позволяя ЦП быстро переключаться между ними. Это оптимизирует использование ЦП, поддерживая его занятость выполнением задач, что особенно полезно, когда одна программа ожидает завершения операций ввода-вывода.

Bull Gamma 60 , изначально разработанный в 1957 году и впервые выпущенный в 1960 году, был первым компьютером, разработанным с учетом многопрограммирования. Его архитектура включала центральную память и распределитель программ, который снабжал кодом и данными до двадцати пяти автономных процессоров и позволял осуществлять одновременную работу нескольких кластеров.

Другим таким компьютером был LEO III , впервые выпущенный в 1961 году. Во время пакетной обработки в память компьютера загружалось несколько различных программ, и первая из них начинала работать. Когда первая программа достигала инструкции, ожидающей периферийного устройства, контекст этой программы сохранялся, а второй программе в памяти давали возможность запуститься. Процесс продолжался до тех пор, пока все программы не завершали работу. [3]

Использование многопрограммирования было расширено с появлением виртуальной памяти и технологии виртуальных машин , которые позволили отдельным программам использовать память и ресурсы операционной системы так, как будто другие одновременно работающие программы, по сути, не существовали. [ необходима цитата ]

Мультипрограммирование не дает никаких гарантий, что программа будет запущена вовремя. Действительно, первая программа может работать часами без необходимости доступа к периферийному устройству. Поскольку не было пользователей, ожидающих у интерактивного терминала, это не было проблемой: пользователи передавали колоду перфокарт оператору и возвращались через несколько часов за распечатанными результатами. Мультипрограммирование значительно сокращало время ожидания при обработке нескольких партий. [4] [5]

Кооперативная многозадачность

Ранние многозадачные системы использовали приложения, которые добровольно уступали время друг другу. Этот подход, который в конечном итоге поддерживался многими компьютерными операционными системами , сегодня известен как кооперативная многозадачность. Хотя сейчас она редко используется в больших системах, за исключением определенных приложений, таких как CICS или подсистема JES2 , кооперативная многозадачность когда-то была единственной схемой планирования, используемой Microsoft Windows и классической Mac OS для одновременного запуска нескольких приложений. Кооперативная многозадачность по-прежнему используется сегодня в системах RISC OS . [6]

Поскольку кооперативно многозадачная система полагается на то, что каждый процесс регулярно отдает время другим процессам в системе, одна плохо спроектированная программа может потреблять все процессорное время для себя, либо выполняя обширные вычисления, либо занимаясь ожиданием ; и то, и другое приведет к зависанию всей системы . В серверной среде это опасность, которая делает всю среду неприемлемо хрупкой.

Превентивная многозадачность

Kubuntu (KDE Plasma 5) четыре виртуальных рабочих стола, на которых одновременно запущено несколько программ

Вытесняющая многозадачность позволяет компьютерной системе более надежно гарантировать каждому процессу регулярный «отрезок» рабочего времени. Она также позволяет системе быстро справляться с важными внешними событиями, такими как входящие данные, которые могут потребовать немедленного внимания того или иного процесса. Операционные системы были разработаны для использования этих аппаратных возможностей и выполнения нескольких процессов в приоритетном порядке. Вытесняющая многозадачность была реализована в PDP-6 Monitor и Multics в 1964 году, в OS/360 MFT в 1967 году и в Unix в 1969 году и была доступна в некоторых операционных системах для таких маленьких компьютеров, как PDP-8 компании DEC; это основная функция всех Unix-подобных операционных систем, таких как Linux , Solaris и BSD с производными , [7] , а также современных версий Windows.

В любой конкретный момент времени процессы можно сгруппировать в две категории: те, которые ждут ввода или вывода (называемые « привязанными к вводу/выводу »), и те, которые полностью используют ЦП (« привязанные к ЦП »). В примитивных системах программное обеспечение часто « опрашивало » или « занимало ожидание », ожидая запрошенного ввода (например, ввода с диска, клавиатуры или сети). В это время система не выполняла полезную работу. С появлением прерываний и упреждающей многозадачности процессы, привязанные к вводу/выводу, могли быть «заблокированы» или приостановлены в ожидании поступления необходимых данных, позволяя другим процессам использовать ЦП. Поскольку поступление запрошенных данных приводило к прерыванию, заблокированным процессам можно было гарантировать своевременный возврат к выполнению. [ необходима цитата ]

Возможно, самой ранней ОС с вытесняющей многозадачностью, доступной домашним пользователям, была OS-9 от Microware , доступная для компьютеров на базе Motorola 6809, таких как TRS-80 Color Computer 2 , [8] с операционной системой, поставляемой Tandy в качестве обновления для систем с дисками. [9] Sinclair QDOS на Sinclair QL последовала в 1984 году, но она не имела большого успеха. Amiga от Commodore была выпущена в следующем году, предлагая сочетание многозадачности и мультимедийных возможностей. Microsoft сделала вытесняющую многозадачность основной функцией своей флагманской операционной системы в начале 1990-х годов при разработке Windows NT 3.1 , а затем Windows 95. В 1988 году Apple предложила A/UX в качестве альтернативы классической Mac OS на базе UNIX System V. В 2001 году Apple перешла на Mac OS X, находящуюся под влиянием NeXTSTEP .

Похожая модель используется в Windows 9x и семействе Windows NT , где собственные 32-разрядные приложения выполняют многозадачность с приоритетом. [10] 64-разрядные версии Windows, как для архитектур x86-64 , так и для Itanium , больше не поддерживают устаревшие 16-разрядные приложения и, таким образом, обеспечивают вытесняющую многозадачность для всех поддерживаемых приложений.

В реальном времени

Другая причина многозадачности была в разработке систем вычислений в реальном времени , где есть ряд, возможно, не связанных между собой внешних действий, которые должны контролироваться одной процессорной системой. В таких системах иерархическая система прерываний сочетается с приоритетами процессов, чтобы гарантировать, что ключевым действиям будет предоставлена ​​большая доля доступного времени процесса . [11]

Многопоточность

Поскольку многозадачность значительно повысила производительность компьютеров, программисты начали реализовывать приложения как наборы взаимодействующих процессов (например, один процесс собирает входные данные, один процесс обрабатывает входные данные, один процесс записывает результаты на диск). Однако для этого потребовались некоторые инструменты, позволяющие процессам эффективно обмениваться данными. [ необходима цитата ]

Потоки родились из идеи, что наиболее эффективным способом для сотрудничающих процессов обмениваться данными было бы совместное использование всего пространства памяти. Таким образом, потоки фактически являются процессами, которые работают в одном и том же контексте памяти и совместно используют другие ресурсы со своими родительскими процессами , например, открытые файлы. Потоки описываются как легковесные процессы , поскольку переключение между потоками не подразумевает изменение контекста памяти. [12] [13] [14]

Хотя потоки планируются упреждающе, некоторые операционные системы предоставляют вариант потоков, называемый волокнами , которые планируются совместно. В операционных системах, которые не предоставляют волокна, приложение может реализовать свои собственные волокна, используя повторные вызовы рабочих функций. Волокна даже более легкие, чем потоки, и несколько проще в программировании, хотя они, как правило, теряют некоторые или все преимущества потоков на машинах с несколькими процессорами . [15]

Некоторые системы напрямую поддерживают многопоточность на аппаратном уровне .

Защита памяти

Существенным для любой многозадачной системы является безопасное и эффективное распределение доступа к системным ресурсам. Доступ к памяти должен строго контролироваться, чтобы гарантировать, что ни один процесс не сможет непреднамеренно или преднамеренно читать или записывать в области памяти за пределами адресного пространства процесса. Это делается в целях общей стабильности системы и целостности данных, а также безопасности данных.

В целом, управление доступом к памяти является обязанностью ядра операционной системы в сочетании с аппаратными механизмами, которые обеспечивают вспомогательные функции, такими как блок управления памятью (MMU). Если процесс пытается получить доступ к области памяти за пределами своего пространства памяти, MMU отклоняет запрос и сигнализирует ядру о необходимости предпринять соответствующие действия; это обычно приводит к принудительному завершению процесса-нарушителя. В зависимости от программного обеспечения и конструкции ядра, а также конкретной рассматриваемой ошибки пользователь может получить сообщение об ошибке нарушения доступа, например «ошибка сегментации».

В хорошо спроектированной и правильно реализованной многозадачной системе данный процесс никогда не может напрямую получить доступ к памяти, принадлежащей другому процессу. Исключением из этого правила является случай общей памяти; например, в механизме межпроцессного взаимодействия System V ядро ​​выделяет память для совместного использования несколькими процессами. Такие функции часто используются программным обеспечением для управления базами данных, таким как PostgreSQL.

Неадекватные механизмы защиты памяти, вызванные недостатками в их конструкции или плохой реализацией, создают уязвимости безопасности, которые могут быть потенциально использованы вредоносным программным обеспечением.

Подкачка памяти

Использование файла подкачки или раздела подкачки — это способ для операционной системы предоставить больше памяти, чем физически доступно, сохраняя части первичной памяти во вторичном хранилище . Хотя многозадачность и подкачка памяти — это две совершенно не связанные между собой техники, они очень часто используются вместе, поскольку подкачка памяти позволяет загружать больше задач одновременно. Обычно многозадачная система позволяет другому процессу работать, когда работающий процесс достигает точки, в которой ему приходится ждать перезагрузки некоторой части памяти из вторичного хранилища. [16]

Программирование

Процессы, которые полностью независимы, не представляют особой проблемы для программирования в многозадачной среде. Большая часть сложности в многозадачных системах возникает из-за необходимости совместного использования компьютерных ресурсов между задачами и синхронизации работы взаимодействующих задач. [ необходима цитата ]

Для избежания потенциальных проблем, вызванных попытками нескольких задач получить доступ к одному и тому же ресурсу, используются различные методы параллельных вычислений . [ необходима ссылка ]

Более крупные системы иногда строились с центральным процессором(ами) и некоторым количеством процессоров ввода-вывода , своего рода асимметричной многопроцессорной обработкой . [ необходима ссылка ]

С годами многозадачные системы совершенствовались. Современные операционные системы обычно включают в себя подробные механизмы для приоритезации процессов, в то время как симметричная многопроцессорность ввела новые сложности и возможности. [17]

Смотрите также

Ссылки

  1. ^ "Concurrency vs Parallelism, Concurrent Programming vs Parallel Programming". Oracle. Архивировано из оригинала 7 апреля 2016 г. Получено 23 марта 2016 г.
  2. ^ Энтони Ралстон, Эдвин Д. Рейли (ред.), Энциклопедия компьютерных наук, третье издание , Van Nostrand Reinhold, 1993, ISBN 0-442-27679-6 , статьи «Многозадачность» и «Многопрограммирование» 
  3. ^ ОСНОВНАЯ ПРОГРАММА И СИСТЕМА ИСПЫТАНИЙ ПРОГРАММ ЧАСТЬ 1 СПЕЦИФИКАЦИЯ ОСНОВНОЙ ПРОГРАММЫ. Февраль 1965 г. раздел 6 «ПРОЦЕДУРЫ УПРАВЛЕНИЯ ПРИОРИТЕТАМИ».
  4. ^ Lithmee (2019-05-20). "В чем разница между пакетной обработкой и мультипрограммированием". Pediaa.Com . Получено 14.04.2020 .
  5. ^ "Эволюция операционной системы". 2017-09-29 . Получено 2020-04-14 .
  6. ^ "Вытесняющая многозадачность". riscos.info . 2009-11-03 . Получено 2014-07-27 .
  7. ^ "UNIX, Часть первая". Инициатива цифровых исследований . ibiblio.org. 2002-01-30 . Получено 2014-01-09 .
  8. Даунард, Дэн (сентябрь 1983 г.). «Dynamic Uno». The Rainbow . стр. 236–240 . Получено 9 мая 2024 г.
  9. Каталог TRS-80 1984 года. Tandy Corporation. 1984. стр. 53–54 . Получено 14 мая 2024 года .
  10. Джозеф Моран (июнь 2006 г.). «Windows 2000 &16-Bit Applications». Smart Computing . Том 16, № 6. стр. 32–33. Архивировано из оригинала 25 января 2009 г.
  11. ^ Лю, CL; Лейланд, Джеймс У. (1973-01-01). «Алгоритмы планирования для мультипрограммирования в среде жесткого реального времени». Журнал ACM . 20 (1): 46–61. doi : 10.1145/321738.321743 . ISSN  0004-5411. S2CID  59896693.
  12. ^ Эдуардо Чилиендо; Такечика Кунимаса (25 апреля 2008 г.). "Linux Performance and Tuning Guidelines" (PDF) . redbooks.ibm.com . IBM . стр. 4. Архивировано из оригинала (PDF) 26 февраля 2015 г. . Получено 1 марта 2015 г. .
  13. ^ "Определение переключения контекста". linfo.org . 28 мая 2006 г. Архивировано из оригинала 18 февраля 2010 г. Получено 26 февраля 2015 г.
  14. ^ "Что такое потоки (пользователь/ядро)?". tldp.org . 8 сентября 1997 г. Получено 26 февраля 2015 г.
  15. ^ Многозадачность различными методами Доступно 19 февраля 2019 г.
  16. ^ "Что такое файл подкачки?". kb.iu.edu . Получено 2018-03-26 .
  17. ^ "Архитектура операционных систем". cis2.oc.ctc.edu . Получено 2018-03-17 .