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 and Multics в 1964 году, в OS/360 MFT в 1967 году и в Unix в 1969 году и была доступна в некоторых операционных системах для таких маленьких компьютеров, как DEC PDP-8; это основная функция всех Unix-подобных операционных систем, таких как Linux , Solaris и BSD с ее производными , [7] , а также современных версий Windows.

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

Самой ранней ОС с вытесняющей многозадачностью, доступной домашним пользователям, была 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-битные приложения выполняются в многозадачном режиме с упреждением. [8] 64-разрядные версии Windows, как для архитектуры x86-64 , так и для Itanium , больше не поддерживают устаревшие 16-разрядные приложения и, таким образом, обеспечивают вытесняющую многозадачность для всех поддерживаемых приложений.

Реальное время

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

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

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

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

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

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

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

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

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

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

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

Замена памяти

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

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

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

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

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

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

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

Рекомендации

  1. ^ «Параллелизм против параллелизма, параллельное программирование против параллельного программирования». Оракул. Архивировано из оригинала 7 апреля 2016 года . Проверено 23 марта 2016 г.
  2. ^ Энтони Ралстон, Эдвин Д. Рейли (редактор), Энциклопедия компьютерных наук, третье издание , Ван Ностранд Рейнхольд, 1993, ISBN 0-442-27679-6 , статьи «Многозадачность» и «Многопрограммирование» 
  3. ^ МАГИСТЕРСКАЯ ПРОГРАММА И СИСТЕМА ИСПЫТАНИЙ ПРОГРАММЫ ЧАСТЬ 1 СПЕЦИФИКАЦИЯ МАСТЕРСКОЙ ПРОГРАММЫ. Февраль 1965 г. раздел 6 «ПРИОРИТЕТНЫЕ ПРОЦЕДУРЫ КОНТРОЛЯ».
  4. ^ Литми (20 мая 2019 г.). «В чем разница между пакетной обработкой и мультипрограммированием». Pediaa.Com . Проверено 14 апреля 2020 г.
  5. ^ «Эволюция операционной системы». 29 сентября 2017 г. Проверено 14 апреля 2020 г.
  6. ^ «Вытесняющая многозадачность». riscos.info . 03.11.2009 . Проверено 27 июля 2014 г.
  7. ^ «UNIX, Часть первая». Инициатива цифровых исследований . ibiblio.org. 30 января 2002 г. Проверено 9 января 2014 г.
  8. ^ Джозеф Моран (июнь 2006 г.). «Windows 2000 и 16-разрядные приложения». Умные вычисления . Том. 16, нет. 6. С. 32–33. Архивировано из оригинала 25 января 2009 года.
  9. ^ Лю, CL; Лейланд, Джеймс В. (1 января 1973 г.). «Алгоритмы планирования для мультипрограммирования в среде жесткого реального времени». Журнал АКМ . 20 (1): 46–61. дои : 10.1145/321738.321743 . ISSN  0004-5411. S2CID  59896693.
  10. ^ Эдуардо Сильендо; Такечика Кунимаса (25 апреля 2008 г.). «Руководство по производительности и настройке Linux» (PDF) . redbooks.ibm.com . ИБМ . п. 4. Архивировано из оригинала (PDF) 26 февраля 2015 года . Проверено 1 марта 2015 г.
  11. ^ «Определение переключения контекста» . linfo.org . 28 мая 2006. Архивировано из оригинала 18 февраля 2010 года . Проверено 26 февраля 2015 г.
  12. ^ «Что такое потоки (пользователь/ядро)?». tldp.org . 8 сентября 1997 года . Проверено 26 февраля 2015 г.
  13. ^ Различные методы многозадачности. По состоянию на 19 февраля 2019 г.
  14. ^ «Что такое файл подкачки?». kb.iu.edu . Проверено 26 марта 2018 г.
  15. ^ «Архитектура операционных систем». cis2.oc.ctc.edu . Проверено 17 марта 2018 г.