Что значит многозадачность в информатике

Многозадачность в операционных системах, виды многозадачности

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатикеМногозада́чность — свойство ОС или среды выполнения обеспечивать возможность параллельной обработки нескольких процессов. Иными словами, многозадачность — способ выполнения нескольких задач в один период времени. При этом задачи делят между собой общие ресурсы (resources sharing), помимо этого осуществляется планирование (scheduling). [1]

Система называется однозадачной,если она не обладает свойством многозадачности, т.е. задачи в ней выполняются последовательно. DOS — одноза­дачная ОС.

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

По типу наименьшего элемента управляемого кода

Процессная многозадачность.

Здесь программа — наименьший элемент управляемого кода, которым может управлять планировщик операционной системы. Известна большинству пользователей (одновременная работа в текстовом редакторе и прослушивание музыки). Многозадачная система позволяет двум или более программам выполняться одновременно.

Поточная многозадачность.

Многопоточность — специализированная форма многозадачности. Наименьший элемент управляемого кода — поток. Многопотоковая (multi-threaded) система предоставляет возможность одновременного выполнения одной программой 2 и более задач

По способу организации времени выполнения каждого процесса

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

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

Типы псевдопараллельной многозадачности

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

С Windows 95 ОС действительно контролирует и управляет процессами, потоками и их переключением. Способность ОС прервать выполняемый поток практически в любой момент времени и передать управление другому ожидающему потоку определяется термином preemptive multitasking — преимущественная, или вытесняющая, многозадачность.

Источник

Многозадачность

Многозада́чность (англ. multitasking ) — свойство операционной системы или среды программирования обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов. Истинная многозадачность операционной системы возможна только в распределённых вычислительных системах.

Существует 2 типа многозадачности [1] :

Содержание

Свойства многозадачной среды

Примитивные многозадачные среды обеспечивают чистое «разделение ресурсов», когда за каждой задачей закрепляется определённый участок памяти, и задача активизируется в строго определённые интервалы времени.

Более развитые многозадачные системы проводят распределение ресурсов динамически, когда задача стартует в памяти или покидает память в зависимости от её приоритета и от стратегии системы. Такая многозадачная среда обладает следующими особенностями:

Трудности реализации многозадачной среды

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

Кроме надёжности, многозадачная среда должна быть эффективной. Затраты ресурсов на её поддержание не должны: мешать процессам проходить, замедлять их работу, резко ограничивать память.

История многозадачных операционных систем

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

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

Впервые многозадачность операционной системы была реализована в ходе разработки операционной системы Multics (1964 год). Одной из первых многозадачных систем была OS/360 (1966 [2] ), используемая для компьютеров фирмы IBM и их советских аналогов ЕС ЭВМ. Разработки системы были сильно затянуты, и на начальное время фирма IBM выдвинула однозадачный DOS, чтобы удовлетворить заказчиков до полной сдачи OS/360 в эксплуатацию. Система подвергалась критике по причине малой надёжности и трудности эксплуатации.

В 1969 году на основе Multics была разработана система UNIX с достаточно аккуратным алгоритмическим решением проблемы многозадачности. В настоящее время на базе UNIX созданы десятки операционных систем.

На компьютерах PDP-11 и их советских аналогах СМ-4 использовалась многозадачная система RSX-11 (советский аналог — ОСРВ СМ ЭВМ), и система распределения времени TSX-PLUS, обеспечивающая ограниченные возможности многозадачности и многопользовательский режим разделения времени, эмулируя для каждого пользователя однозадачную RT-11 (советский аналог — РАФОС). Последнее решение было весьма популярно из-за низкой эффективности и надёжности полноценной многозадачной системы.

Аккуратным решением оказалась операционная система VMS, разработанная первоначально для компьютеров VAX (советский аналог — СМ-1700) как развитие RSX-11.

Первый в мире мультимедийный персональный компьютер Amiga 1000 (1984 год) изначально проектировался с расчётом на полную аппаратную поддержку вытесняющей многозадачности реального времени в ОС AmigaOS. В данном случае разработка аппаратной и программной части велась параллельно, это привело к тому, что по показателю квантования планировщика многозадачности (1/50 секунды на переключение контекста) AmigaOS долгое время оставалась непревзойдённой на персональных компьютерах.

Типы псевдопараллельной многозадачности

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

