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

Современные настольные операционные системы способны одновременно обрабатывать большое количество различных процессов. Этот снимок экрана показывает Linux Mint работает одновременно Xfce окружение рабочего стола, Fire Fox, программа-калькулятор, встроенный календарь, Vim, GIMP, и Медиаплеер VLC.
Возможности многозадачности Microsoft Windows 1.0 1 выпущен в 1985 году, здесь показаны программы MS-DOS Executive и Calculator.

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

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

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

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

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

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

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

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

Первым компьютером, использующим систему мультипрограммирования, был британский Лев III принадлежит J. Lyons and Co. В течение пакетная обработка, в память компьютера загрузилось несколько разных программ, и первая начала работать. Когда первая программа достигла инструкции, ожидающей периферийного устройства, контекст этой программы был сохранен, а второй программе в памяти была предоставлена ​​возможность выполнить. Процесс продолжался до завершения работы всех программ.[нужна цитата ]

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

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

Совместная многозадачность

Ранние системы многозадачности использовали приложения, которые добровольно уступали время друг другу. Этот подход, который в конечном итоге был поддержан многими компьютерными операционные системы, сегодня известна как совместная многозадачность. Хотя сейчас он редко используется в более крупных системах, за исключением определенных приложений, таких как CICS или JES2 подсистемы, совместная многозадачность когда-то была единственной схемой планирования, используемой Майкрософт Виндоус и Классическая Mac OS для одновременного запуска нескольких приложений. Кооперативная многозадачность все еще используется в ОС RISC системы.[5]

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

Вытесняющая многозадачность

Вытесняющая многозадачность позволяет компьютерной системе более надежно гарантировать каждому процессу регулярный «кусок» времени работы. Это также позволяет системе быстро обрабатывать важные внешние события, такие как входящие данные, которые могут потребовать немедленного внимания того или иного процесса. Операционные системы были разработаны для использования этих аппаратных возможностей и упреждающего запуска нескольких процессов. Вытесняющая многозадачность была реализована в Монитор PDP-6 и МУЛЬТИКА в 1964 г., в OS / 360 MFT в 1967 г., а в Unix в 1969 г. и был доступен в некоторые операционные системы для компьютеров размером с PDP-8 от DEC; это ключевая особенность всех Unix-подобный операционные системы, такие как Linux, Солярис и BSD с этими производные,[6] а также современные версии Windows.

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

Самой ранней операционной системой с вытесняющей многозадачностью, доступной домашним пользователям, была Синклер QDOS на Sinclair QL, выпущен в 1984 году, но машину мало кто покупал. Коммодора Amiga, выпущенный в следующем году, был первым коммерчески успешным домашним компьютером, в котором использовалась эта технология, а его мультимедийные возможности сделали его явным предком современных многозадачных персональных компьютеров. Microsoft сделали вытесняющую многозадачность основной функцией своей флагманской операционной системы в начале 1990-х годов при разработке Windows NT 3.1 а потом Windows 95. Позже он был принят на Apple Macintosh компанией Mac OS X что, как Unix-подобный Операционная система использует вытесняющую многозадачность для всех собственных приложений.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. ^ «Параллелизм против параллелизма, параллельное программирование против параллельного программирования». Oracle. Архивировано из оригинал 7 апреля 2016 г.. Получено 23 марта, 2016.
  2. ^ Энтони Ральстон, Эдвин Д. Рейли (редактор),Энциклопедия компьютерных наук, третье издание, Ван Ностранд Рейнхольд, 1993, ISBN  0-442-27679-6, статьи «Многозадачность» и «Многопрограммирование»
  3. ^ Литми (20 мая 2019 г.). «В чем разница между пакетной обработкой и мультипрограммированием». Pediaa.Com. Получено 2020-04-14.
  4. ^ «Эволюция операционной системы». 2017-09-29. Получено 2020-04-14.
  5. ^ «Вытесняющая многозадачность». riscos.info. 2009-11-03. Получено 2014-07-27.
  6. ^ «UNIX, часть первая». Инициатива цифровых исследований. ibiblio.org. 2002-01-30. Получено 2014-01-09.
  7. ^ Джозеф Моран (июнь 2006 г.). «Windows 2000 и 16-битные приложения». Умные вычисления. Vol. 16 нет. 6. С. 32–33. Архивировано из оригинал 25 января 2009 г.
  8. ^ Эдуардо Чилиендо; Такечика Кунимаса (25 апреля 2008 г.). «Рекомендации по настройке и производительности Linux» (PDF). redbooks.ibm.com. IBM. п. 4. Архивировано из оригинал (PDF) 26 февраля 2015 г.. Получено 1 марта, 2015.
  9. ^ «Определение переключения контекста». linfo.org. 28 мая 2006 г. Архивировано с оригинал 18 февраля 2010 г.. Получено 26 февраля, 2015.
  10. ^ "Что такое потоки (пользователь / ядро)?". tldp.org. 8 сентября 1997 г.. Получено 26 февраля, 2015.
  11. ^ Многозадачность разными методами Доступ 19 февраля 2019 г.
  12. ^ "Что такое файл подкачки?". kb.iu.edu. Получено 2018-03-26.
  13. ^ «Архитектура операционных систем». cis2.oc.ctc.edu. Получено 2018-03-17.