Многозадачность.Реализация многозадачности в Windows 2003. Многозадачность виндовс


Режимы многозадачности

23

Presentation Manager и последовательная очередь сообщений

Первой попыткой фирмы Microsoft (в сотрудничестве с IBM) внедрить многозадачность в квази-DOS/Windowsоболочку была система OS/2 и Presentation Manager (PM). Хотя OS/2, конечно, поддерживала вытесняющую многозадачность, часто казалось, что это вытеснение не было перенесено в PM. Дело в том, что PM выстраивал в очередь сообщения, формируемые в результате пользовательского ввода от клавиатуры или мыши. Это означает, что PM не предоставляет программе такое пользовательское сообщение до тех пор, пока предыдущее сообщение, введенное пользователем, не будет полностью обработано.

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

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

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

Решения, использующие многопоточность

Выше был рассмотрен Presentation Manager операционной системы OS/2 только из-затого, что это была первая оболочка, которая подготовила сознание некоторых ветеранов программирования под Windows (в том числе и автора) к введению многопоточности. Интересно, чтоограниченная поддержка многопоточности в PM дала программистам основную идею организации программ, использующих многопоточность. Хотя эти ограничения сейчас преимущественно преодолены в Windows 95, тем не менее уроки, полученные при работе с более ограниченными системами, остаются актуальными и по сей день.

Вмногопоточной среде программы могут быть разделены на части, называемые потоками выполнения (threads), которые выполняются одновременно. Поддержка многопоточности оказывается лучшим решением проблемы последовательной очереди сообщений в PM и приобретает полный смысл при ее реализации в Windows 95.

Втерминах программы "поток" — это просто функция, которая может также вызывать другие функции программы. Программа начинает выполняться со своего главного (первичного) потока, который в традиционных программах на языке C является функцией main, а вWindows-программах—WinMain. Будучи выполняемой, функция может создавать новые потоки обработки, выполняя системный вызов с указанием функции инициализации потока (initial threading function). Операционная система в вытесняющем режиме переключает управление между потоками подобно тому, как она это делает с процессами.

ВPM системы OS/2 любой поток может либо создавать очередь сообщений, либо не создавать. PM-потокдолжен создавать очередь сообщений, если он собирается создавать окно. С другой стороны, поток может не создавать очередь сообщений, если он осуществляет только обработку данных или графический вывод. Поскольку потоки, не создающие очереди сообщений, не обрабатывают сообщения, то они не могут привести к "зависанию" системы. На поток, не имеющий очереди сообщений, накладывается только одно ограничение — он не может посылать асинхронное сообщение в окно потока, имеющего очередь сообщений, или вызыватькакую-либофункцию, если это приведет к посылке сообщения. (Однако эти потоки могутпосылать синхронные сообщения потокам, имеющим очередь сообщений.)

Таким образом, программисты, работавшие с PM, научились разбивать свои программы на один поток с очередью сообщений, создающий все окна и обрабатывающий сообщения для них, и один или несколько потоков, не имеющих очередей сообщений, и выполняющих продолжительные действия в фоновом режиме. Кроме того, программисты, работавшие с PM, узнали о "правиле 1/10 секунды". Оно состоит в том, что поток с очередью сообщений тратит не более 1/10 секунды на обработку любого сообщения. Все, что требует большего времени, следовало выделять в отдельный поток. Если все программисты придерживались этого правила, то никакая PMпрограмма не могла вызвать зависание системы более чем на 1/10 секунды.

Многопоточная архитектура

studfiles.net

55. Реализация многозадачности в Windows nt

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

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

И, наконец, третья, последняя, но от этого не менее веская, причина. Затрагивает она программирование и, следовательно, программистов. Дело в том, что сложность разработки программного продукта, а вместе с ней стоимость, длительность, количество ошибок и т.п., возрастают с размером самой программы отнюдь не линейно: написать пять программ по двадцать тысяч строк гораздо легче, чем одну в сто тысяч. Поэтому, если есть возможность разбить крупный проект, реализовать части по отдельности, а затем объединить в рамках единого приложения - это, как правило, приводит к существенному повышению надежности и, опять-таки, сокращению сроков разработки, необходимых ресурсов и т.п. Разумеется, что эти отдельные блоки должны выполняться параллельно. Кроме всего, такой подход позволяет, один раз вложив деньги, получать многократную отдачу.

Например, создав модуль архивного копирования один раз, можно затем многократно использовать его при разработке других программ.

Давайте проследим, как менялся механизм реализации многозадачности в процессе эволюции операционных систем: MS DOS - Windows - Windows95. DOS с ее командной строкой, тем не менее, была многозадачной операционной системой. Конечно, весьма примитивной, однако и работать она могла на 86-м процессоре с 256-ю килобайтами памяти, сравните с 16-ю мегабайтами и пентиумом, необходимыми для нормальной работы Windows95.

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

После того, как программа обработки прерывания выполнит свою задачу, работа компьютера продолжается с того самого места, где она остановилась в момент возникновения прерывания. Простейший пример многозадачной работы MS DOS - резидентный русификатор клавиатуры. Программа загружается в память один раз, как правило, из файла autoexec.bat при старте системы. Каждый раз при нажатии клавиши русификатор получает управление и преобразует скан-код физической клавиши в код русской или английской буквы, в зависимости от текущего режима.

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

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

Каждая Windows программа - это цикл. Из очереди сообщений извлекается одно и обрабатывается, затем все повторяется сначала, пока не поступит специальное сообщение-сигнал о завершении приложения. Причем, пока одна программа занята обработкой сообщения, все остальные терпеливо ожидают завершения этого процесса. Единственный способ организовать длительную обработку информации так, чтобы другие приложения не "застыли" - разбить весь процесс на небольшие части и в перерывах между ними передавать управление системе. Теперь представим, что одновременно с текстовым редактором работает дефрагментатор диска. Программа считала несколько секторов, внесла изменения в FAT, а перед записью передала управление редактору, который взял да и завис. Дефрагментатор уже никогда не получит управление обратно, что скорее всего приведет к потере данных и краху всей системы, после которого поможет только холодная перезагрузка.

Многозадачность, используемая в операционных системах Windows95 и Windows NT, носит название вытесняющей или приоритетной (preemptive) многозадачности. Время работы процессора разбивается на небольшие отрезки - кванты. Каждая задача имеет свой приоритет, от которого зависит, сколько квантов для выполнения будет выделено ей операционной системой, после чего эта задача будет прервана (вытеснена) и управление перейдет к следующей по очереди. Задачей в данном контексте может быть не только отдельная программа, но и ее часть, выделенная в т.н. поток (thread). Так, в седьмой версии MS Word'a как поток выделено открытие файла и, если вы решили открыть большой файл, а затем передумали, то можно закрыть Word, не дожидаясь, пока на экране появится текст.

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

К сожалению, в среде Windows95 в режиме вытесняющей многозадачности выполняются только 32-х разрядные приложения. Старые - 16-ти разрядные - по-прежнему работают с очередью сообщений, как под Windows 3.1, со всеми вытекающими отсюда последствиями. В чем, наверняка, каждый пользователь имел печальную возможность убедиться.

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

studfiles.net

Введение

28

Windows Vista – это версия Microsoft Windows, из серии графических операционных систем для персональных компьютеров.

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

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

Объектом исследования в данной работе являются операционная система Windows Vista. Предметом исследования – реализация многозадачности в Windows Vista.

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

Глава 1. Сущность многозадачности

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

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

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

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

  • Каждая задача имеет свой приоритет, в соответствии с которым получает время и память.

  • Система организует очереди задач так, чтобы все задачи получили ресурсы, в зависимости от приоритетов и стратегии системы.

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

  • По окончании положенного кванта времени задача может временно выбрасываться из памяти, отдавая ресурсы другим задачам, а потом через определённое системой время, восстанавливаться в памяти (свопинг).

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

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

  • Система распознаёт сбои и зависания отдельных задач и прекращает их.

  • Система гарантирует каждой задаче, что рано или поздно она будет активирована.

  • Система обрабатывает запросы реального времени.

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

Распределение процессов между имеющимися ресурсами носит название «планирование процессов».Существует два основных типа процедур планирования процессов –вытесняющие (preemptive) и невытесняющие (non-preemptive).

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

Вытесняющая многозадачность(preemptive multitasking) – это такой способ, при котором решение о переключении процессора с выполнения одного процесса на выполнение другого процесса принимается планировщиком операционной системы, а не самой активной задачей.

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

studfiles.net

улучшенная многозадачность и разъяснение работы обновленной функции Snap

Долгожданное обновление Windows 8.1 Preview официально попало в Интернет сразу после того, как Microsoft представила его миру во время своей конференции Build 2013. Этот пост будет полностью посвящен одному из лучших аспектов новой версии ОС: многозадачность на компьютерах с одним и несколькими мониторами с использованием функции Snap.

Как вы знаете, в Windows 8 функция Snap позволяет одновременно использовать несколько приложений с интерфейсом Modern. Более того, с данной функцией вы можете одновременно находится и на рабочем столе, и в интерфейсе любого Modern-приложения. Впрочем, два одновременно открытых приложения могут занимать только 20% или 80% от площади экрана.

Windows 8.1: улучшенная многозадачность и разъяснение работы обновленной функции Snap

Windows 8.1 Preview снимает это ограничение, а ограничение на максимальное количество приложений, бок о бок закрепленных на экране, теперь зависит только от размера дисплея. Кроме того, теперь вы можете закреплять приложения из Windows Store на нескольких мониторах, в то время как Windows 8 позволяет делать это только на одном мониторе.

Windows 8.1: улучшенная многозадачность и разъяснение работы обновленной функции Snap

В Windows 8.1 Preview число вариаций закрепления приложений сводится к тому, сколько пикселей есть в вашем распоряжении. Другими словами, чем больше разрешение вашего монитора, тем больше приложений и вариантов расположения вы получите. Например, на дисплее с разрешением 1366×768 вы сможете закрепить два приложения в соотношениях 50:50, 40:60 и 30:70, а экран с разрешением 1920 на 1080 точек обеспечит вам возможность для одновременной работы с тремя приложениями.

Регулировка размера каждого приложения на экране работает так же, как и в Windows 8, но с гораздо большей гибкостью. Также в Windows 8.1 вы можете использовать рабочий стол в очень «тонком» режиме – в предыдущей версии операционной системы в таком режиме рабочий стол сводился к панели с миниатюрами открытых программ и окон.

Windows 8.1: улучшенная многозадачность и разъяснение работы обновленной функции Snap

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

Windows 8.1: улучшенная многозадачность и разъяснение работы обновленной функции Snap

В дальнейшем мы рассмотрим другие особенности в Windows 8.1 Preview, а на этом пока все.

compsch.com

Многозадачность.Реализация многозадачности в Windows 2003 — КиберПедия

В современных полновесных реализациях Windows планировщик ядра выделяет процессорное время потокам. Управление волокнами возложено на приложения пользователя: Windows предоставляет набор функций, с помощью которых приложение может управлять созданными волокнами. Фактически для волокон реализуется невытесняющая многозадачность средствами приложения; с точки зрения операционной системы, все волокна должны быть созданы в рамках потоков (один поток может быть "расщеплен" на множество волокон средствами приложения) и система никак не вмешивается в их планирование.В Windows определен список событий, которые приводят к перепланированию потоков:· создание и завершение потока; · выделенный потоку квант исчерпан; · поток вышел из состояния ожидания; · поток перешел в состояние ожидания; · изменен приоритет потока; · изменена привязка к процессору.В целях уменьшения затрат на планирование потоков несколько изменен граф состояний потока. Переход из состояния "готовность" в состояние "выполнение" сделан в два этапа - выбранный к выполнению поток подготавливается к выполнению и переводится в состояние "выбран"; эта подготовка может осуществляться до наступления момента перепланирования, и в нужный момент достаточно просто переключить контекст выполняющегося потока на выбранный.Также в два этапа может происходить переход из состояния "ожидание" в "готовность": если ожидание было долгим, то стек потока может быть выгружен из оперативной памяти. В этом случае поток переводится в промежуточное состояние до завершения загрузки стека - в списке готовых к выполнению потоков находятся только те, которые можно начать выполнять без лишнего ожидания.При выборе потока для выполнения учитываются приоритеты потоков (абсолютные приоритеты) - система начинает выполнять код потока с наибольшим приоритетом из числа готовых к исполнению.Процесс выбора потока для выполнения усложняется в случае SMP систем, когда помимо приоритета готового к исполнению потока учитывается, на каком процессоре ранее выполнялся код данного потока.В Windows выделяют понятие "идеального" процессора - им назначается процессор, на котором запускается приложение в первый раз. В дальнейшем система старается выполнять код потока именно на этом процессоре - для SMP систем это решение улучшает использование кэш-памяти, а для NUMA систем позволяет, по большей части, ограничиться использованием оперативной памяти, локальной для данного процессора. Заметим, что диспетчер памяти Windows при выделении памяти для запускаемого процесса старается учитывать доступность памяти для назначенного процессора в случае NUMA системы.В многопроцессорной системе используется либо первый простаивающий процессор, либо, при необходимости вытеснения уже работающего потока, проверяются идеальный процессор, последний использовавшийся и процессор с наибольшим номером. Если на одном из них работает поток с меньшим приоритетом, то последний вытесняется и заменяется новым потоком; в противном случае выполнение потока откладывается (даже если в системе есть процессоры, занятые потоками с меньшим приоритетом).Современные реализации Windows в рамках единого дерева кодов могут быть использованы для различных классов задач - от рабочих станций, обслуживающих преимущественно интерфейс пользователя, до серверных установок на многопроцессорных машинах. Чтобы можно было эффективно использовать одну ОС в столь разных классах систем, планировщик Windows динамически изменяет длительность квантов и приоритеты, назначаемые потокам. Администратор системы может в некоторой степени изменить поведение системы при назначении длительности квантов и приоритетов потоков.Управление длительностью кванта связано с активностью процесса, которая определяется наличием интерфейса пользователя (GUI или консоль) и его активностью. Если процесс находится в фоновом режиме, то длительность назначенного ему кванта соответствует "нулевым" колонкам таблицы 6.1 (выделены серым цветом; т.е. длительности 6 или 24 - для переменной длины кванта или 18 и 36 - для фиксированной). Когда процесс становится активным, то ему назначается продолжительность квантов, исходя из значения двух младших бит параметраWin32PrioritySeparation в соответствии с приведенной таблицей.Еще один случай увеличения длительности кванта - процесс долгое время не получал процессорного времени (это может случиться, если все время есть активные процессы более высокого приоритета). В этой ситуации система раз в 3-4 секунды (в зависимости от продолжительности тика) назначает процессу повышенный приоритет и квант удвоенной длительности. По истечении этого кванта приоритет возвращается к прежнему значению и восстанавливается рекомендуемая длительность кванта.

cyberpedia.su

Что такое многозадачность? | KV.by

В чём заключается многозадачность Windows? Она глючит и работает одновременно.

Анекдот

Хотя с этим понятием большинство читателей "Компьютерных вестей", пусть и интуитивно, но знакомы, есть всё-таки и меньшинство. Думаю, для них эта небольшая заметка будет достаточно полезной и интересной.

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

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

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

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

Вадим СТАНКЕВИЧ

www.kv.by

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

Поиск Лекций

 

Win9X/NT. Windows, в отличие от MS DOS, представляет собой многозадачную операционную сис­тему, созданную для одновременной работы ряда приложений и/или меньших процессов с максимальными возможностями использования аппаратного обеспечения. Это означа­ет, что Windows является разделяемой средой: ни одно приложение не может получить в свое распоряжение всю систему целиком. Хотя Windows 95, 98, ME, ХР и 2000/NT похо­жи, они имеют ряд технических отличий. Однако в этой книге рассматриваются общие черты, а не отличия, так что делать большую драму из различия операционных систем не стоит.

Windows – это многозадачная операционная система, то есть она может одновременно выполнять две и более программ. Конечно, программы используют единственный процессор и, строго говоря, выполняются не одновремен­но. Однако высокое быстродействие компьютера создает такую иллюзию. Windows поддерживает два типа многозадачности: процессную и потоковую.

1. Процесс – это программа (или приложение – в терминологии Windows), находящиеся в фазе выполнения. Процессная многозадачность заключается в том, что Windows может выполнять одновременно более одной программы. Таким образом, Windows поддерживает «традиционную» процессную многозадачность, с которой Вы, ве­роятно, знакомы.

2. Поток – это отдельно выполняемая и управляемая часть программы. Название происходит от термина «поток выполнения». Любой процесс имеет как минимум один поток. В Windows процесс может иметь несколько (много) потоков.

 

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

Для доступа к системе интерфейс в Windows использует множество функций, определенных в ней. Это множество функций называется Программным Интерфейсом Приложений (Application Program Interface, API). API содержит несколько сотен функций, которые программа пользователя может вызывать для доступа к Windows. Функции включают все необходимые системно-зависимые действия, такие как выделение памяти, вывод на экран, создание окон и т.п. Аналогичные WinAPI средства имеются и в современных версиях операционной системы Unix.

 
 

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

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

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

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

На рис. 1.2 схематически показана многопоточность в Windows. Как видите, каждая программа в действительности состоит, в дополнение к основному потоку, из нескольких рабочих потоков.

Для развлечения посмотрим, сколько потоков выполняется на вашей машине в на­стоящий момент. Нажмите <Ctrl+Alt+Delete> на компьютере под управлением Windows для вызова Active Program Task Manager и посмотрите, чему равно количество выпол­няющихся в системе потоков (или процессов). Это не совсем та величина, которая нас интересует, но весьма близкая к ней. Нас интересует приложение, способное сообщить реальное количество выполняющихся процессов. Для этого подходит множество условно бесплатных и коммерческих программ, но они нас не интересуют, поскольку в Windows есть встроенное средство для получения этой информации.

В каталоге Windows (в большинстве случаев это папка \WINDOWS) можно обнаружить программу SYSMON.EXE (она не включена в установку Windows по умолчанию, так что при ее отсутствии просто добавьте ее в систему посредством Control Panel Þ Add/Remove Programs Þ System Tools) или, в Windows NT, PERFMON.EXE. Данная программа предоставляет и другую важную информацию, такую, как использование памяти и загрузка процессора. Часто эта программа используется, чтобы отслеживать, что происходит при работе создаваемых программ.

 

 
 

 

А теперь о приятном: Вы можете сами управлять созданием потоков в своих програм­мах. Это одна из наиболее увлекательных возможностей при программировании игр – мы можем создать столько потоков, сколько нам потребуется для выполнения различных задач в дополнение к основному процессу игры.

Замечание: в Windows 98/NT введен новый тип объекта выполнения – нить (fiber), который еще проще, чем поток.

Вот основное отличие игр для Windows от игр для DOS. Поскольку DOS – одноза­дачная операционная система, в ней после запуска программы на выполнение больше ничего другого выполняться не может (не считая время от времени вызываемых обработ­чиков прерываний). Следовательно, если вы хотите добиться многозадачности или мно­гопоточности в DOS, вам придется эмулировать ее самостоятельно (см., например, книгу Teach Yourself Game Programming in 21 Days, где описано многозадачное ядро на основе DOS). И это именно то, чем многие годы занимались программисты игр. Конечно, эму­ляция многозадачности и многопоточности никогда не будет такой же надежной, как ре­альная многозадачность и многопоточность в поддерживающей их операционной систе­ме, но для отдельной игры такой эмуляции вполне достаточно.

Перед тем как перейти к программированию в Windows, нужно упомянуть еще одну де­таль. Вы можете подумать, что Windows – «волшебная» операционная система, поскольку позволяет одновременно решать несколько задач и выполнять несколько программ. Но это не так. Если в системе только один процессор, то одновременно может выполняться только один поток, программа или другая единица выполнения. Windows просто пере­ключается между ними так быстро, что создается иллюзия одновременной работы нескольких программ. Если же в системе несколько процессоров, то несколько задач могут выполняться действительно одновременно. Например, есть компьютер с двумя процессорами Pentium II 400MHz, работающий под управлением Windows 2000. В этой системе действительно возможно одновременное выполнение двух потоков инструкций. В ближайшем будущем следует ожидать новую архитектуру микропро­цессоров для персональных компьютеров, которая обеспечит одновременное выполне­ние нескольких потоков как часть конструкции процессора. Например, процессор Pen­tium имеет два модуля выполнения – U- и V-каналы. Следовательно, он может одновре­менно выполнять две инструкции, однако эти инструкции всегда из одного и того же потока. Аналогично, процессоры Pentium II, III, IV также могут выполнять несколько инструкций одновременно, но только из одного и того же потока.

