Видеосистема РС
Продолжая разговор о видеосистеме PC, рассмотрим способы
формирования изображений в графическом и текcтовом режиме и обсудим пути
появления "живых" видеоизображений на экране компьютерного монитора.
Существует два основных режима вывода информации я графический и
символьный (текстовый). Хотя исторически первые видеосистемы работали в
символьном режиме, начать объяснение работы удобнее с графического.
Графический режим
В графическом режиме имеется возможность индивидуального
управление свечением каждой точки экрана монитора независимо от
состояния остальных. Этот режим обозначают как Gr (Graphics) или APA
(All Points Addressable я все точки адресуемы). В графическом режиме
каждой точке экрана я пикселу я соответствует ячейка специальной памяти,
которая сканируется схемами адаптера синхронно с движением луча
монитора. Эта постоянно циклически сканируемая (с кадровой частотой)
память называется видеопамятью (Video Memory), или VRAM (Video RAM).
Последнее сокращение можно спутать с названием специализированных
микросхем динамической памяти, оптимизированной именно под данное
применение. Процесс постоянного сканирования видеопамяти называется
регенерацией изображения, и, к счастью, этого же сканирования
оказывается достаточным для регенерации информации микросхемам
динамической памяти, применяемой в этом узле. Для
программно-управляемого построения изображений к видеопамяти также
должен обеспечиваться доступ и со стороны системной магистрали
компьютера, причем как по записи, так и по чтению. Количество бит
видеопамяти, отводимое на каждый пиксел, определяет возможное число
состояний пиксела я цветов, градаций яркости или иных атрибутов
(например, мерцание). Так при одном бите на пиксел возможно лишь два
состояния я светится или не светится. Два бита на пиксел доставляли
немало удовольствия любителям цветных игрушек даже на адаптерах CGA я
можно было иметь одновременно четыре цвета на экране. Четыре бита на
пиксел (16 цветов), обеспечиваемые адаптером EGA, были достаточны для
многих графических приложений (например, графика в САПРах). Пределом
мечтаний в свое время было 256 цветов (8 бит на пиксел) адаптера VGA я
цветная фотография розы на экране монитора казалась великолепной. Сейчас
остановились на режимах High Color (15 бит я 32768 цветов или 16 бит я
65536 цветов), а для профессионалов я True Color - "верный цвет" (24 бит
я 16.7 млн. цветов), реализуемых современными адаптерами и мониторами
SVGA. 15 и 24ябита распределяются между базисными цветами R:G:B поровну
(5:5:5 и 8:8:8), 16ябит я с учетом особенностей цветовосприятия
неравномерно (5:6:5 или 6:6:4). Логически видеопамять может быть
организована по-разному, в зависимости от количества бит на пиксел, но в
любом случае имеет место отображение матрицы пикселов экрана на биты
видеопамяти я Bit Mapping. Растровый формат хранения изображений, при
котором биты так или иначе отображают пикселы, называется битовой картой
(Bit-Map). С точки зрения плотности хранения графической информации этот
формат не самый эффективный, но в видеопамяти растрового дисплея из-за
напряженности со временем при регенерации изображения иной формат
неприемлем. Объем видеопамяти (в битах), требуемый для хранения образа
экрана, определяется как произведение количества пикселов в строке на
количество строк и на количество бит на пиксел. Так для режима 800 x 600
x 256 цветов требуется 480000 бит или около 469 Кб, а для режима 1024 x
768 True Color я 2.25 Мб. Если физический объем видеопамяти превышает
необходимый для отображения матрицы всего экрана, видеопамять можно
разбить на страницы яобласти видеопамяти, в которых умещаются образы
целого экрана. Формирование битовой карты изображения в видеопамяти
графического адаптера производится под управлением программы,
исполняемой центральным процессором. Сама по себе задача формирования
процессору вполне по силам, но при ее решении требуется пересылка
большого объема информации в видеопамять, а для многих построений еще и
чтение видеопамяти со стороны процессора. Видеопамять большую часть
времени занята выдачей информации схемам регенерации изображения в
довольно напряженном темпе. От этого процесса она свободна только во
время обратного хода луча по строке и кадру, но это меньшая часть
времени. Если обращение к активной странице видеопамяти со стороны
процессора происходит во время прямого хода, и быстродействия схем
адаптера недостаточно для того, чтобы это обращение вписалось между
соседними выборками процесса регенерации, на экране появится штрих от
несчитанной информации пикселов. Если такое обращение происходит часто,
на экране появляется "снег", что неприятно. Дожидаться обратного хода по
строке или кадру накладно: строчный период коротких (несколько
микросекунд) интервалов обратного хода имеет порядок 25 мкс, а кадровый
период длинного (миллисекунды) обратного хода имеет порядок 20 мс, в то
время как цикл обращения процессора к обычной памяти не превышает сотен
(а у современных компьютеров я десятков) наносекунд. Так что канал связи
процессора с видеопамятью представляет собой узкое горлышко, через
которое пытаются протолкнуть немалый поток данных, причем чем более
высокое разрешение экрана и чем больше цветов (бит на пиксел), тем этот
поток должен быть интенсивнее. Конечно, при выводе статической картинки
это вроде и не страшно, но "оживить" изображение оказывается
проблематично. Выходов из этого затруднения имеется несколько.
Во-первых, повышают быстродействие видеопамяти. Во-вторых, расширяют
разрядность шин графического адаптера, причем как внутренней (шины
видеопамяти), так и интерфейсной, и применяют высокопроизводительные
шины (локальную VLB, PCI или AGP). Расширение разрядности позволяет за
один цикл обращения передать большее количество бит данных я повысить
производительность. Однако если у адаптера, к примеру VGA, разрядность
интерфейсной шины 16 бит, а установлен минимальный объем памяти, при
котором используется только 8 бит, то эффективная разрядность интерфейса
окажется всего 8 бит. Этим объясняется не совсем очевидный факт, что
производительность графического адаптера зависит от объема установленной
видеопамяти. В-третьих, повысить скорость видеопостроений можно
применением кэширования видеопамяти или теневой видеопамяти, что по сути
почти одно и то же. В этом случае при записи в область видеопамяти
данные будут записаны как в видеопамять, так и в ОЗУ (или даже в кэш), а
при считывании из этой области обращение будет только к
быстродействующему ОЗУ. И в-четвертых, можно принципиально сократить
объем информации, передаваемой графическому адаптеру, но для этого
графический адаптер должен быть наделен "интеллектом". В современных
компьютерах используются все эти решения. Под интеллектом
графического адаптера подразумевается наличие на его плате собственного
процессора, способного формировать растровое изображение в видеопамяти
(bit-map) по командам, полученным от центрального процессора. Команды
ориентируются на наиболее часто используемые методы описания
изображений, которые строятся из отдельных графических элементов более
высокого уровня, чем пикселы. Команды рисования (Drawing Commands)
обеспечивают построение графических примитивов я точки, отрезка прямой,
прямоугольника, дуги, эллипса. Примитивы такого типа в командах
описываются в векторном виде, что гораздо компактнее, чем их растровый
образ. Таким образом удается значительно сократить объем передаваемой
графической информации за счет применения более эффективного способа
описания изображений. К командам рисования относится и заливка
замкнутого контура, заданного в растровом виде, некоторым цветом или
узором (pattern). Она ускоряется особенно эффективно: при программной
реализации процессор должен просмотреть содержимое видеопамяти вокруг
заданной точки, двигаясь по всем направлениям до обнаружения границы
контура и изменяя цвет пикселов на своем пути. При этом требуется чтение
большого объема данных видеопамяти, их анализ и запись модифицированных
данных обратно в видеопамять. Процессор интеллектуального адаптера
способен выполнить эту операцию быстро и не выходя с этим потоком данных
на внешнюю магистраль. Копирование блока с одного места экрана на
другое применяется для "прокрутки" изображения экрана в разных
направлениях. Эта команда сводится к пересылке блока бит я BitBlT (Bit
Block Transferring), и эта операция интеллектуальным адаптером может
быть сильно ускорена. Для формирования курсора на графическом экране
применяют команды работы со спрайтами. Спрайт (Sprite) я небольшой
прямоугольный фрагмент изображения, который может перемещаться по экрану
как единое целое. Перед использованием его программируют я определяют
размер и его растровое изображение, после чего он может перемещаться по
экрану, для чего достаточно только указывать его координаты.
Аппаратная поддержка окон (Hardware Windowing) упрощает и ускоряет
работу с экраном в многозадачных (многооконных) системах. На
традиционном графическом адаптере при наличии нескольких, возможно
перекрывающих друг друга окон программе приходится отслеживать
координаты обрабатываемых точек с тем, чтобы не выйти за пределы своего
окна. Аппаратная поддержка окон упрощает вывод изображений: каждой
задаче выделяется свое окно я область видеопамяти требуемого размера, в
котором она работает монопольно. Взаимное расположение окон сообщается
интеллектуальному адаптеру, и он для регенерации изображения синхронно с
движением луча по растру сканирует видеопамять не линейно, а
перескакивая с области памяти одного окна на другое. Если объем
видеопамяти превышает необходимый для данного формата экрана и глубины
цветов, то в ней можно строить изображение, превышающее по размеру
отображаемую часть. Интеллектуальному адаптеру можно поручить
панорамирование (Panning) я отображение заданной области. При этом
горизонтальная и вертикальная прокрутка изображения не потребует
операций блочных пересылок (конечно, в пределах сформированного большого
изображения) я для перемещения достаточно лишь изменить указатель
положения (этакий "большой спрайт"). Вышеописанные функции
интеллектуального адаптера относятся к двумерной графике (2D).
Современные графические адаптеры берут на себя и многие функции
построения трехмерных изображений. Не вдаваясь в подробности (это может
быть темой отдельного разговора), можно сказать, что трехмерное
изображение должно состоять из ряда поверхностей различной формы. Эти
поверхности "собираются" из отдельных элементов, чаще треугольников,
каждый из которых имеет трехмерные координаты вершин и описание
поверхности (цвет, узор). Перемещение объектов (или наблюдателя)
приводит к необходимости пересчета всех координат. Для создания
реалистичных изображений учитывается перспектива я пространственная и
атмосферная (дымка или туман), освещенность поверхностей и отражение
света от них, прозрачность и многие факторы. Конечно, для построения
сложных изображений графическому адаптеру будет явно тесно в
ограниченном объеме видеопамяти. Для обеспечения доступа к основной
памяти компьютера он должен иметь возможность управления шиной (bus
mastering). Специально для таких адаптеров в 1996 г. появился новый
канал связи с памятью я AGP (Accelerated Graphic Port, который будет
описан позже. Ускорение построений в интеллектуальном адаптере
обеспечивается несколькими факторами. Во-первых, это сокращение объема
передачи по магистрали. Во-вторых, во время работы процессора адаптера
центральный процессор свободен, что ускоряет работу программ даже в
однозадачном режиме. В-третьих, процессор адаптера, в отличие от
процессора с самой сложной в мире системой команд я представителя
семейства x86, ориентирован на выполнение меньшего количества
инструкций, а потому способен выполнять их гораздо быстрее центрального.
И в-четвертых, скорость обмена данных внутри адаптера может повышаться
за счет лучшего согласования обращений к видеопамяти для операций
построения с процессом регенерации изображения, а также за счет
расширения разрядности внутренней шины данных адаптера. В современных
графических адаптерах широко применяется двухпортовая видеопамять VRAM и
WRAM, а разрядность внутренней шины 64 бит (при 32-битной внешней шины)
считается нормой. На подходе и адаптеры со 128-разрядной внутренней
шиной. Правда, и здесь полная разрядность шины (но уже внутренней) может
и не использоваться при малом объеме установленной видеопамяти. По
отношению к центральному процессору и оперативной памяти компьютера
различают графические сопроцессоры и акселераторы. Графический
сопроцессор представляе собой специализированный процессор с
соответствующим аппаратным окружением, который подключается к системной
шине компьютера и имеет доступ к его оперативной памяти. В процессе
своей работы сопроцессор пользуется оперативной памятью, конкурируя с
центральным по доступу и к памяти, и к шине. Графический акселератор
работает автономно, и при решении своей задачи со своим огромным объемом
данных может и не выходить на системную шину. Акселераторы являются уже
традиционной составляющей частью практически всех современных
графических адаптеров. Акселераторы двумерных операций
(2D-accelerators), необходимых для реализации графического интерфейса
пользователя GUI (Graphic User Interface) часто называют
Windows-акселераторами, поскольку их команды обычно ориентированы на
функции этой популярной оболочки и операционной системы. Более сложные
акселераторы выполняют и трехмерные построения, их называют
3D-акселераторами. Итак, мы рассмотрели варианты организации видеопамяти
и кратко обсудили способы формирования в ней битовой карты изображения.
При регенерации на выходе видеопамяти (или сдвиговых регистров) имеется
некоторое количество бит, отвечающих за раскраску текущего выводимого
пиксела. Количеством этих бит N определяется максимальное число цветов,
присутствующих на экране C=2N. Однако трактовать эти биты можно
по-разному. При одном бите на пиксел и монохромном мониторе трактовка в
принципе однозначна (светится - не светится), хотя были мониторы,
допускающие реверс изображения. При двух битах на точку возможности
цветного монитора, у которого можно управлять тремя цветами,
используются ограниченно: монитор обеспечивает по крайней мере 8 цветов,
а адаптер может выдать только 4. Для смягчения этого дисбаланса
применили так называемую технику палитр (Pallette). Ее суть заключается
в том, что биты одного пиксела, поступающие с видеопамяти, перед выходом
в интерфейс монитора проходят через некоторый управляемый
преобразователь. Выход этого преобразователя имеет разрядность,
поддерживаемую интерфейсом монитора, и биты видеопамяти задают номер
цвета в выбранной палитре цветов. Переключив палитру (или
перепрограммировав ее набор цветов), можно получить другую гамму цветов
на экране, но опять-таки одновременно будет присутствовать не более 2N
цветов.
|