Рубрика «многозадачность» - 2

Нейробиологи предупреждают: многозадачность истощает энергетические резервы вашего мозга - 1
Постоянная проверка телефона снижает производительность

И вот опять — каждодневная утренняя суета: проверить электронную почту, просмотреть Фейсбук, быстренько выпить чашечку кофе, прогуглить, направляясь к поезду, одну последнюю идею, проверить уведомления, ещё кофе, пролистать рабочую электронную почту … — уф! Бесчисленное множество дел переполняет ваше утро, и постоянное переключение между ними, похоже, заметно утомляет вас.

Когда мы пытаемся заниматься несколькими делами одновременно, мы фактически не делаем больше одного дела сразу, а просто быстро переключаемся между ними. И такое переключение истощает. Оно расходует насыщенную кислородом глюкозу в головном мозге, потребляя то же топливо, которое требуется для сосредоточения на задаче.
Читать полностью »

См. две другие статьи этой группы — Делаем многозадачность и Преемптивность: как отнять процессор.

Сразу просьба к строгим читателям. Если вы не поняли какой-либо термин из применённых — спросите, я подскажу, что я имел в виду. А если вам нравится другое написание или перевод этого термина — укажите его в комментарии. Я применяю те, которые нравятся мне.

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

Как я уже говорил, шедулер — это просто функция, которая отвечает на вопрос: какую нить и на сколько времени поставить на процессор.

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

Говоря о шедулере нельзя не сказать о приоритетах.

Приоритет — свойство нити (или процесса) влияющее на конкуренцию этой нити с другими нитями за процессор.

Приоритет обычно описывается парой <класс приоритета, значение приоритета внутри класса>.
Читать полностью »

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

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

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

Но, как обычно, есть нюансы. См. код для интела.

Сам «отъём» процессора делается как в рамках обычного хардверного прерывания, обычно — по таймеру, так и в рамках «софтверного» прерывания — которое, собственно, такое же прерывание, но вызванное специальной инструкцией процессора. Такой способ переключения контекста нужен, если мы (например, в рамках примитива синхронизации) явно останавливаем нить и не хотим ждать, пока прилетит таймерное прерывание.
Читать полностью »

Я стараюсь чередовать статьи про разработку ОС вообще и специфические для ОС Фантом статьи. Эта статья — общего плана. Хотя, конечно, я буду давать примеры именно из кода Фантома.

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

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

Шедулер — это функция, которая отвечает на вопрос «какой нити отдать процессор прямо сейчас». Всё. Простейший шедулер просто перебирает все нити (но, конечно, готовые к исполнению, не остановленные) по кругу (RR алгоритм). Реальный шедулер учитывает приоритеты, поведение нити (интерактивные получают больше, чем вычислительные), аффинити (на каком процессоре нить работала в прошлый раз) и т.п., при этом умеет сочетать несколько классов приоритетов. Типично это класс реального времени (если есть хотя бы одна нить этого класса — работает она), класс разделения времени и класс idle (получает процессор только если два предыдущих класса пустые, то есть в них нет нитей, готовых к исполнению).

На сём пока про шедулер закончим.

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

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

Мы все хорошо знаем о том, что для эффективной работы нужно фокусироваться на чем-то одном и изо всех сил избегать многозадачности. И тем не менее, каким-то образом мы забываем об этом, ужиная перед экраном телевизора с открытым ноутбуком на коленях. Мы пишем письма, просматриваем ленты новостей, заглядываем в Facebook и Twitter, общаемся в чатах – все это одновременно с выполнением нашей главной задачи. И несмотря ни на что в глубине души своей мы убеждены, что способны справиться со всем этим ворохом многозадачности без вреда для нашей продуктивности, ну, или, пожалуй, с минимальными ее потерями.

Мифы о многозадачности, или Как наш мозг на неё реагирует - 1

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

Почему мы вообще беремся за несколько дел одновременно? Почему мы вырабатываем у себя привычку хвататься за все сразу?
Читать полностью »

Скажите «нет» многозадачности - 1

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

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

С недавнего времени я научился выделять время для чтения, но к сожалению, не столько чтобы за один подход прочесть достаточно объемную книгу. Поэтому я озадачился конспектированием прочитанного материала на ходу. Спасибо современным технологиям, это ни капельки не трудно. Во время чтения со смарта переключаться на OneNote и делать заметки, что может быть легче?
Читать полностью »

image

Если в течение дня вам приходится распылять свое внимание, приведенные советы по повышению производительности позволят вам сохранить контроль над своим рабочим временем.Читать полностью »

image

Что заставляет отвлекаться от работы? Вот небольшая статья о том, как избавиться от интернет-зависимости и многозадачности. Читать полностью »

Медленный процессор и маленький объем ОЗУ — это еще не значит, что на такой платформе нельзя реализовать вытесняющую многозадачность. Более того, главный смысл организации многозадачной среды — это эффективное использование процессорного времени, чтобы процессор не простаивал, пока одни программы ждут какого-либо события, а использовался другими программами. Даже на таких платформах, как ZX Spectrum (Z80 3.5МГц, 48-128кБ ОЗУ), или 8-битные микроконтроллеры AVR, организация вытесняющей многозадачности имеет большой смысл.

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js