Что такое многозадачность компьютера
Мне бы хотелось рассказать немного о многозадачности операционной системы. О концепте управления процессами и потоками с точки зрения ОС (и процессора/процессоров) как системы массового обслуживания. О том, «как это происходит».
Процессов ведь много, а ресурсы ограничены. На всех сразу не хватает. Что же делать? И вот тут возникает аналогия с системой массового обслуживания. Можно представить пул процессов как очередь в кассу. Ой, простите, в процессор. И архаичных вариантов обработки такой очереди [мне известно] три.
Предислование
Изначально я буду ориентироваться на то, что процессор один. Для упрощения. Потом расскажу, в чем, на мой, взгляд разница.
Для начала: общие сведения.
Картинка процессора
Что же такое «процесс» и в чем его отличие от «потока»? Процесс — это (грубо говоря) — заявка на реализацию чего-либо. Точнее, на потребление системных ресурсов. ОС генерирует системную информацию, в которой говорит, какие необходимы это процессу ресурсы. А так же о тех ресурсах, которые ему фактически были выделены. И это — для каждого вновь создаваемого процесса отдельно. О том, сколько ему необходимо памяти, сколько процессорного времени, и т.д.
Так о чем же я? Ах, да.
О способах обработки очереди процессов
Архаичных способов обработки очереди, как я говорила, мне известно три.
Т.е., каждому процессу выделяется определенный квант времени, после которого процессор радостно рапортует: «Свободная касса!», и получает на обслуживание следующий процесс. Текущий процесс же идет в конец очереди. Ибо «все равны». Недостатки: (грубый пример) у Вас идет видеоконференция. Очень важная. Прямо на самом интересном месте: бабах! И начинает печатается «важный» документ. Он же письмо с просьбой перенести время доставки ежедневного обеда с 13:00 на 14:00. А Ваша видеоконференция «неизвестно когда» будет возобновлена. Конечно, на практике так не бывает, потому что принтер работает по прерыванию, и там вообще все иначе. Но аналогия, мне кажется, в целом ясна.
Это когда «не все равны». Процессу назначается приоритет, и пока процесс с более высоким приоритетом не будет обслужен (ой, простите, обработан), другие к кассе (ой, простите, к процессору) подойти не смогут. Недостатки: могут быть процессы, которые из-за низкого приоритета не обработаются вообще никогда. Т.е., письмо Вы так никогда и не распечатаете.
На практике же зачастую используется подход «все равны, но некоторые ровнее». Т.е., «смешанный». Когда процессу выделяется квант времени и приоритет одновременно. Тогда процесс уходит не в конец очереди, а куда-то в «свою» середину. И там ждет.
Схема ясна, но как же обрабатываются процессы? В какой очередности? Тут все та же система массового обслуживания. Есть несколько подходов к обработке процессов в случае квантования и «смешанного» типа:
— FIFO. Первый пришел, первый вышел. (First-In-First-Out)
— LIFO. Последний пришел, первый вышел. (ИМХО, не очень честно… ) (Last-In-First-Out)
— SIRO. Ну, тут полный рандом. Service-In-Random-Out.
В случае «чистых» приоритетов таких вопросов не возникает, ясное дело.
А что же там с многопроцессорными системами?
Ведь я обещала поделиться своими мыслями на этот счет. Ну, давайте представим, что касс (процессоров) несколько. И тут те же принципы, только либо несколько очередей, и процессы попадают в рандомном или не очень порядке в очередь (что мне кажется не очень логичным, ну, например, хотя бы потому, что на новых процессорах по прежнему работают «однопроцессорные» системы). Либо так же очередь (пул, из которого берутся процессы) — одна, а обрабатывают их несколько касс. Но это исключительно мысли автора, не более того.
Может возникнуть вполне резонный вопрос.
А в чем же все-таки отличие процесса от потока?
А все просто. В начале статьи вскользь упоминалось, что программе для выполнения необходимы ресурсы и процессорное время. Так вот, система «воспринимает» процесс как заявку на любые виды ресурсов, кроме процессорного времени. Заявка на процессорное время — это поток. Именно процессорное время распределяется между потоками. Таким образом, процесс состоит из нескольких потоков. Раньше, конечно, это все было единое целое. И процесс, и поток, и все в одном, и вообще, «зачем платить больше?». Как оказалось, в данном случае мы, скорее, «платим меньше». Когда потоков несколько.
Для того, чтобы процессы не могли вмешиваться в распределение ресурсов, система их «изолирует». Предоставляет каждому из них своё виртуальное адресное пространство. Так что ни один процесс не может получить прямого доступа к командам и данным другого процесса.
При необходимости взаимодействия процессы обращаются к ОС, в буквальном смысле, как к посреднику. А она уже им помогает, выдаёт средства связи.
А вот между потоками одного и того же процесса нет полной защиты. Потому что это не только невозможно, но и никому не нужно. Чтобы обмениваться данными потокам вовсе не обязательно обращаться к ОС. Они используют общую память. Один записывает данные, другой читает. И все хорошо. Кроме того, потоки разных процессов по-прежнему хорошо защищены друг от друга.
Мультипрограммирование более эффективно на уровне потоков, а не процессов. Каждый поток имеет свой счетчик команд и стек. Задача, оформленная в виде нескольких потоков может быть выполнена быстрее за счет параллельного (или псевдопараллельного в однопроцессорной системе) выполнения её частей.
Очевидные выводы
Процесс — это заявка на потребление всех ресурсов, кроме процессорного времени. Процессы изолированы друг от друга, и включает в себя потоки. Собственно, потоки — это заявки на потребление этого самого процессорного времени.
Наибольший эффект от введения многопоточной обработки достигается в мультипроцессорных системах, в которых потоки (даже в рамках одного процесса) могут выполняться действительно параллельно, а не псевдо.
Ко всему прочему, был продемонстрировано на примере непосредственно концепт работы системы [массового обслуживания] как таковой.
Я немного «смахлевала» в начале и в середине статье, рассказывая по поводу процессорного времени для «процесса» как такового. Но не сильно, и, я надеюсь, Вы меня простите за эту вынужденную неточность.
Марат Хайрулин, эксперт Microsoft в России, продолжает исследовать нюансы работы с несколькими задачами и рассказывает о совмещении окон и разделении экрана, о вашей личной машине времени для сайтов и документов, и о реальной пользе виртуальных столов.
В прошлой заметке мы писали о том, как современная наука относится к многозадачности и делились небольшими приемами, которые помогут сосредоточиться на одной задаче. А теперь хочтим напомнить (а кого-то может быть и познакомить) с полезными возможностями, которые помогут, если решение вашей задачи требует работы сразу с несколькими приложениями.
Полезные решения для работы с несколькими приложениями
Теперь еще об одной повседневной необходимости – работе с несколькими приложениями одновременно.
Разделение экрана
Первой возможности, о которой хочу напомнить, уже много лет, и в первоначальном виде (под названием Aero Snap) она появилась еще в Windows 7. В Windows 10 ее возможности расширили и назвали Snap Assist. Речь про разделение экрана для закрепления двух (а в Windows 10 – до четырех) приложений.
Snap Assist предлагает выбрать второе окно для закрепления справа
Чтобы это сделать, нужно взять приложение за самую верхнюю полоску, поднести его к правой или левой границе экрана до появления на экране его «тени» и отпустить (тем самым, закрепив первое приложение), а затем в появившихся рядом миниатюрах других приложений выбрать второе для закрепления рядом. Сценарий несложный, работает и для мыши, и для пальца. Еще проще это можно сделать с помощью сочетания клавиш Windows + клавиши со стрелками вправо/влево. Этому сочетанию уже больше 10 лет, но у тех, кто применяет его впервые, и сейчас порой возникает ощущение «цифровой магии».
Любознательным пользователям также напомню, что в Windows 10 можно отправлять приложение в «четвертинку» экрана, перенеся его в угол (или используя дополнительно клавиши Windows + стрелки вверх/вниз). При закреплении двух приложений можно перемещать границу между ними, выделяя какому-то из приложений больше места. Чтобы выбрать приложения для закрепления на экране, можно кликнуть правой кнопкой мыши по их миниатюрам на экране «Представление задач».
Окно поверх
У меня было довольно мало ситуаций, когда требовалось закреплять окно одного приложения поверх другого (кажется, на телевизорах подобное называлось режимом «картинка в картинке»), но если у вас такая необходимость возникает, напомню в завершение заметки о двух небольших возможностях.
Мини-режим встроенного видеоплеера (приложение «Кино и ТВ», которое воспроизводит видео в Windows 10 по умолчанию). Запустите видео и нажмите на небольшую кнопку в правом нижнем углу (Воспроизвести в мини-режиме), окно с видеороликом будет размещено поверх всех окон.
Видео в режиме Окно поверх
В этом обзоре я поделился некоторыми возможностями при работе с одной или несколькими задачами, которыми пользуюсь сам. В следующих заметках продолжу разговор о приемах, которые помогут сделать нашу «цифровую жизнь» более продуктивной.
Когда в начале 60-х годов прошлого века создали первую операционную систему IBM, пользователей поразила возможность компьютера выполнять несколько функций одновременно. То есть процессор легко переключался с одной задачи на другую, постепенно доводя их все до логического завершения. Впечатлившись таким эффектом, мультизадачность попробовали перенести в сферу человеческой деятельности. Тогда показалось, что умение выполнять несколько дел одновременно – это очень полезный навык, овладев которым можно кратно повысить эффективность в работе при этом сэкономив уйму времени. Так ли это на самом деле? Давайте разбираться.
Переключение по-старому и по-новому
Переключение между приложениями – наверное то, что большинство из нас делает «на автомате», и никого, конечно, не удивит сочетание клавиш Alt + Tab. Но если одновременно нажать также и Ctrl (то есть Ctrl + Alt + Tab), то эта комбинация зафиксирует меню со всеми открытыми окнами на экране и позволит выбрать нужное приложение одним кликом мыши или касанием пальца (выбрать окно можно также с помощью стрелок на клавиатуре, а открыть – с помощью Enter). Может быть полезно, когда у вас открыто много окон.
Чуть менее известное, но тоже классическое сочетание клавиш Windows + Tab дает больше возможностей, чем кажется на первый взгляд.
Нажимая эти клавиши в актуальных версиях Windows 10, мы попадаем в раздел «Представление задач». Здесь можно не только переключаться между приложениями, но и воспользоваться «Временной шкалой» и «Виртуальными рабочими столами». К слову, вместо горячих клавиш вы можете кликнуть по кнопке «Представление задач» (обычно она расположена рядом с кнопкой «Пуск») или провести пальцем от левого края к центру сенсорного экрана. Кстати, если у вас современный ноутбук – попробуйте жест для тачпада: проведите по нему тремя пальцами вверх.
Режим Представление задач
Плюсы и минусы
Рассмотрим преимущества мультизадачности:
- При надлежащем планировании действительно можно эффективно решать несколько задач одновременно. То есть, выполняя дела, вы должны четко понимать, каких результатов должны достичь.
- Многозадачность помогает развить пластичность мышления и способность удержать в поле внимания несколько задач. Это неплохой тренажер для мозга.
- Способность делать несколько дел одновременно и делать это хорошо, помогает быстро реагировать на форс-мажорные обстоятельства, улучшает стратегическое мышление и видение ситуации. В некоторых нишах действительно полезно сразу охватить несколько направлений одновременно, проанализировать их перспективность и только потом принимать решения по каждому из них.
- Поверхностная обработка информации. Когда много всего, то мозг скользит по верхушках, не вникая в суть процессов. Такой человек берет общее изо всех сфер, но ни в одной не является профи.
- Высока вероятность ошибок. При недостаточной концентрации на задаче или при эффекте переноса данных с одной задачи на другую, неизменно совершаются ошибки. Внимание у многостаночника рассеивается, и это сильно вредит результату.
- Повышается утомляемость. Попытки ухватиться за всё сразу требует больших затрат энергии как физической, так и умственной. Человек быстрее устает, а продуктивность стремится к нулю.
- Растут горы неоконченных дел. Лихо начать 10-20 дел одновременно никто не запрещает, но не стоит ждать такого же быстрого их завершения. Из 10 начатых дел к финишной черте доводят 1-2 задачи, при этом сорвав все сроки и потратив в разы больше усилий. А что с остальными? Они лежат и ждут своей участи – годами, десятилетиями.
Последствия многозадачности бывают крайне неприятными. Увеличивается когнитивная нагрузка, то есть приходится тратить больше умственных ресурсов на обработку потока информации. Снижается продуктивность работы, многостаночники зачастую неправильно оценивают свои возможности и недооценивают силу отвлекающих факторов. Снижается способность к концентрации внимания на задаче, многозадачность не ценится в среде высоких технологий, научных исследований и других сферах со сложными алгоритмами работы.
Многозадачность приводит к выгоранию. Люди, практикующие такой подход, нарушают естественные механизмы мотивации и вознаграждения, которые имеются в нашем мозге. Нейробиология доказала, что снижение плотности серого вещества в передней поясной коре головного мозга из-за стресса приводит к потере радости от мыслительных усилий.
Совмещение дел может быть опасным для жизни и здоровья. Например, вы находитесь за рулем автомобиля и пытаетесь одновременно вести переговоры с партнером. Вероятность аварии возрастает в разы.
Резюме
Мы узнали, что такое многозадачность. Изучили, как работать в таком режиме, какие есть плюсы и минусы выполнения нескольких дел одновременно. Мультизадачность можно использовать для тренировки пластичности мозга, однако в рабочей среде полезнее развивать навык последовательного выполнения дел. Тише едешь – дальше будешь!
Современные настольные операционные системы способны одновременно обрабатывать большое количество различных процессов. На этом снимке экрана показано, как Linux Mint одновременно работает с окружением рабочего стола Xfce , Firefox , программой-калькулятором, встроенным календарем, Vim , GIMP и медиаплеером VLC .
Возможности многозадачности Microsoft Windows 1.0 1, выпущенной в 1985 году, здесь показаны программы MS-DOS Executive и Calculator.
В вычислении , многозадачности является одновременное выполнение множества задач (также известный как процессы ) в течение определенного периода времени. Новые задачи могут прерывать уже начатые до их завершения, а не ждать их завершения. В результате компьютер выполняет сегменты множества задач с чередованием, в то время как задачи совместно используют общие ресурсы обработки, такие как центральные процессоры (ЦП) и основная память . Многозадачность автоматически прерывает запущенную программу, сохраняя ее состояние (частичные результаты, содержимое памяти и содержимое регистров компьютера) и загружая сохраненное состояние другой программы и передавая ей управление. Этот " переключатель контекста" «может запускаться через фиксированные интервалы времени ( упреждающая многозадачность ), либо выполняющаяся программа может быть закодирована, чтобы сигнализировать управляющему программному обеспечению, когда она может быть прервана ( совместная многозадачность ).
Многозадачность не требует параллельного выполнения нескольких задач в одно и то же время; вместо этого он позволяет продвигаться более чем одной задаче за определенный период времени. [1] Даже на многопроцессорных компьютерах многозадачность позволяет выполнять гораздо больше задач, чем есть ЦП.
Многозадачность - обычная черта компьютерных операционных систем. Это позволяет более эффективно использовать компьютерное оборудование; если программа ожидает какого-либо внешнего события, такого как ввод пользователя или передача ввода / вывода с периферийным устройством для завершения, центральный процессор все еще может использоваться с другой программой. В системе с разделением времени несколько человек-операторов используют один и тот же процессор, как если бы он был выделен для их использования, в то время как за кулисами компьютер обслуживает множество пользователей, выполняя многозадачность их индивидуальных программ. В многопрограммных системах задача выполняется до тех пор, пока ей не придется ждать внешнего события или пока планировщик операционной системы принудительно не выгружает выполняющуюся задачу из ЦП. В реальном времени системы, подобные тем, которые предназначены для управления промышленными роботами, требуют своевременной обработки; один процессор может использоваться совместно для вычислений движения машины, обмена данными и пользовательского интерфейса. [2]
Часто многозадачные операционные системы включают меры по изменению приоритета отдельных задач, чтобы важные задания получали больше процессорного времени, чем те, которые считаются менее важными. В зависимости от операционной системы задача может быть такой же большой, как вся прикладная программа, или может состоять из более мелких потоков, которые выполняют части общей программы.
Процессор, предназначенный для использования с многозадачными операционными системами, может включать в себя специальное оборудование для безопасной поддержки нескольких задач, таких как защита памяти , и защитные кольца, которые гарантируют, что программное обеспечение надзора не может быть повреждено или нарушено программными ошибками пользовательского режима.
Термин «многозадачность» стал международным, поскольку это слово используется во многих других языках, таких как немецкий, итальянский, голландский, датский и норвежский.
«Временная шкала»
«Временная шкала» появилась в Windows 10 два года назад. Она помогает вернуться к задачам, над которыми вы работали ранее на вашем компьютере. При необходимости вы также сможете синхронизировать ее и с другими устройствами с вашей учетной записью*.
Для меня «Временная шкала» стала своеобразной машиной времени. Работа над многими проектами длится несколько дней. И если, допустим, в прошлую пятницу я работал с определенными сайтами и документами, вернувшись к этому проекту в среду, я смогу легко восстановить картину. Я просто отмотаю шкалу до нужной даты – той самой пятницы, увижу и смогу открыть те самые сайты и документы, в которые я тогда был погружен.
Поиск на Временной шкале
Поиск на «Временной шкале» тоже не раз меня выручал. В отличие от обычного поиска по файлам, я смогу искать не среди всех документов на устройстве (а их может быть очень много), а именно среди тех, с которыми я работал в последние дни. Возможно, вам знакомо сочетание Ctrl + F, запускающее поиск в Проводнике и во многих приложениях. Эта комбинация сработает и на экране «Представление задач»: то есть можно нажать сначала Windows + Tab, а затем – Ctrl + F и ввести искомое слово для поиска по «Временной шкале».
СОДЕРЖАНИЕ
На заре вычислений процессорное время было дорогим, а периферийные устройства были очень медленными. Когда компьютер запускал программу, которой требовался доступ к периферийному устройству, центральный процессор (ЦП) должен был бы прекратить выполнение программных инструкций, пока периферийное устройство обрабатывает данные. Обычно это было очень неэффективно.
Первым компьютером, использующим систему мультипрограммирования, был British Leo III, принадлежащий J. Lyons and Co. Во время пакетной обработки в память компьютера было загружено несколько различных программ, и первая из них начала работать. Когда первая программа достигла инструкции, ожидающей периферийного устройства, контекст этой программы сохранялся, а второй программе в памяти давалась возможность выполнить. Процесс продолжался до тех пор, пока все программы не завершили работу. [ необходима цитата ]
Использование мультипрограммирования было усилено появлением виртуальной памяти и технологий виртуальных машин , которые позволили отдельным программам использовать память и ресурсы операционной системы, как если бы другие одновременно выполняющиеся программы были для всех практических целей несуществующими и невидимыми для них. . [ необходима цитата ]
Мультипрограммирование не дает никаких гарантий своевременного выполнения программы. Действительно, первая программа вполне может работать часами без необходимости доступа к периферийным устройствам. Поскольку у интерактивного терминала не было пользователей, ожидавших результатов, это не было проблемой: пользователи передавали колоду перфокарт оператору и возвращались через несколько часов для распечатки результатов. Мультипрограммирование значительно сокращает время ожидания при обработке нескольких пакетов. [3] [4]
Ранние системы многозадачности использовали приложения, которые добровольно уступали время друг другу. Этот подход, который в конечном итоге был поддержан многими компьютерными операционными системами , сегодня известен как совместная многозадачность. Хотя сейчас она редко используется в более крупных системах, за исключением конкретных приложений, таких как CICS или подсистема JES2 , совместная многозадачность когда-то была единственной схемой планирования, используемой Microsoft Windows и Classic Mac OS для одновременного запуска нескольких приложений. Кооперативная многозадачность до сих пор используется в системах RISC OS . [5]
Поскольку кооперативно-многозадачная система полагается на то, что каждый процесс регулярно уступает время другим процессам в системе, одна плохо спроектированная программа может использовать все время ЦП для себя либо путем выполнения обширных вычислений, либо путем активного ожидания ; оба приведут к зависанию всей системы . В серверной среде это опасность, которая делает всю среду неприемлемо хрупкой.
Вытесняющая многозадачность позволяет компьютерной системе более надежно гарантировать каждому процессу регулярный «кусок» рабочего времени. Это также позволяет системе быстро справляться с важными внешними событиями, такими как входящие данные, которые могут потребовать немедленного внимания того или иного процесса. Операционные системы были разработаны для использования преимуществ этих аппаратных возможностей и упреждающего запуска нескольких процессов. Вытесняющая многозадачность была реализована в PDP-6 Monitor и MULTICS в 1964 году, в OS / 360 MFT в 1967 году и в Unix в 1969 году, и была доступна в некоторых операционных системах для таких небольших компьютеров, как PDP-8 DEC; это ключевая особенность всех Unix-подобных операционные системы, такие как Linux , Solaris и BSD с его производными , [6] , а также современные версии Windows.
В любое конкретное время процессы можно сгруппировать в две категории: те, которые ожидают ввода или вывода (так называемые « привязки ввода-вывода »), и те, которые полностью используют ЦП (« привязанные к ЦП »). В примитивных системах программное обеспечение часто « опрашивает » или « занято », ожидая запрошенного ввода (такого как ввод с диска, клавиатуры или сети). В это время система не выполняла полезную работу. С появлением прерываний и вытесняющей многозадачности процессы, связанные с вводом-выводом, могли быть «заблокированы» или приостановлены в ожидании поступления необходимых данных, позволяя другим процессам использовать ЦП. Поскольку поступление запрошенных данных вызовет прерывание,заблокированным процессам может быть гарантирован своевременный возврат к выполнению. [ необходима цитата ]
Самой ранней операционной системой с вытесняющей многозадачностью, доступной домашним пользователям, была Sinclair QDOS на Sinclair QL , выпущенная в 1984 году, но очень немногие люди купили машину. Amiga от Commodore , выпущенная в следующем году, была первым коммерчески успешным домашним компьютером, в котором использовалась эта технология, а его мультимедийные возможности сделали его явным предком современных многозадачных персональных компьютеров. 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]
Некоторые системы напрямую поддерживают многопоточность аппаратно .
Для любой многозадачной системы необходимо безопасное и эффективное совместное использование доступа к системным ресурсам. Доступ к памяти должен строго контролироваться, чтобы гарантировать, что ни один процесс не может случайно или намеренно прочитать или записать в области памяти за пределами адресного пространства процесса. Это делается с целью общей стабильности системы и целостности данных, а также безопасности данных.
В хорошо спроектированной и правильно реализованной многозадачной системе данный процесс никогда не может напрямую обращаться к памяти, принадлежащей другому процессу. Исключением из этого правила является общая память; например, в механизме межпроцессного взаимодействия System V ядро выделяет память для совместного использования несколькими процессами. Такие функции часто используются программным обеспечением для управления базами данных, например PostgreSQL.
Неадекватные механизмы защиты памяти либо из-за недостатков в их конструкции, либо из-за плохой реализации допускают уязвимости системы безопасности, которые могут быть потенциально использованы вредоносным программным обеспечением.
Использование файла подкачки или раздела подкачки - это способ для операционной системы предоставить больше памяти, чем доступно физически, путем сохранения частей первичной памяти во вторичной памяти . Хотя многозадачность и подкачка памяти - это два совершенно не связанных между собой техники, они очень часто используются вместе, поскольку подкачка памяти позволяет загружать больше задач одновременно. Как правило, многозадачная система позволяет запускать другой процесс, когда выполняющийся процесс достигает точки, в которой ему приходится ждать, пока некоторая часть памяти будет перезагружена из вторичного хранилища. [12]
Полностью независимые процессы не представляют больших проблем для программирования в многозадачной среде. Большая часть сложности в многозадачных системах возникает из-за необходимости разделять ресурсы компьютера между задачами и синхронизировать работу взаимодействующих задач. [ необходима цитата ]
Различные методы одновременных вычислений используются, чтобы избежать потенциальных проблем, вызванных попытками нескольких задач получить доступ к одному и тому же ресурсу. [ необходима цитата ]
Более крупные системы иногда строились с центральным процессором (-ами) и некоторым количеством процессоров ввода-вывода , что-то вроде асимметричной многопроцессорной обработки . [ необходима цитата ]
С годами системы многозадачности совершенствовались. Современные операционные системы обычно включают подробные механизмы для определения приоритетов процессов, в то время как симметричная многопроцессорная обработка привнесла новые сложности и возможности. [13]
СОДЕРЖАНИЕ
На заре вычислений процессорное время было дорогим, а периферийные устройства были очень медленными. Когда компьютер запускал программу, которой требовался доступ к периферийному устройству, центральный процессор (ЦП) должен был бы прекратить выполнение программных инструкций, пока периферийное устройство обрабатывает данные. Обычно это было очень неэффективно.
Первым компьютером, использующим систему мультипрограммирования, был British Leo III, принадлежащий J. Lyons and Co. Во время пакетной обработки в память компьютера было загружено несколько различных программ, и первая из них начала работать. Когда первая программа достигла инструкции, ожидающей периферийного устройства, контекст этой программы сохранялся, а второй программе в памяти давалась возможность выполнить. Процесс продолжался до тех пор, пока все программы не завершили работу. [ необходима цитата ]
Использование мультипрограммирования было расширено с появлением виртуальной памяти и технологии виртуальных машин , которые позволили отдельным программам использовать память и ресурсы операционной системы, как если бы другие одновременно выполняющиеся программы для всех практических целей не существовали. [ необходима цитата ]
Мультипрограммирование не гарантирует своевременного выполнения программы. Действительно, первая программа вполне может работать часами без необходимости доступа к периферийным устройствам. Поскольку у интерактивного терминала не было пользователей, ожидавших результатов, это не было проблемой: пользователи передавали колоду перфокарт оператору и возвращались через несколько часов для распечатки результатов. Мультипрограммирование значительно сокращает время ожидания при обработке нескольких пакетов. [3] [4]
Ранние системы многозадачности использовали приложения, которые добровольно уступали время друг другу. Этот подход, который в конечном итоге был поддержан многими компьютерными операционными системами , сегодня известен как совместная многозадачность. Хотя сейчас она редко используется в более крупных системах, за исключением конкретных приложений, таких как CICS или подсистема JES2 , совместная многозадачность когда-то была единственной схемой планирования, используемой Microsoft Windows и Classic Mac OS для одновременного запуска нескольких приложений. Кооперативная многозадачность до сих пор используется в системах RISC OS . [5]
Поскольку кооперативно-многозадачная система полагается на то, что каждый процесс регулярно уступает время другим процессам в системе, одна плохо спроектированная программа может использовать все время ЦП для себя либо путем выполнения обширных вычислений, либо путем активного ожидания ; оба приведут к зависанию всей системы . В серверной среде это опасность, которая делает всю среду неприемлемо хрупкой.
Вытесняющая многозадачность позволяет компьютерной системе более надежно гарантировать каждому процессу регулярный «кусок» рабочего времени. Это также позволяет системе быстро справляться с важными внешними событиями, такими как входящие данные, которые могут потребовать немедленного внимания того или иного процесса. Операционные системы были разработаны для использования преимуществ этих аппаратных возможностей и упреждающего запуска нескольких процессов. Вытесняющая многозадачность была реализована в PDP-6 Monitor и MULTICS в 1964 году, в OS / 360 MFT в 1967 году и в Unix в 1969 году, и была доступна в некоторых операционных системах для таких небольших компьютеров, как PDP-8 DEC; это ключевая особенность всех Unix-подобных операционные системы, такие как Linux , Solaris и BSD с его производными , [6] , а также современные версии Windows.
В любое конкретное время процессы можно сгруппировать в две категории: те, которые ожидают ввода или вывода (так называемые « привязки ввода-вывода »), и те, которые полностью используют ЦП (« привязанные к ЦП »). В примитивных системах программное обеспечение часто « опрашивает » или « занято », ожидая запрошенного ввода (такого как ввод с диска, клавиатуры или сети). В это время система не выполняла полезную работу. С появлением прерываний и вытесняющей многозадачности процессы, связанные с вводом-выводом, могли быть «заблокированы» или приостановлены в ожидании поступления необходимых данных, позволяя другим процессам использовать ЦП. Поскольку поступление запрошенных данных вызовет прерывание,заблокированным процессам может быть гарантирован своевременный возврат к выполнению. [ необходима цитата ]
Самой ранней операционной системой с вытесняющей многозадачностью, доступной домашним пользователям, была Sinclair QDOS на Sinclair QL , выпущенная в 1984 году, но очень немногие люди купили машину. Amiga от Commodore , выпущенная в следующем году, была первым коммерчески успешным домашним компьютером, в котором использовалась эта технология, а его мультимедийные возможности сделали его явным предком современных многозадачных персональных компьютеров. 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]
Некоторые системы напрямую поддерживают многопоточность аппаратно .
Для любой многозадачной системы важно безопасное и эффективное совместное использование доступа к системным ресурсам. Доступ к памяти должен строго управляться, чтобы гарантировать, что ни один процесс не может случайно или намеренно прочитать или записать в области памяти за пределами адресного пространства процесса. Это делается с целью общей стабильности системы и целостности данных, а также безопасности данных.
В хорошо спроектированной и правильно реализованной многозадачной системе данный процесс никогда не может напрямую обращаться к памяти, принадлежащей другому процессу. Исключением из этого правила является общая память; например, в механизме межпроцессного взаимодействия System V ядро выделяет память для совместного использования несколькими процессами. Такие функции часто используются программным обеспечением для управления базами данных, например PostgreSQL.
Неадекватные механизмы защиты памяти либо из-за недостатков в их конструкции, либо из-за плохой реализации допускают уязвимости системы безопасности, которые могут быть потенциально использованы вредоносным программным обеспечением.
Использование файла подкачки или раздела подкачки - это способ для операционной системы предоставить больше памяти, чем доступно физически, путем сохранения частей первичной памяти во вторичной памяти . Хотя многозадачность и подкачка памяти - это два совершенно не связанных между собой техники, они очень часто используются вместе, поскольку подкачка памяти позволяет загружать больше задач одновременно. Как правило, многозадачная система позволяет запускать другой процесс, когда выполняющийся процесс достигает точки, когда ему приходится ждать, пока некоторая часть памяти будет перезагружена из вторичного хранилища. [12]
Полностью независимые процессы не представляют больших проблем для программирования в многозадачной среде. Большая часть сложности в многозадачных системах возникает из-за необходимости разделять ресурсы компьютера между задачами и синхронизировать работу взаимодействующих задач. [ необходима цитата ]
Различные методы одновременных вычислений используются, чтобы избежать потенциальных проблем, вызванных попытками нескольких задач получить доступ к одному и тому же ресурсу. [ необходима цитата ]
Более крупные системы иногда строились с центральным процессором (-ами) и некоторым количеством процессоров ввода-вывода , что-то вроде асимметричной многопроцессорной обработки . [ необходима цитата ]
С годами системы многозадачности совершенствовались. Современные операционные системы обычно включают подробные механизмы для определения приоритетов процессов, в то время как симметричная многопроцессорная обработка привнесла новые сложности и возможности. [13]
Современные настольные операционные системы способны одновременно обрабатывать большое количество различных процессов. На этом снимке экрана показано, как Linux Mint одновременно работает с окружением рабочего стола Xfce , Firefox , программой-калькулятором, встроенным календарем, Vim , GIMP и медиаплеером VLC .
Возможности многозадачности Microsoft Windows 1.0 1, выпущенной в 1985 году, здесь показаны программы MS-DOS Executive и Calculator.
В вычислении , многозадачности является одновременное выполнение множества задач (также известный как процессы ) в течение определенного периода времени. Новые задачи могут прерывать уже начатые до их завершения, а не ждать их завершения. В результате компьютер выполняет сегменты множества задач с чередованием, в то время как задачи совместно используют общие ресурсы обработки, такие как центральные процессоры (ЦП) и основная память . Многозадачность автоматически прерывает запущенную программу, сохраняя ее состояние (частичные результаты, содержимое памяти и содержимое регистров компьютера) и загружая сохраненное состояние другой программы и передавая ей управление. Этот " переключатель контекста" «может запускаться через фиксированные интервалы времени ( упреждающая многозадачность ), либо выполняющаяся программа может быть закодирована, чтобы сигнализировать управляющему программному обеспечению, когда она может быть прервана ( совместная многозадачность ).
Многозадачность не требует параллельного выполнения нескольких задач в одно и то же время; вместо этого он позволяет продвигаться более чем одной задаче за определенный период времени. [1] Даже на многопроцессорных компьютерах многозадачность позволяет выполнять гораздо больше задач, чем есть ЦП.
Многозадачность - обычная черта компьютерных операционных систем. Это позволяет более эффективно использовать компьютерное оборудование; если программа ожидает какого-либо внешнего события, такого как ввод пользователя или передача ввода / вывода с периферийным устройством для завершения, центральный процессор все еще может использоваться с другой программой. В системе с разделением времени несколько человек-операторов используют один и тот же процессор, как если бы он был выделен для их использования, в то время как за кулисами компьютер обслуживает множество пользователей, выполняя многозадачность их индивидуальных программ. В многопрограммных системах задача выполняется до тех пор, пока ей не придется ждать внешнего события или пока планировщик операционной системы принудительно не выгружает выполняющуюся задачу из ЦП. В реальном времени системы, подобные тем, которые предназначены для управления промышленными роботами, требуют своевременной обработки; один процессор может использоваться совместно для вычислений движения машины, обмена данными и пользовательского интерфейса. [2]
Часто многозадачные операционные системы включают меры по изменению приоритета отдельных задач, чтобы важные задания получали больше процессорного времени, чем те, которые считаются менее важными. В зависимости от операционной системы задача может быть такой же большой, как вся прикладная программа, или может состоять из более мелких потоков, которые выполняют части общей программы.
Процессор, предназначенный для использования с многозадачными операционными системами, может включать в себя специальное оборудование для безопасной поддержки нескольких задач, таких как защита памяти , и защитные кольца, которые гарантируют, что программное обеспечение надзора не может быть повреждено или нарушено программными ошибками пользовательского режима.
Термин «многозадачность» стал международным, поскольку это слово используется во многих других языках, таких как немецкий, итальянский, голландский, датский и норвежский.
Что такое многозадачность?
Начнем с определения. Многозадачность – это возможность, умение, навык выполнять несколько процессов одновременно, переключаясь с одной задачи на другую. Изначально термин применялся сугубо в среде программирования, но постепенно перекочевал в производство и в сферу человеческой деятельности.
Скорей всего вы не раз слышали о выдающихся способностях Цезаря делать одновременно два и больше дел. Воодушевившись таким «подвигом», вы «задвинули» усердие в выполнении одного дела на дальнюю полку и попробовали переключаться с одной задачи на другую, потом на третью и так далее. Всего по чуть-чуть и что в итоге?
А на выходе вы получили несколько начатых задач и ни одной завершенной. Вдобавок ко всему вы совершенно запутались, какое дело выполнить в первую очередь, а какое отложить напоследок. И, главное, вы потратили время и ресурсы мозга впустую. Мотивация на нуле, ком незавершенных задач вырос до небес. В итоге минусовая эффективность и стрессовая ситуация. Приехали.
Умение работать в режиме многозадачности – это не такой уж полезный и ценный навык, как кажется на первый взгляд. Исследования показывают, что мультизадачность вредит трудоспособности человека. Мы не роботы к счастью, поэтому продуктивность работы во многом зависит от умения концентрироваться на выполнении одной задачи. Цепочку дел мы выполняем последовательно, завершая одно и приступая к другому. По мере достижения целей растет мотивация и желание добиваться больших успехов, экономится время. Казалось бы, схватившись за два дела сразу, время на выполнение задач должно сократиться наполовину. Но в действительности потребуется вдвое больше усилий и при этом шансы на успешное завершение сократятся.
Мы сильно преувеличиваем важность коммуникации – эта мысль кажется такой несовременной в нашу эпоху. Но, если вы планируете завершить задачу максимально эффективно и быстро, то отключите все раздражители. Это поможет сосредоточиться на задаче.
Виртуальные рабочие столы Windows 10
Концепция виртуальных рабочих столов далеко не нова. Если говорить о Windows, то одним из вариантов их использования была утилита Desktops, которую когда-то (последняя версия вышла в 2012 году) разработал Марк Руссинович. В Windows 10 виртуальные рабочие столы встроены в систему и помогают разделять потоки задач, переключаться между ними.
Если раньше вы не работали с виртуальными столами, для понимания их логики представьте такую аналогию: вам доступно несколько мониторов, на каждом вы можете открыть нужные программы, разделив их по рабочим потокам, например: на одном мониторе – работа с почтой и календарем, на другом – работа с несколькими документами Word, а на третьем – работа с браузером и OneNote. В каждый момент вы смотрите только на один монитор (виртуальный рабочий стол) со своим набором приложений. А переключаясь между виртуальными столами, вы как будто переводите взгляд с одного монитора на другой.
Перетаскивание окна для переноса его на новый виртуальный рабочий стол
Создать новый виртуальный рабочий стол можно на экране «Представление задач»: нажмите Windows + Tab и перетащите нужные окна открытых приложений на поле с надписью «+ Создать рабочий стол», и они будут перемещены на другой виртуальный рабочий стол. Можно также создать новый, пустой виртуальный стол (Windows + Ctrl + D) и уже затем открыть на нем нужные программы.
«Переводить взгляд» (то есть переключаться между настроенными рабочими столами) можно, выбирая нужный стол на экране «Представление задач», но намного удобнее переключаться с помощью горячих клавиш: Windows + Ctrl + стрелки вправо/влево, а на современных тачпадах – 4 пальца влево или вправо.
Как работать в таком режиме?
Режим многозадачности в работе – это сочетание следующих качеств: аналитическое мышление, системный подход, высокая организованность. Требования не самые простые, но чтобы их выработать, рекомендуем придерживаться следующих рекомендаций:
Многозадачность – это капризное и довольно сложное свойство психики человека. Если мы не сможем его обуздать, чтобы использовать себе во благо, то оно оседлает нас и выжмет все соки. Помните об этом!
Читайте также: