Тема 2.2 Программная поддержка работы периферийных устройств
Прерывание (англ. interrupt) — сигнал, сообщающий процессору о совершении какого-либо асинхронного события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания, который выполняет работу по обработке события и возвращает управление в прерванный код.
Виды прерываний:
Аппаратные (англ. IRQ — Interrupt Request) — события от периферийных устройств (например, нажатия клавиш клавиатуры, движение мыши, сигнал от таймера, сетевой карты или дискового накопителя) — внешние прерывания, или события в микропроцессоре — (например, деление на ноль) — внутренние прерывания;
Программные — инициируются выполняемой программой, т.е. уже синхронно, а не асинхронно. Программные прерывания могут служить для вызова сервисов операционной системы.
Обработчики прерываний обычно пишутся таким образом, чтобы время их обработки было как можно меньшим.
До окончания обработки прерывания обычно устанавливается запрет на обработку или даже генерацию других прерываний. Некоторые процессоры поддерживают иерархию прерываний, позволяющую прерываниям более высокого приоритета вызываться при обработке менее важных прерываний.
Вектор прерывания — ячейка памяти, содержащая адрес обработчика прерывания.
Перехват прерывания — изменение обработчика прерывания на свой собственный.
Вектора прерываний объединяются в таблицу векторов прерываний. Местоположение таблицы зависит от типа и режима работы микропроцессора.
Обработчик прерываний (или процедура обслуживания прерываний) — процедура операционной системы или драйвера устройства, вызываемая по прерыванию для выполнения его обработки. Обработчики прерываний могут выполнять множество функций, которые зависят от причины, которая вызвала прерывание и времени выполнения, которые требуются на это обработчику.
Обработчик прерываний—это низкоуровневый эквивалент обработчика событий. Эти обработчики вызываются либо по аппаратному прерыванию, либо соответствующей инструкцией в программе. И соответственно служат для обслуживания устройств или для осуществления вызова функций операционной системы (как способ передачи управления между различными уровнями защиты).
В современных системах обработчики прерываний делятся на Высокоприоритетные Обработчики Прерываний (ВОП) и Низкоприоритетные Обработчики Прерываний (НОП).
К выполнению ВОП обычно предъявляются жесткие требования: малое время на выполнение, малое количество операций, разрешенных к выполнению, особая надежность, так как ошибки, допущенные во время выполнения, могут обрушить операционную систему, которая не может корректно их обработать. Поэтому ВОП обычно выполняют минимально необходимую работу: быстро обслуживают прерывание, собирают критичную информацию, которая доступна только в это время, и планируют выполнение НОП для дальнейшей обработки.
ВОП, которые обслуживают аппаратные устройства, обычно маскируют свое прерывание для того, чтобы предотвратить вложенные вызовы, которые могут вызвать переполнение стека.
НОП завершает обработку прерывания. НОП либо имеет собственный поток для обработки, либо заимствует на время обработки поток из системного пула. Эти потоки планируются наравне с другими, что позволяет добиться более гладкого выполнения процессов. НОП выполняется с гораздо менее жесткими ограничениями по времени и ресурсам, что облегчает программирование и использование драйверов.
В разных системах ВОП и НОП именуются по-разному. В операционной системе Windows ВОП называется обработчиком прерывания, а НОП—отложенный вызов процедуры (DPC, Defered Procedure Call)
Прямой доступ к памяти (англ. Direct Memory Access, DMA) — режим обмена данными, без участия Центрального Процессора. За счёт чего скорость передачи увеличивается, т.к. данные не пересылаются в ЦП и обратно.
Plug and Play (сокр. PnP), дословно переводится как «включил и играй» — технология, предназначенная для быстрого определения и конфигурирования устройств в компьютере. Разработана фирмой Microsoft при содействии других компаний.
Основные знания о PnP:
PNP BIOS — расширения BIOS для работы с PnP устройствами.
Plug and Play Device ID — индификатор PnP устройства имеет вид PNPXXXX, где XXXX — специальный код.
Вопросы для самоконтроля:
1. Аппаратные средства поддержки работы периферийных устройств: контроллеры;
2. Аппаратные средства поддержки работы периферийных устройств: адаптеры;
3. Аппаратные средства поддержки работы периферийных устройств: мосты.
Раздел 3. Современные и перспективные интерфейсы и шины ввода – вывода
Программы для работы периферийных устройств
Ускоряет систему, реестр и доступ в Интернет. Оптимизирует, чистит и исправляет все проблемы с ПК в 1 клик. Выявляет и удаляет шпионские и рекламные модули.
Программа — победитель многих конкурсов. Подробнее
AutoHotkey — приложение для автоматизации процессов до одного клика. Настраивайте клавиатуру и мышь на «горячие» клавиши, используйте автозамену, создавайте пользовательские формы ввода. Позволяет переназначить любые клавиши и кнопки на любых устройствах.
get_app323 132 | Бесплатная |
USB Device Tree Viewer — бесплатная утилита, которая предоставит расширенную информацию о всех подключенных устройствах через USB порты. Производит основные действия управления, а также корректно отключает устройство или производит перезагрузку соединения.
get_app7 856 | Бесплатная |
FinePrint — отличный инструмент для редактирования различных типов документов и вывода их на печать. Присутствует предварительный просмотр перед печатью, создание фирменных бланков и пр. Результат можно сохранить в формате bmp, tiff, emf или jpeg.
get_app98 882 | Условно-бесплатная |
VueScan — приложение, которое позволяет изменить стандартный интерфейс сканера на альтернативный, благодаря чему пользователи определенных моделей сканеров получат дополнительный функционал.
get_app219 349 | Условно-бесплатная |
USBDeview — небольшая программка, которая выведет список всех USB устройств (флеш-карта, мобильный телефон, принтер и т.д.), когда-либо подключаемых к Вашему компьютеру.
get_app207 732 | Бесплатная |
DevManView является альтернативой стандартному компоненту Windows Диспетчер устройств, который отображает список всех устройств и их свойств.
get_app10 076 | Бесплатная |
ScanPapyrus — программа для автоматического сканирования бумажных носителей (документы, книги, журналы и т.п.) и сохранения их в один файл PDF, DOCX или в несколько файлов JPEG, TIFF, PNG, BMP.
get_app9 612 | Условно-бесплатная |
Полезное приложение для владельцев девайсов от Garmin. Приложение позволяет обновлять карты, делать резервное копирование всех данных на случай их потери, делиться маршрутами с другими пользователями, устанавливать обновления программного обеспечения.
get_app374 | Бесплатная |
Бесплатная и удобная в использования программа для получения максимальной отдачи от ваших устройств SteelSeries, как например клавиатур, мышей, наушников, ковриков и пр. Позволяет управлять динамическими визуальными эффектами подсветки, настройки звучания.
get_app774 | Бесплатная |
PaperScan — универсальная программа для сканирования различных документов. Отличительной особенностью данного инструмента является возможность управления любым сканером, в том числе и сетевыми сканерами (TWAIN или WIA протоколы).
get_app67 413 | Бесплатная |
Elcomsoft Phone Breaker — универсальный инструмент для извлечения данных пользователя из резервных копий устройств iOS, Windows Phone и BlackBerry, а также облачных сервисов iCloud и iCloud Drive.
get_app5 775 | Условно-бесплатная |
USB Analyzer — программа для мониторинга и анализа активности USB-устройств. Позволяет перехватывать, отображать, записывать и анализировать все входящие и исходящие данные между любыми USB-устройствами, подключенными к ПК.
get_app2 929 | Условно-бесплатная |
USB Monitor — Программа для перехвата данных в USB шине компьютера. Позволяет следить за потоком данных от USB устройства и обратно, вести лог с возможностью его воспроизведения и анализа.
get_app10 914 | Условно-бесплатная |
RiDoc — программа позволяет при помощи сканера получать электронные версии документов и производить приведение размеров электронных версий документов или графических файлов к предустановленному размеру, что позволяет существенно уменьшить размер.
get_app122 656 | Условно-бесплатная |
OK Print Watch — Программа представляет собой монитор и менеджер принтера.
Программная поддержка периферийных устройств
Система ввода-вывода первой промышленной операционной системы (OS/360) [13] поддерживала достаточно широкий перечень внешних устройств — ввод-вывод ПК и ПЛ, построчные принтеры и НМЛ/НМД. Устройство карточного ввод (УКВ) и алфавитно-цифровое печатающее устройство (АЦПУ) имели статус системного ввода и вывода, и для их подключения к системе оператор должен был запускать программы системного ввода (rdr, Reader) и системного вывода (wtr, Writer). Подключение нескольких таких устройств уже требовало наличия активных копий этих программ. Программы rdr и wtr являлись прототипами программ-драйверов устройств, выполняющих непосредственное программное обеспечение функционирования конкретного устройства.
Накопители информации управлялись подсистемой управления данными (data management macroinstructions). В дальнейшем с появлением видеотерминалов (см. рис. 1.20, б) были разработаны программы обрамления ОС — CRJE (Control Remote Job Entry — диалоговый удаленный ввод заданий), CICS (Customer Information Control System — система управления использованием информации) и другие средства.
Система ввода-вывода
Компоненты системы ввода-вывода Windows NT представлены на рис. 1.28, а. Каждому запросу на ввод-вывод соответствует пакет IRP (I/O Request Packet). Пакеты передаются от одной подсистемы ввода-вывода к другой. Менеджер ввода-вывода определяет порядок доставки пакетов IRP файловым системам и драйверам устройств. Менеджер не выполняет операций ввода-вывода, он только создает пакет IRP, передает его нужному драйверу и удаляет пакет, когда операция завершается. Драйвер же, получив IRP, выполняет операцию ввода-вывода, а затем возвращает пакет менеджеру для уничтожения или передачи
Рис. 1.28. Компоненты системы ввода-вывода Windows NT (а); подключение TWAIN-совместимых устройств к ПК (б):
- 1 — приложение вызывает модуль TWAIN, когда в меню Файл пользователь выбирает «Импорт» (Acquire); 2 — модуль TWAIN берет устройство под контроль; 3 — сканер передает изображение модулю TWAIN, когда пользователь выбирает «Сканирование» (Scan); 4 — модуль TWAIN передает изображение приложению, от которого поступила команда Импорт другому драйверу. Система ввода-вывода выполняет следующие задачи:
- • обеспечить поддержку нескольких файловых систем — FAT, CDFS, NTFS;
- • предоставить средства для упрощения разработки драйверов устройств;
- • обеспечить возможность динамического добавления и удаления драйверов из системы;
- • предоставить возможность ввода-вывода для отображаемых в памяти файлов.
Кроме передачи пакетов, менеджер ввода-вывода выполняет следующие действия:
- • предоставляет драйверам некоторые общие функции, например для вызова одного драйвера другим;
- • управляет буферами для запросов ввода-вывода;
- • управляет тайм-аутом для драйверов;
- • ведет записи о том, какие файловые системы установлены.
Особенностью Windows NT является общая структура ее
драйверов и широкая интерпретация того, что собой представляет драйвер (драйвер устройства и драйвер ФС построены единым образом). Драйверы переносимы, написаны на языке высокого уровня и мало зависят от архитектуры процессора (драйверы высокого уровня, такие как файловая система, совсем не зависят). Система ввода-вывода может динамически назначать драйверы для новых устройств при изменении конфигурации системы.
Интерфейс драйверов с менеджером ввода-вывода стандартизирован, что позволяет менеджеру вызывать их «вслепую», не зная их особенностей или структур внутренних данных. Драйверы могут также вызывать друг друга (через менеджер ввода-вывода) для достижения многоуровневой обработки запросов ввода-вывода.
В Windows NT чаще используется многоуровневая модель обработки запроса ввода-вывода, но для простых устройств может применяться и одноуровневая модель, когда менеджер вызывает только драйвер устройства. Может использоваться не только двухуровневая модель (как, например, файловый драйвер — драйвер устройства), но и модель с большим числом уровней. Например, если в компьютере есть SCSI-адаптер, к которому подключен диск, то запрос к такому диску проходит через три драйвера: драйвер файловой системы, драйвер класса дисков, драйвер SCSI-порта.
Драйверы устройств
Рассмотрим некоторые примеры драйверов.
Драйвер сканера (цифровой камеры). По существу, драйвер сканера не только управляет «железом» на низком аппаратном уровне, но и представляет собой сложный интерфейс с графической оболочкой и возможностями настройки. Изготовители сканеров создали стандарт TWAIN (Toolkit Without An Interesting Name), обеспечивающий взаимодействие сканеров практически с любым прикладным ПО — пакетами обработки изображений, настольными издательскими системами или программами распознавания символов. Однако лишь средства коммуникации прикладных пакетов с интерфейсом TWAIN (команды обращения к драйверу и формат передачи данных) являются стандартными. Всю остальную часть, в частности графический пользовательский интерфейс ПО сканера и низкоуровневый компонент, каждый изготовитель разрабатывает по-своему. Разрешается одновременно подсоединять к ПК более чем одно TWAIN-совместимое устройство, как показано на рис. 1.28, б. Каждое из устройств при этом имеет свою собственную копию модуля TWAIN. Это обеспечивает конечного пользователя возможностью выбора, которое именно из устройств TWAIN следует использовать в течение сеанса.
Допустим, пользователь выбрал опцию Импорт (Acquire) в меню Файл такого приложения, как Photoshop, и в нем — соответствующий источник (Source) — twain. При этом будет активизирован TWAIN, который загрузит собственный драйвер устройства, не покидая основное приложение. После сканирования драйвер автоматически закрывается, оставляя полученное изображение открытым в основном приложении.
Драйвер клавиатуры. Программируемость клавиатуры означает, что интерпретация всех перечисленных клавиш не обязательно соответствует тем или иным символам/действиям, которые на них обозначены. Нажатие на клавишу вырабатывает номер клавиши (поэтому основные и дублирующие символы/области в принципе различаемы). Эта информация затем обрабатывается драйвером клавиатуры, преобразующим номер клавиши в код символа, который выводится на экран и поступает в распоряжение работающей прикладной программы. Этот же драйвер ответственен за переход с латиницы на кириллицу. В отличие от механических терминалов и старинных ВТ, на консоли нет клавиши
переключения . Поскольку драйверов весьма много (всякий себя уважающий программист в середине своей карьеры, как правило, пишет свой драйвер), надо иметь в виду, что переключение может осуществляться по-разному. Обычно используются сочетания управляющих клавиш (например, , — левая и правая клавиши и пр.). Отсутствие лампочки, которая на старых ВТ указывала, что включен регистр «Лат» (или «Рус»), компенсируется обычно появлением на экране цветной рамки или надписей LAT, RUS в углу экрана или еще как-то, что определяется фантазией (или ее отсутствием) программиста. Очевидно, драйвер управляет привязкой символов к клавишам. Обычно размещение букв не вызывает проблем — это стандарты QWERTY и ЙЦУКЕН. Размещение же служебных символов (!@#$% л )ипр. может различаться в разных драйверах и, что самое печальное, может не соответствовать в связи с этим символам, нанесенным изготовителем краской на клавиши. И с буквами не все слава богу, особенно достается буквам Ъ и Ё (иногда даже Ъ и ъ могут оказаться на разных клавишах).
Мультимедийные технические средства (а особенно — компьютерная графика) — наиболее быстро развивающаяся область промышленности ПК, где высокими темпами постоянно возникают новые чипсеты, версии интерфейсных карт, устройства и принципы технологий. Для прикладного программиста, занимающегося разработками мультимедийных приложений или компьютерных игр, становится совершенно невозможным заново переписывать все программы с появлением на рынке карт с новыми графическими процессорами, поддерживающими высокопроизводительные технологии мультимедиа с аппаратным ускорением (графические/видеоакселераторы).
API. В качестве решения появились программные интерфейсы приложений (API, application programming interface), которые играют роль посредника между прикладной программой и аппаратными средствами ЭВМ (интерфейсная карта и внешнее устройство), на которых она выполняется. Разработчик программного обеспечения пишет обращение к устройству на некотором стандартизированном языке, а не в кодах аппаратных средств ЭВМ. Затем драйвер, написанный изготовителем периферийно
го устройства или его карты, переводит этот стандартный код к формату, понятному специфической модели периферийных устройств (рис. 1.29).
Рис. 1.29. Взаимодействие драйверов с прикладной программой посредством
API-интерфейсы обеспечивают доступ к новейшим возможностям высокопроизводительных устройств, таких как микросхемы ускорения трехмерной графики и звуковые платы. Эти интерфейсы управляют функциями нижнего уровня, в том числе ускорением двумерной графики, поддержкой устройств ввода, таких, как джойстик, клавиатура и мышь, а также микшированием и выводом звука.
Графический Интерфейс Устройства (Graphics Device Interface — GDI) является стандартом Microsoft Windows, который описывает, как следует представлять графические объекты для передачи их на устройства вывода типа мониторов или принтеров.
GDI поддерживает такие задачи, как рисование линий, представление шрифтов и обработка палитр. Он не занимается непосредственно формированием окон, меню, и т. д., эти задачи оставлены для подсистемы пользователя (user32.dll), которая является надстройкой над GDI.
Существенная способность GDI (кроме более прямых методов обращения к аппаратным средствам) — масштабирование и абстрагирование от оконечных устройств. Используя GDI, можно достаточно просто осуществлять вывод изображений на различные устройства (мониторы, принтера) и ожидать надлежащего результата в каждом случае. Эта способность обеспечивает все приложения WYSIWYG для Microsoft Windows.
Простые игровые программы, которые не требуют быстрой обработки графики, могут обходиться возможностями GDI. Однако более современные игры должны использовать API DirectX
или OpenGL, которые дают возможность программистам более интенсивно использовать аппаратные средства.
С появлением Windows ХР, GDI заменяется преемником — подсистемой GDI+, базирующейся на C++. GDI+ — следующее поколение двумерной графической среды, включающее такие расширенные особенности, как двумерная графика со сглаживанием, координаты с плавающей запятой, альфа-смешивание, градиентное затушевывание, поддержка современных форматов графических файлов наподобие JPEG и PNG (которые заметно отсутствовали в GDI), и общую поддержке перечня аффинных преобразований в конвейере двумерного рендеринга. Использование этих особенностей очевидно в интерфейсе пользователя Windows ХР, и их присутствие в основном графическом уровне очень упрощают выполнение векторных графических преобразований. Динамическая библиотека GDI+ может вместе с приложением использоваться под более ранними версиями Windows. Библиотека классов Microsoft.NET обеспечивает управляемый интерфейс для GDI+.
API для трехмерной графики
Господствующими направлениями в обработке трехмерной графики в последние годы являются два 3D-API — OpenGL и Direct3D. Прежде чем давать их описания, вкратце охарактеризуем процедуры, входящие в понятие представления изображения или рендеринга.
Рендеринг (rendering — окончательная компиляция изображения). На этапе рендеринга, выполняемого ЗО-акселератором, осуществляется построение растрового изображения (пикселей). Узкое место здесь — доступ к памяти — необходимо быстро считывать пиксели и передавать в буфер кадра (экрана). Изображение каждого кадра (сцены) составляют тысячи многоугольников и они должны быть обновлены и переданы через память по крайней мере 30 раз в секунду, чтобы создать иллюзию движения. Из буфера кадры передаются в RAMDAC (ЦАП) и преобразуются в аналоговый сигнал для монитора.
Процесс рендеринга предполагает использование различных 3D-методов:
• текстурирование, отображение текстур (texture mapping) — технология детализации ЗО-изображения, которая лучше
всего может быть представлена как обтягивание некоего 3-мерного каркаса окрашенной бумагой (конечно, 2-мер- ной). Это трудоемкий процесс, который должен быть выполнен не только для каждого пикселя изображения, но и для каждого элемента текстуры (текселя, texel). Могут использоваться разные текстуры (мультитекстурирование, multitexturing);
- • сжатое текстурирование (mip mapping, mip-отображение) — форма сокращения объема данных, при которой создается большее количество текселей, без выполнения эквивалентного необходимого числа вычислений. Если сжатие составляет 1 : 4, то считывание одного текселя эквивалентно передаче четырех текселей первоначальной структуры. Если использованы надлежащие фильтры, качество изображения может даже повыситься, поскольку при этом сглаживаются зубчатые грани;
- • билинейная фильтрация (bi-linear filtering) — считывание четверок тексилей, усреднение их характеристик и использование представленного результата как единственного текселя. В результате выравнивается фактура близлежащих участков, изображение сглаживается и уменьшается пиксе- лизация (blocky, pixelated appearance). Билинейная фильтрация является в настоящее время стандартом для большинства графических карт;
- • Z-буферизация (Z-buffering) — метод вычисления пикселей, которые следует загрузить в буфер экрана (память, хранящая данные, которые должны быть немедленно выведены). Обычные ЗО-акселераторы берут один пиксель, рассчитывают его и переходят к следующему. Проблема состоит в том, что акселератор не имеет возможностей «узнать», должен ли рассчитываемый пиксель быть показан немедленно или же позже. Z-буферизация вычисляет и приписывает каждому пикселю некоторый вес «Z». Чем меньше значение Z, тем раньше данный пиксель должен быть выведен на экран;
- • сглаживание (anti-aliasing) — технология снижения «шумов», присутствующих в изображении. Например, если объект находится в движении, необходим большой информационный поток, отражающий изменение положения, цвета, размера и т. д. Иногда процессор не успевает обработать всю информацию и тогда некоторые места заполни-
ются бессмысленным шумом. Сглаживание наряду с mip-отображением удаляет этот шум;
- • закраска/штриховка Гуро (Gouraud shading) применяет тени к поверхности объектов, заставляет их выглядеть более объемно. Алгоритм определяет цвета смежных многоугольников и вычисляет гладкий переход между ними, что гарантирует отсутствие резких цветовых переходов в окраске объекта;
- • отображение выпуклостей/неровностей (bump mapping) создает иллюзию объемных углублений на плоской поверхности (шершавые стены, бурное море и пр.).
OpenGL (Open Graphics Library — открытая графическая библиотека) — межъязыковая и межплатформенная спецификация API для 3- и 2-мерных приложений компьютерной графики. Включает более чем 250 функций, которые предназначены для формирования 3-мерных объектов и сцен из простых примитивов. OpenGL был разработан Silicon Graphics Inc. (SGI) в 1992 г. и широко распространен в индустрии разработчиков видеоигр, где конкурирует с Direct3D на платформах Microsoft Windows. OpenGL широко используется в САПР, визуализации данных, системах моделирования и видеоиграх.
В своей основе OpenGL — это спецификация, т. е. некоторый документ, который определяет набор функций и содержит точное описание действий, которые они должны выполнять. На основе этой спецификации производители аппаратных средств ЭВМ создают конкретные программные реализации — библиотеки, соответствующие функциям, объявленным в OpenGL-спецификации, используя видеоакселераторы там, где возможно. Оборудование подвергается сертификационным тестам, чтобы квалифицировать его соответствие OpenGL.
Применение OpenGL преследует следующие основные цели:
- • предоставляя программисту однородный программный интерфейс приложения, скрывать подробности взаимодействия с различными 3D-акселераторами;
- • скрывать различие платформ аппаратных средств ЭВМ, требуя только, чтобы все программные реализации поддерживали полный набор функций OpenGL (используя программную эмуляцию, если необходимо).
Основная функция OpenGL заключается в считывании графических примитивов (точек, линий и многоугольников) и пре
образовании их в пиксели. Это происходит в графическом конвейере, известном как «машина OpenGL» (OpenGL state machine). Большинство команд OpenGL или направляет примитивы на конвейер, или задает, как конвейер должен их обрабатывать.
До появления OpenGL 2.0 каждая стадия конвейера выполняла установленную функцию и конфигурировалась только в узких пределах, но в OpenGLe 2.0 несколько стадий могут полностью программироваться с использованием языка GLSL.
OpenGL — процедурный программный интерфейс приложения низкого уровня, который требует от программиста точное описание шагов рендеринга сцен, а также хорошего знания графического конвейера.
Краткое описание процесса в графическом конвейере (рис. 1.30):
- • построение (evaluation) коэффициентов полиномиальных функций (наподобие сплайновых кривых NURBS), которые аппроксимируют пространственные поверхности объектов;
- • обработка вершин многогранников (vertex operations), их преобразование или подсветка в зависимости от материала, удаление невидимых частей объектов;
- • растеризация (rasterisation) или преобразование предыдущей информации в пиксели, окраска многоугольников осуществляется на основе алгоритмов интерполяции;
- • операции над фрагментами (пиксели или их группы — per-fragment operations) типа обновления ранее поступившей и сохраненной информации (цветовая глубина, оттенок и пр.);
- • передача пикселей в буфер кадра/сцены (frame buffer).
Рис. 1.30. Графический конвейер OpenGL
DirectX. Впервые предложенный в 1995 г., DirectX представлял собой объединенный набор инструментов программирования, предназначенных для того, чтобы помочь разработчикам создавать широкий спектр мультимедийных приложений для платформы Windows. Охватывая почти все аспекты мультимедийных технологий выпуск DirectX 8.0 включает следующие компоненты:
- • DirectX Graphics, который, в свою очередь состоит из двух API:
- — DirectDraw — для обработки 2-мерных растровых изображений;
- — Direct3D (D3D) — обработчик ЗО-графики;
Direct3D. Direct3D включает две компоненты API — Immediate Mode (немедленная обработка) и Retained Mode (отложенная обработка). Первая обеспечивает использование всех ЗО-функций видеокарт (подсветка, текстурирование, трансформация объектов и пр.), в то время как вторая — более сложные графические технологии, такие как иерархия сцен или анимация. Функции Immediate Mode предпочитают использовать разработчики видеоигр, поскольку здесь они могут осуществлять программирование на низком уровне, более свободно и эффективно используя возможности графического оборудования. Несмотря на Intermediate Mode, считается, что Direct3D является менее гибким, чем OpenGL.
Компоненты 6-й версии Direct3D поддерживают возможности более новых графических карт выполнять множественное текстурирование (покрытия «каркаса» изображения текстурами) за один проход. Здесь также используются более новые методы для того, чтобы улучшить реализм 3D-сцен, типа анизотропной фильтрации (anistropic filtering), которая добавляет элемент глубины к трилинейной фильтрации (trilinear filtering), и отображение неровностей (bump mapping), которое создает иллюзию реальности структуры и освещенности плоских поверхностей.
Следующая версия — DirectX V7.0 (1999 г.), кроме оптимизации кода, которая позволила на 20 % увеличить быстродействие, включала ряд новых особенностей. Наиболее важная из них — сопровождение операций трансформации и подсветки (transformation and lighting — T&L), поскольку они поддерживаются большинством ЗО-акселераторов текущего поколения, и особенно в графических картах чипсетов GeForce 256 (nVidia ) и Savage 2000 (S3).
Поскольку операции T&L являлись одной из самых трудоемких для центральных процессоров задач в современных игровых приложениях, перенос этой нагрузки на выделенный ЗО-акселе- ратор позволяет освободить ЦП для более существенных задач (например, внесение в игры элементов искусственного интеллекта или выработка специальных эффектов).
Самым важной стороной DirectX 9.0 (январь 2003 г.) было введение HLSL (High Level Shader Language, высокоуровневый язык раскрашивания изображений). Ранее разработчики игр должны были программировать алгоритмы раскраски, используя ассемблер низкого уровня. HDSL вводит дружественную среду программирования, которая облегчает каждый шаг разработки, — от создания ярких образов в мультипликации до программирования эффектов. Базирующийся на языке программирования С, HLSL совместим со всеми графическими средствами DirectX.
Структура графического конвейера Direct3D (рис. 1.31):
- • входная сборка (input assembler) поставляет данные на конвейер;
- • раскраска вершин многогранников (vertex shader) выполняет операции над вершинами, такими, как трансформация, покрытие текстурой, подсветка;
- • раскраска геометрических примитивов (geometry shader) — операции над примитивами (треугольники, вершины, ли-
Рис. 1.31. Графический конвейер Direct3D
нии), иногда — над связанными с ними примитивами. На этой стадии каждый примитив передается дальше или уничтожается, или на его основе создается один или несколько новых примитивов;
- • выходной поток (stream output) — запись в память результатов предыдущих стадий. На основе этих данных могут быть организованы итерационные циклы обработки данных на конвейере;
- • растеризация (rasterizer) — трансформация примитивов в пиксели, удаление невидимых.
- • раскраска пикселей (pixel shader) и другие операции над ними;
- • окончательная сборка (output merger) объединение различных типов выходных данных и построение кадра-результата.
API для аудиосредств
A3D (Aureal 3-Dimensional) — разработанный в 1997 г. NASA (National Aeronautics and Space Administration) и фирмой Aureal стандарт генерации таких эффектов, как густой туман или подводные звуки для использования в тренажерах. A3D позволяет моделировать конфигурацию помещения, в котором раздаются и распространяются звуки, вычисляя до 60 звуковых отражений (в ангаре, колодце и пр.).
ЕАХ (environmental audio extensions, расширение звукового окружения) — программно-аппаратурные технологии добавления эффектов (реверберация, полифония и пр. с учетом звуковых препятствий и поглощения звуков) к обрабатываемому аудиокартой звуковому сигналу для придания естественности при моделировании аудиосреды (в основном — в компьютерных играх). Впервые появляется в картах Sound Blaster (Creative Labs) и в дальнейшем (2001 г.) вытесняет A3D. Эффекты могут накладываться как на естественный, так и искусственный звуковой сигнал (синтезированные или MIDI- звуки). ЕАХ не управляет трехмерным позиционированием источников звука.
Библиотека API ЕАХ является расширением для API Microsoft DirectSound3D, добавляя эффекты к звуковому позиционированию DS3D. В 2006 г. API ЕАХ применялся во многих популярных играх, включая Doom 3 и Prey, которые используют ЕАХ 4.0, если присутствуют звуковые аппаратные средства с драйвером, поддерживающим OpenAL.
OpenAL (Open Audio Library, открытая звуковая библиотека) — альтернатива DirectSound3D, появилась 2003 г. и так же, как и DirectSound, позволяет прямое ускорение аппаратных средств аудио, подключая ЕАХ. Это кросс-платформенная библиотека API, предназначенная для моделирования трехмерного звукового окружения (акустический рендеринг). Первоначально была разработана Loki Software для переноса игр из среды Windows в ОС Linux. Функционирование OpenAL заключается в совместном рассмотрении источника звука, БД звуковых сигналов и приемника сигнала. Звуковая БД содержит образцы сигналов в формате РСМ (16 или 8 бит) как моно так, и стереофонические. Источник задается указателем на БД (тип сигнала), скоростью движения, силой и направлением звучания и пр. параметрами. Слушатель также характеризуется скоростью и направлением движения, расстоянием до источника и пр. В результате моделирования вычисляются такие характеристики воспринимаемого сигнала, как эффект Доплера, ослабление звука с расстоянием и пр., что создает реалистическое впечатление среды звучания.
Командное управление звуковыми устройствами. Цифровой интерфейс музыкальных инструментов (Musical Instrument
Digital Interface — MIDI) появился в начале 1980-х гг. и был разработан, чтобы обеспечить стандартный интерфейс между пультами управления музыкой (наподобие клавиатур) и звуковыми генераторами (синтезаторов, «роботов-барабанщиков» и пр.). В этой области синтеза звука также имеются свои стандарты. Основным является стандарт МТ-32, разработанный фирмой Roland и названный в соответствии с одноименным модулем генерации звуков. Этот стандарт также определяет основные средства для управления расположением инструментов, голосов, а также для деления на инструментальные группы (клавишные, ударные и т. д.).
Интерфейс MIDI передает не звук, а команды, которые выполняет устройство-приемник. Например, если на клавиатуре нажата определенная клавиша, то передается команда Note On (включить ноту), которая заставляет принимающее устройство проиграть некоторую музыкальную ноту. В Windows MIDI-фай- лы могут воспроизводиться программой-проигрывателем MIDI- Sequencer. Команда состоит из трех элементов:
- • байта состояния (status Byte);
- • номера ноты (Note Number);
- • значения скорости нажатия клавиши (Velocity Value).
Байт состояния содержит информацию о типе команды
(в этом случае — «включить ноту»), а также, на какой канал она должна быть послана (1—16).
Номер ноты описывает клавишу, которая была нажата (скажем, «ре» Большой Октавы).
Значение скорости указывает силу, с которой эта клавиша была нажата. Принимающий инструмент будет исполнять эту ноту, пока не придет команда Note Off (отключить ноту), которая содержит аналогичные данные.
В зависимости от того, какой именно звук проигрывается, синтезаторы по-разному обрабатывают данные Velocity Value. Звук фортепьяно, например, становится громче, если клавиша нажата более сильно, а также изменяются тональные свойства. Профессиональные синтезаторы часто вводят дополнительные тембры, чтобы подражать звуку молоточков, ударяющих по струнам.
MIDI обеспечивает соединение более чем по 16 каналам, позволяя подключить до 16 инструментов MIDI к одному интерфейсу. Некоторые MIDI-интерфейсы имеют 16 выходов, позволяя одновременно обращаться к 256 инструментам.
Программные средства управления печатью (page description languages, языки описания страниц)
Коммуникация между компьютером и принтером сегодня совсем иная, нежели когда текст передавался в коде ASCII и был размечен бинарными управляющими кодами, которые интерпретировал принтер, переключаясь на вывод подчеркнутого, полужирного, курсивного, уплотненного или разреженного шрифтов. Эти шрифты должны были быть встроены в принтер (или драйвер) и, кроме программного управления, могли переключаться простым нажатием кнопок на его панели управления.
Основное преимущество ASCII-текста состоит в простоте процесса — если текст содержит символ «А», код ASCII для «А» передается на принтер, который, декодировав его, печатает «А». Основная проблема состояла в том, что требовалось тщательное планирование, чтобы разместить напечатанные символы в тех же самых позициях, что и на экране. Процесс печати был аппаратно-зависим, и результаты его были непредсказуемы при выводе на разные принтеры, располагающие различными формами и размерами шрифтов.
PostScript. Возможно первый стандартный и мультиплатфор- менный язык описания страниц (page description language), не зависящий от аппаратуры, был выпущен в 1985 г. фирмой Adobe — PostScript Уровня 1. Он создает описания страниц в векторной форме, которые передаются на дисплей или принтер, где преобразуются в растровые образы в соответствии с максимальным разрешением устройства. Например, монитор обеспечивает 75 dpi, лазерный принтер — 300 dpi, а фотонаборный автомат — до 2400 dpi. Каждое из устройств воспроизводит PostScript-программы на уровне своих возможностей, но все эти изображения геометрически подобны. В этом состоит аппаратурная независимость и выполнение принципа WYSIWYG (what you see is what you get — что вы видите — это то, что вы получите).
Команды PostScript Уровня 1 могут быть посланы на прин- тер/дисплей из любой ЭВМ или ОС и от драйвера требовалось только трансформировать содержание документа в эти команды, которые затем могли бы интерпретироваться любым PostScript- принтером. Эти особенности вкупе с тем фактом, что Adobe являлась единственным владельцем официальной лицензии, а также по причине снобизма сообщества пользователей Macintosh
Apple сделали PostScript-совместимые устройства в конечном счете престижными, а следовательно, очень дорогими.
PostScript Extreme (ранее названный Supra) — более поздняя разработка Adobe, ориентирован на такие крупномасштабные высокоскоростные системы печати верхнего уровня, как цифровые печатные станки.
PCL. Подход Adobe оставил нишу в рынке, которую Hewlett-Packard быстро заполнил собственной разработкой — языком описания страниц, который не зависел от устройств и базировался на командном языке принтеров (PCL, Printer Command Language), выпущенном HP в 1970-х гг.
Маркетинговая стратегия Hewlett-Packard привела к появлению множества принтеров, оборудованных аналогами PCL и немного более дешевых, чем их Postscript-лицензированные аналоги, однако без гарантии 100%-ной идентичности вывода на всех этих принтерах.
PCL был первоначально предназначен для матричных принтеров и использовал коды бинарной разметки, управляющие шрифтами (еsc-последовательности), а не полный язык описания страниц. Первая широко распространившаяся версия (PCL 3) поддерживала только простые задачи печати, PCL 4 добавляет лучшую поддержку графики и все еще используется в принтерах настольных ПК, поскольку требует меньшей мощности при обработке, чем PCL 5 или следующая версия PCL 6.
PCL 5, разработанный для LaserJet III, содержал подобный PostScript набор возможностей — масштабируемые шрифты, системные и векторные описания Intellifont, поддерживающие WYSIWYG на настольном компьютере, а также различные формы сжатия, которые существенно убыстряли печать по сравнению с PostScript 1. PCL 5е обеспечивал двунаправленную связь для сообщения о состоянии принтера, но не добавлял никаких улучшений качества печати, в то время как PCL 5с включал усовершенствования для цветной печати.
GDI-принтеры. Альтернативой лазерным принтерам, которые управляются языками, подобными PostScript и PCL, являются растровые принтеры, совместимые с Windows GDI. При этом на ПК осуществляется рендеринг (подготовка к выводу) страниц перед пересылкой их в растровой форме для прямого вывода на печать, используя принтер только как механизм печати. В этом случае нет никакой потребности в дорогих встроенных процессорах или памяти, что существенно удешевляет
принтер. Однако передача страницы в сжатой растровой форме занимает длительное время, что уменьшает скорость печати.
Некоторые изготовители выбирают для использования Windows Print System — стандарт, разработанный Microsoft, для поддержки универсальной архитектуры для GDI-принтеров. Процесс Windows Print System несколько отличается от обычного GDI, преобразуя GDI в растровую форму в процессе печати и сокращая зависимость принтера от процессора ПК, уменьшая требования к мощности ПК.
Установка устройств в среде ОС Windows
Большинство устройств, изготовленных после 1995 г., используют технологию Plug and Play — возможность работы с устройством сразу же после его подключения к компьютеру, без необходимости донастройки или установки дополнительного программного обеспечения. Windows устанавливает устройства Plug and Play и их драйверы автоматически. Однако при установке более старой версии драйвера или устройства поддержка Plug and Play может быть ограниченной или отсутствовать вообще.
Обычно при установке оборудования, несовместимого со стандартом Plug and Play, необходимо выполнить некоторые шаги ручной настройки. Для изменения параметров старых версий устройств предназначены — мастер установки оборудования на панели управления и диспетчер устройств.
Чтобы установить устройство с помощью мастера установки оборудования или диспетчера устройств, необходимо войти в систему с учетной записью администратора или члена группы «Администраторы». Если компьютер подключен к сети, установка оборудования может быть запрещена параметрами сетевой политики. Если драйверы устройства уже были загружены администратором, установить устройство можно без прав администратора.
Подключите устройство к соответствующему порту или гнезду компьютера в соответствии с указаниями производителя. Windows или инструкции изготовителя устройства могут требовать перезагрузки компьютера.
Если устройство, например звуковую плату, необходимо установить в гнездо внутри компьютера, следует завершить работу Windows и выключить компьютер. Снимите крышку корпуса
компьютера и установите устройство в соответствующее гнездо. Закройте крышку и включите компьютер.
При установке устройства SCSI подключите его к SCSI-порту компьютера в соответствии с указаниями производителя. Перезагрузите или включите компьютер. Необходимо убедиться, что номер устройства используется только для одного SCSI-устройства. Чтобы изменить номер устройства, обратитесь к документации устройства.
При установке устройств USB или IEEE 1394 подключите их к любому USB- или IEEE-порту компьютера. При появлении соответствующего приглашения следуйте инструкциям на экране. При установке устройств USB или IEEE 1394 выключать или перезагружать компьютер не требуется. Хотя технологии USB и IEEE 1394 похожи, разъемы USB и IEEE 1394 не являются взаимозаменяемыми.
Перед удалением устройства Plug and Play необходимо уведомить об этом Windows с помощью диспетчера устройств. Тогда Windows-драйверы устройства больше не будут загружаться при запуске компьютера.
Оцените статью:[Всего голосов: 0 Средняя оценка: 0]