Модель событий. Windows является многозадачной и многопоточной операционной системой, но при этом она остается операционной системой, управляемой событиями (event-driven). В отли­чие от программ DOS, большинство программ Windows попросту ждут, пока пользователь не сделает что-то, что запустит событие, в ответ на которое Windows предпримет некоторые действия. На рис. 1.3 Вы можете рассмотреть работу этой системы. Здесь изображены не­сколько окон приложений, каждое из которых посылает свои события или сообщения Win­dows для последующей обработки. Windows выполняет обработку определенных сообще­ний, но большинство из них передаются для обработки вашему приложению.

Хорошая новость состоит в том, что Вам нет необходимости беспокоиться о других рабо­тающих приложениях – Windows сама разберется с ними. Все, что вы должны сделать, – это позаботиться о вашем собственном приложении и обработке сообщений для вашего окна (окон). Ранее, в Windows 3.0/3.1, это было не так. Эти версии Windows не были истинно многозадачными операционными системами, и каждое приложение должно было передать управ­ление следующему. Это означало, что если находилось приложение, которое ухитрялось на­долго захватить систему, другие приложения ничего не могли с этим поделать.

 

 
 

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

Далее Вы встретитесь с реальным программированием и увидите, на­сколько простое это занятие. Но (всегда это «но»!) пока что Вам следует познакомиться с некоторыми соглашениями, используемыми программистами Microsoft. Применяя их, Вы никогда не запутаетесь среди имен функций и переменных.

Динамические библиотеки

Поскольку API содержит несколько сотен функций, можно предположить, что каждая программа для Windows должна связываться с большим количеством библиотек, и это может привести к дублированию большого объема кода. Однако это не так. Вместо обычных библиотек функции Windows API объединены в динамические библиотеки (Dynamic Link Library, DLL), доступ к которым может получить любая программа во время выполнения. В настоящем разделе Вы познакомитесь с тем, как работает динамическое связывание. Функции API Windows хранятся в перемещаемом формате в DLL. В процессе компиляции, когда программа вызывает функцию API, компоновщик не добавляет код этой функции к исполняемому модулю. Вместо него он добавляет только инструкции для загрузки функции, содержащие имя DLL, в которой находится функция, и ее имя. При выполнении программы все необходимые функции API также загру­жаются в память. Таким образом, при построении программы код функций API фактически не используется – он добавляется только тогда, когда программа загружается в память для выполнения.

Динамическое связывание имеет ряд важных преимуществ. Во-первых, посколь­ку практически все программы используют функции API, DLL сохраняет место на диске, не дублируя объектный код в выполняемых файлах. Во-вторых, дополнения и расширения Windows могут ограничиваться изменением программ в отдельных динамических библиотеках, и существующие приложения не будут нуждаться в перекомпиляции.

Приложения Windows могут использовать до 16 Гбайт виртуальной памяти! Более того, эти 16 Гбайт адресуются прямо, без переключения сегментов. В отличие от других операционных систем, которые используют сегментированную память, Windows рассматривает адресное пространство задачи как линейное. И поскольку она виртуализирует память, то каждое приложение может занять столько памяти, сколько (в разумной мере) пожелает. Так как прямая адресация более понятна программисту, она позволяет избежать опасности, связанной с использованием прежнего сегментного подхода.

Windows использует схему переключения задач с автовыгрузкой (preemptive multitasking), базируясь на временных квантах. Отработав некоторое время, задача в Windows автоматически выгружается системой и управление передается следую­щей задаче (если таковая имеется). Такая схема переключения является более предпочтительной, поскольку позволяет операционной системе полностью контро­лировать все задачи и предохраняет ее от блокирования одной задачей. Большинство программистов рассматривают схему переключения задач с автовыгрузкой как более прогрессивную.

 



poisk-ru.ru