Тип многозадачности, при котором операционная система одновременно загружает в память два или более приложений, но процессорное время предоставляется только основному приложению. Для выполнения фонового приложения оно должно быть активизировано. Подобная многозадачность может быть реализована не только в операционной системе, но и с помощью программ-переключателей задач. В этой категории известна программа DESQview, работавшая под DOS и выпущенная первый раз в 1985 году.

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

Тип многозадачности, при котором следующая задача выполняется только после того, как текущая задача явно объявит себя готовой отдать процессорное время другим задачам. Как частный случай, такое объявление подразумевается при попытке захвата уже занятого объекта mutex (ядро Linux), а также при ожидании поступления следующего сообщения от подсистемы пользовательского интерфейса (Windows версий до 3.x включительно, а также 16-битные приложения в Windows 9x).

Кооперативную многозадачность можно назвать многозадачностью «второй ступени» поскольку она использует более передовые методы, чем простое переключение задач, реализованное многими известными программами (например, DOS Shell из MS-DOS 5.0 при простом переключении активная программа получает все процессорное время, а фоновые приложения полностью замораживаются. При кооперативной многозадачности приложение может захватить фактически столько процессорного времени, сколько оно считает нужным. Все приложения делят процессорное время, периодически передавая управление следующей задаче.

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

Недостатки: неспособность всех приложений работать в случае ошибки в одном из них, приводящей к отсутствию вызова операции «отдать процессорное время». Крайне затрудненная возможность реализации многозадачной архитектуры ввода-вывода в ядре ОС, позволяющей процессору исполнять одну задачу в то время, как другая задача инициировала операцию ввода-вывода и ждет её завершения.

Реализована в пользовательском режиме ОС Windows версий до 3.х включительно, Mac OS версий до Mac OS X, а также внутри ядер многих UNIX-подобных ОС, таких, как FreeBSD, а в течение долгого времени — и Linux.

Вытесняющая или приоритетная многозадачность (режим реального времени)

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

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

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

Реализована в таких ОС, как:

Проблемные ситуации в многозадачных системах

Голодание (starvation)

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

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

Голодание создаёт узкое место в системе и не дает выжать из неё максимальную производительность, ограничиваемую только аппаратно обусловленными узкими местами.

Любое голодание вне 100 % загрузки процессора может быть устранено повышением приоритета голодающей нити, возможно — временным.

Как правило, для предотвращения голодания ОС автоматически вызывает на исполнение готовые к нему низкоприоритетные потоки даже при наличии высокоприоритетных, при условии, что поток не исполнялся в течение долгого времени (

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

Гонка (race condition)

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

Устраняется добавлением необходимых блокировок и примитивов синхронизации. Обычно является легко устраняемым дефектом (забытая блокировка).

Инверсия приоритета

Поток L имеет низкий приоритет, поток M — средний, поток H — высокий. Поток L захватывает mutex, и, выполняясь с удержанием mutex’а, преемптивно прерывается потоком M, который пробудился по какой-то причине, и имеет более высокий приоритет. Поток H пытается захватить mutex.

В полученной ситуации поток H ожидает завершения текущей работы потоком M, ибо, пока поток M исполняется, низкоприоритетный поток L не получает управления и не может освободить mutex.

Устраняется повышением приоритета всех нитей, захватывающих данный mutex, до одного и того же высокого значения на период удержания mutexa. Некоторые реализации mutex’ов делают это автоматически.

Источник

Многозадачность. Как справиться с призраками посторонних дел

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатике Автор иллюстрации: John Kenn

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

О многозадачности, а точнее о том как с ней справиться, в статье и пойдет речь.

Что такое многозадачность

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

Как заметить многозадачность

Первичное действие: я отклоняюсь от темы.

На работе мы едва способны проработать час и не проверить электронную почту, отправить СМС, позвонить, посерфить в интернете, залезть на YouTube или Facebook, твитнуть что-то или поискать на Shazam отличную песню.

Во время общения едва выдерживаем часовую беседу с друзьями, не пользуясь смартфоном.

У нас всегда много дел, ведь жизнь состоит из соперничающих за внимание требований. Мы жонглируем задачами и принимаем множество решений, перезваниваем, завершаем проекты, начинаем новые, кого-то куда-то отвозим, а других людей откуда-то забираем. При этом ведем домашнее хозяйство и не теряем голову. Разве это не круто? Не это ли доказывает, что мы мастера многозадачности почти как Юлий Цезарь?

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатике

Мы постоянно перегружены, пытаясь уместить в час как можно больше дел: ответ на письмо, участие в конференции, проверка материалов для встречи. Наш ежедневник уже напоминает небольшой роман.

А еще у нас появляются необычные симптомы.

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

Для нас стало нормой во время разговора не дослушать до конца собеседника и начать придумывать ответ или мысленно его критиковать. А иногда в голову лезут посторонние мысли.
Я выключил газ?

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатикеВам не нужно сосредотачивать внимание. *вжух*

Скрытый механизм многозадачности: неспособность управлять вниманием

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

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

Представим себя в темной комнате с фонариком в руке. Наше внимание — это луч света от фонарика, мы видим только то, что попадает под него. Нужно осмотреться? Для этого надо водить фонарем из стороны в сторону, но при этом будет видно все равно только то, что освещено.

Выделяют четыре типа управления вниманием:

Например, вести автомобиль и разговаривать по телефону или читать книгу и слушать музыку. Но позже обнаружилось, что при этом страдает результативность.

Разделяя внимание на две задачи, мы начинаем делать больше ошибок и пропускать что-то в одной задаче или в обеих.

Разделенное внимание — параллельная многозадачность. При разделении внимание будет делиться между разными задачами, и одна может получить 30%, а другая 70%. Полностью сосредоточиться на чем-то одном не удастся. Такой подход будет полезен при выполнении пары дел, одно из которых выполняется на автомате. Например, когда беседуете с другом, прогуливаясь по парку.

В случае, когда требуется уделять 100% внимания выполняемой задачи, будет полезно переключение.

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

Побочные эффекты многозадачности

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

Многозадачность — враг совершенства.

Как бы не хотелось, но, занимаясь несколькими делами одновременно, не получиться уделить внимание деталям, и от этого будет страдать результат. Можно стать мастером на все руки, но в конкретном деле высот достичь не удастся. Еще одно из последствий многозадачности — потеря способности сохранять сосредоточенность. Умение сосредоточиться на одном деле более пяти секунд — почти утраченный навык.

Как преодолеть многозадачность

Тренируем однозадачность

TED 2012, Паоло Кардини рассказывает о однозадачности. Субтитры на русском языке.

Паоло Кардини, на TED 2012 предложил противоядие — однозадачность. Хотим сделать что-то хорошо — концентрируемся на текущей задаче. Главное — помнить о текущей цели. Готовим обед? Тогда ограничимся нарезкой, варкой и жаркой. Не стоит разговаривать по телефону, слушать телевизор, заказывать книгу рецептов по саге «Песнь льда и пламени». Ведем машину? Руки на руль, ноги на педали, а взгляд на дорогу. Не трогаем навигатор, не читаем СМС, не болтаем с пассажирами.

Отдыхаем с друзьями? Тогда забудем о важных письмах, звонках, работе и флирте с официантками.

Конечно, при необходимости можно и отойти немного от однозадачности: если промелькнула отличная мысль — запишем в блокнот и отложим до свободного времени. Так мы ее не забудем, а идея стала побочной задачей. Побочные задания — это как блокнот, только не блокнот, в который записывается все, что отвлекает от текущего дела. Главное ими не злоупотреблять, иначе так недалеко и до многозадачности.

Тренируем мозг

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

Замечаем ловушки

Для большинства людей ТОП ловушек такой:

Списки дел

Главное — перечень дел должен нравиться, иначе мы к нему не будет возвращаться. Не важно, где вести список дел — в блокноте или в приложении, главное чтобы это доставляло удовольствие.
Если взять список задач, то в нем почти не будет пунктов, объединяющих несколько дел. Причина проста — многозадачность интуитивно воспринимается бессмысленной. Важно выработать привычку держать список дел под рукой и регулярно сверяться с ним особенно перед началом работы. Главное — работать по порядку приоритетности задач, а если появилась какая-то новая — фиксируем ее на будущее.

Учимся говорить «нет»

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатикеНачальник дал дополнительную работу, а подруга просит помочь с проектом? А может нужна помощь в организации какого-то мероприятия в школе у ребенка?

Часто мы чувствуем себя обязанными делать что-то для других, хотя и своих забот хватает. Многие набирают кучу проектов из рвения, чувства долга или желания быть полезными, хотя отлично знают, что это им не по силам.

Мы обязаны научиться говорить «нет» и отбросить все волнения о чужих проектах и делах, еще важно при этом не корить себя за невозможность кому-то помочь.

Делегируем полномочия

Лучшее лекарство от многозадачности — попросить о помощи. Это сложно и порождает стресс, ведь доверив работу другим, забот может добавиться. Хотя это может быть неприятным, все равно стоит привлекать других. Обращение за помощью можно считать взаимовыгодным сотрудничеством, мы же помогали другим, когда они просили. Настала пора платить по счетам.

Лучший обмен взаимопомощью — просто кого-нибудь нанять.

Тренируем мозг скукой

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатике

Хотя многозадачность дает стимулы и энергию, а однозадачность навевает зевоту и оцепенение — неинтересные задачи лучше всего тренируют мозг. Не бросать долгое и утомительное дело — отличное упражнение на внимание.

На этом по многозадачности все.

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

Всем добра, и да пребудет с вами Сила!

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатике

Читайте больше статей в нашем блоге: SmartTalks

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Многозадачность (Операционные Системы)

Многозада́чность – понятие из теории операционных систем, под которым подразумевается обеспечение возможности параллельной (или псевдопараллельной) обработки нескольких процессов. Однако, идеальная многозадачность ОС возможна только в распределённых вычислительных системах.

Другими словами, многозадачностью можно назвать способ исполнения нескольких задач в один промежуток времени. При этом задачи распределяют между собой общие ресурсы (resources sharing), а также выполняют планирование (scheduling) задачи в очереди исполнения.

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

Содержание

Свойства многозадачной среды

Примитивные многозадачные среды обеспечивают чистое «разделение ресурсов», когда за каждой задачей закрепляется определённый участок памяти, и задача активизируется в строго определённые интервалы времени.

Более развитые многозадачные системы проводят распределение ресурсов динамически, когда задача стартует в памяти или покидает память в зависимости от её приоритета и от стратегии системы. Такая многозадачная среда обладает следующими особенностями:

Трудности реализации многозадачной среды

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

Кроме надёжности, многозадачная среда должна быть эффективной. Затраты ресурсов на её поддержание не должны: мешать процессам проходить, замедлять их работу, резко ограничивать память. [Источник 1]

История многозадачных операционных систем

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

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

Впервые многозадачность операционной системы была реализована в ходе разработки операционной системы Multics (1964 год). Одной из первых многозадачных систем была OS/360 (1966), используемая для компьютеров фирмы IBM и их советских аналогов ЕС ЭВМ. Разработки системы были сильно затянуты, и на начальное время фирма IBM выдвинула однозадачный DOS, чтобы удовлетворить заказчиков до полной сдачи OS/360 в эксплуатацию. Система подвергалась критике по причине малой надёжности и трудности эксплуатации.

В 1969 году на основе Multics была разработана система UNIX с достаточно аккуратным алгоритмическим решением проблемы многозадачности. В настоящее время на базе созданы десятки операционных систем.

На компьютерах PDP-11 и их советских аналогах СМ-4 использовалась многозадачная система RSX-11 (советский аналог — ОСРВ СМ ЭВМ), и система распределения времени TSX-PLUS, обеспечивающая ограниченные возможности многозадачности и многопользовательский режим разделения времени, эмулируя для каждого пользователя однозадачную RT-11(советский аналог — РАФОС). Последнее решение было весьма популярно из-за низкой эффективности и надёжности полноценной многозадачной системы.

Аккуратным решением оказалась операционная система VMS, разработанная первоначально для компьютеров VAX (советский аналог — СМ-1700) как развитие RSX-11.

Первый в мире мультимедийный персональный компьютер Amiga 1000 (1984 год) изначально проектировался с расчётом на полную аппаратную поддержку вытесняющей многозадачности реального времени в ОС AmigaOS. В данном случае разработка аппаратной и программной части велась параллельно, это привело к тому, что по показателю квантования планировщика многозадачности (1/50 секунды на переключение контекста) AmigaOS долгое время оставалась непревзойдённой на персональных компьютерах.

Многозадачность обеспечивала также фирма Microsoft в операционных системах Windows. При этом Microsoft выбрала две линии разработок — на базе приобретённой ею Windows 0.9, которая после долгой доработки системы, изначально обладавшей кооперативной многозадачностью, аналогичной Mac OS, вылилась в линейку Windows 3.x, и на основе идей, заложенных в VMS, которые привели к созданию операционных систем Windows NT. Использование опыта VMS обеспечило системам существенно более высокую производительность и надёжность. По времени переключения контекста многозадачности (квантование) только эти операционные системы могут быть сравнимы с AmigaOS и UNIX(а также его потомками, такими, как ядро Linux).

Классификация

По типу наименьшего элемента управляемого кода

Процессная многозадачность.

Здесь программа — наименьший элемент управляемого кода, которым может управлять планировщик операционной системы. Известна большинству пользователей (одновременная работа в текстовом редакторе и прослушивание музыки). Многозадачная система позволяет двум или более программам выполняться одновременно.

Процесс — это понятие, относящееся к операционной системе. Каждый раз при запуске приложения создается и запускается новый процесс. С каждым процессом связаны следующие ресурсы, как:

Поточная многозадачность.

Многопоточность — специализированная форма многозадачности. Наименьший элемент управляемого кода — поток. Многопотоковая (multi-threaded) система предоставляет возможность одновременного выполнения одной программой 2 и более задач (потоков). Поток (thread) — это основной элемент системы, которому ОС выделяет машинное время. Поток может выполнять какую-то часть общего кода процесса, в том числе и ту часть, которая в это время уже выполняется другим потоком.

По способу организации времени выполнения каждого процесса

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

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатике

Рисунок 1 – Propeller Parallax

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

Типы псевдопараллельной многозадачности

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

16-и разрядная Windows уже стала поддерживать и вытесняющую многозадачность (non-preemptive multitasking). Такой тип многозадачности стал возможен благодаря основанной на сообщениях архитектуре Windows.Windows – программа может находиться в памяти и не выполняться до тех пор, пока не получила сообщение. Ранее, эти сообщения часто являлись прямым или косвенным результатом ввода информации пользователем с клавиатуры или мыши. Сейчас, механизм посылки сообщений широко используется и для обмена данными, инициации какого-либо действия приложения и т.п.

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

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

ПлюсыМинусы
простота реализациизатруднена оперативная реакция на внешние события
предсказуемость в поведении, исключение некоторых нежелательных ситуаций, таких как голодание (starvation),гонка (race condition)незащищенность задач друг от друга, снижение надёжности системы — как правило одна неправильно работающая задача блокирует или нарушает работу остальных
минимальные требования к системе и минимизация затрат ресурсов
Совместная или кооперативная многозадачность

Первые операционные системы, реализованные на персональных компьютерах, сильно уступали в концептуальном плане и по своим реальным возможностям системам с разделением времени, давно реализованным в mainframe- компьютерах. В Win 16, например, тоже существует понятие многозадачности. Реализовано оно следующим образом: обработав очередное сообщение, приложение передает управление операционной системе, которая может передать управление другому приложению. Такой вид многозадачности, при котором операционная система передает управление от одного приложения другому не в любой момент времени, а только когда текущее приложение отдает управление системе, получил, как было упомянуто, название кооперативной многозадачности (cooperative multi-tasking).

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

Схема обработки прерывания следующая:

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

Реализация вытесняющей многозадачности в Windows 2000 дает не только возможность плавного переключения задач, но и устойчивость среды к зависаниям, так как ни одно приложение не может получить неограниченные права на процессорное время и другие ресурсы. Так система создает эффект одновременного выполнения нескольких приложений. Если компьютер имеет несколько процессоров, то системы Windows NT/2000 могут действительно совмещать выполнение нескольких приложений. Если процессор один, то совмещение остается иллюзией. Когда заканчивается квант времени, отведенный текущей программе, система ее прерывает, сохраняет контекст и отдает управление другой программе, которая ждет своей очереди. Величина кванта времени (time slice) зависит от ОС и типа процессора, в Windows NT она в среднем равна 20 мс. Следует отметить, что добиться действительно одновременного выполнения потоков можно только на машине с несколькими процессорами и только под управлением Windows NT/2000, ядра которых поддерживают распределение потоков между процессорами и процессорного времени между потоками на каждом процессоре. Windows 95 работает только с одним процессором. Даже если у компьютера несколько процессоров, под управлением Windows 95 задействован лишь один из них, а остальные простаивают. [Источник 3]

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатике

Рисунок 2 – Переключение потоков

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

Диспетчеризация

Эффективность многозадачной системы во многом зависит от способа диспетчеризации задач на исполнение.

Состояние задачи

Для понимания диспетчеризации важным является понятие состояния задачи. Основные состояния задач такие:

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

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

Стратегии диспетчеризации

Известно несколько основных стратегий диспетчеризации:

Программная реализация многозадачности

Когда пользователь запускает программу, Windows создает в памяти компьютера экземпляр программы, называемый процессом. Процесс не является точной копией *.ехе – файла, как это было, например в операционной системе DOS. Процесс содержит в себе копию *.ехе – файла, а также некоторую другую информацию о функционировании данного приложения. В этой дополнительной информации хранятся, например, границы выделенной приложению памяти, что помогает отслеживать корректность обращения к оперативной памяти со стороны приложения. Так как Windows поддерживает механизм виртуальной памяти, то среди этой информации находятся сведения о расположении сегментов программы. Здесь же содержится командная строка, формируемая при запуске программы.

Запустить процесс можно как при помощи командной строки системного меню Windows, при помощи программы Проводника, так и программно, из другого приложения. Это можно выполнить при помощи функций API :

Для 16-битных приложений используется функция WinExec :

Первый параметр является командной строкой, в которой указывается имя файла и параметры, указываемые после имени загружаемого файла.

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

В среде Windows 32 следует использовать другой способ порождения процессов:

Первый параметр является указателем на имя запускаемого файла. Имя может содержать полный путь к файлу (диск:\каталог\…\файл). Если имя не содержит пути, то операционная система ищет файл в текущем каталоге, затем в системных каталогах и в каталогах, указанных в разделе PATH при загрузке системы.

Второй параметр указывает на командную строку.

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

bInheritHandles и dwCreationFlags содержит дополнительные флаги управления созданием и приоритетом процесса.

lpEnvironment содержит указатель на буфер памяти, в котором будет создаваться служебная информация по процессу. Если равен NULL, то операционная система сама отводит место в памяти под эту информацию.

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

lpProcessInformation указатель на структуру, заполняемую после создания нового процесса. Структура содержит информацию о созданном процессе.

Многопоточность в программе реализовать можно несколькими путями.

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

Использование системного таймера для организации посылки синхронных сообщений выбранному окну (порядок организации описан в лекции «Использование Таймера»). С помощью данного способа реализуется невытесняющая многозадачность. Достоинство – изменяемая периодичность посылки сообщений. Недостаток – природа синхронных сообщений не гарантирует четкое выполнение периода прихода сообщений от таймера.

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

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

Четвертый параметр определяет дополнительные флаги создания потока. Если этот параметр равен нулю, то поток создастся немедленно.

Последний параметр является адресом переменной, в которую возвращается идентификатор потока.

Использование функции Sleep

Итак, поток – это часть программы, запускаемая параллельно другим задачам процесса. Поток сам определяет как долго ему находится в памяти и какие действия надо совершать. Если поток должен периодически совершать одни и те же действия (например, обновлять экран или проверять почту), то самым естественным способом сделать это является организация бесконечного цикла (подобного циклу обработки сообщений). Однако, в этом случае не определено время цикличности, т.к. временные периоды выполнения потока определены операционной системой. Кроме того, как только одна итерация цикла заканчивается, начинается другая. Как же вызвать приостановку выполнения потока? Для этих целей существует функция Sleep, которая в качестве единственного параметра имеет время, задаваемое в миллисекундах. Функция не осуществляет возврата до тех пор, пока не истечет указанное время. При этом другие потоки и процессы работают в обычных режимах. Если параметр этой функции равен нулю, то операционная система просто лишает текущий поток оставшегося кванта времени.

Следует отметить, что данная функция не освобождает полностью процессор от исполнения потока. Действительно, процессор периодически должен проверять истекло ли время, заданное в функции. То есть, речь идет не о приостановке периодического выполнения потока, а лишь о задержке выполнения алгоритма потока на одной его команде (Sleep). [Источник 4]

Критические разделы

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

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

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

Данный участок потока называется критическим разделом. Существует четыре функции работы с критическим разделом. Чтобы их использовать необходимо определеить объект типа критический раздел:

Объект типа критический раздел сначала должен быть инициализирован одним из потоков программы с помощью функции:

Эта функция создает критический раздел с именем cs.После инициализации объекта «критический раздел» поток входит в критический раздел, вызывая функцию:

В этот момент поток становиться владельцем объекта. Два различных потока не могут быть владельцами одного объекта одновременно. Следовательно, если один поток вошел в критический раздел, то следующий поток, вызывая функцию EnterCriticalSection(&cs) ; с тем же самым объектом, будет задержан внутри функции. Возврат из функции произойдет только тогда, когда первый поток покинет критический раздел, вызвав функцию:

Когда критический раздел больше не нужен вашей программе, его можно удалить с помощью функции:

Это приведет к освобождению всех ресурсов системы, задействованных для поддержки объекта критический раздел.

Программа может создавать несколько критических разделов. Существенное ограничение при использовании критических разделов состоит в том, что таким образом можно синхронизировать только потоки одного процесса и нельзя осуществить синхронизацию процессов (действительно, ведь переменная cs объявлена в процессе и не видна из других процессов). [Источник 4]

Использование событий

Альтернативным вариантом синхронизации является использование событий. Объект событие может быть либо свободным (signaled) или установленным (set), либо занятым (non-signaled) или сброшенным (reset). Вы можете создать объект «событие» с помощью функции:

Параметр fInitial устанавливается в TRUE, если вы хотите, чтобы объект Событие был изначально свободным, или в FALSE, чтобы он был занятым.

Параметр psz Name определяет имя события. По этому имени разные процессы могут использовать одно событие.

Для того, чтобы сделать свободным существующий объект Событие, надо вызвать функцию:

Чтобы сделать объект Событие занятым, вызывается функция:

Для синхронизации используется функция:

где второй параметр имеет значение INFINITE. Возврат из функции происходит немедленно, если объект событие в настоящее время свободен. В противном случае поток будет приостановлен в функции до тех пор, пока событие не станет свободным. Вы можете установить значение тайм-аута во втором параметре, задав его величину в миллисекундах. Тогда возврат из функции произойдет, когда объект Событие станет свободным или истечет тайм-аут.

Проблемные ситуации в многозадачных системах

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатике

Рисунок 3 – Взаимосвязь потоков и процессов

Голодание (starvation)

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

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

Голодание создаёт узкое место в системе и не дает выжать из неё максимальную производительность, ограничиваемую только аппаратно обусловленными узкими местами.

Любое голодание вне 100 % загрузки процессора может быть устранено повышением приоритета голодающей нити, возможно — временным.

Как правило, для предотвращения голодания ОС автоматически вызывает на исполнение готовые к нему низкоприоритетные потоки даже при наличии высокоприоритетных, при условии, что поток не исполнялся в течение долгого времени (

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

Гонка (race condition)

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

Устраняется добавлением необходимых блокировок и примитивов синхронизации. Обычно является легко устраняемым дефектом (забытая блокировка).

Инверсия приоритета

Поток L имеет низкий приоритет, поток M — средний, поток H — высокий. Поток L захватывает mutex, и, выполняясь с удержанием mutex’а, прерывается потоком M, который пробудился по какой-то причине, и имеет более высокий приоритет. Поток H пытается захватить mutex.

В полученной ситуации поток H ожидает завершения текущей работы потоком M, ибо, пока поток M исполняется, низкоприоритетный поток L не получает управления и не может освободить mutex.

Устраняется повышением приоритета всех нитей, захватывающих данный mutex, до одного и того же высокого значения на период удержания mutexa. Некоторые реализации mutex’ов делают это автоматически. [Источник 4]

Процессы в Windows и потоковая многозадачность

Что значит многозадачность в информатике. Смотреть фото Что значит многозадачность в информатике. Смотреть картинку Что значит многозадачность в информатике. Картинка про Что значит многозадачность в информатике. Фото Что значит многозадачность в информатике

Рисунок 4 – Пример работы планировщика

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

Многозадачность в Linux

К каждому процессу в системе привязаны идентификатор процесса PID (Process IDentifier) и идентификатор родительского процесса PPID (Parent Process IDentifier). Для каждого процесса PID является уникальным (в конкретный момент времени), а PPID равен идентификатору процесса-родителя.

Использование getpid() и getppid()

Процесс может узнать свой идентификатор (PID), а также родительский идентификатор (PPID) при помощи системных вызовов getpid() и getppid().

Системные вызовы getpid() и getppid() имеют следующие прототипы: pid_t getpid (void) ; pid_t getppid (void) ;

Проверим теперь, как работает эта программа. Для этого откомпилируем и запустим ее:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *