Одним из основополагающих понятий в ОС Windows является понятие контекста. Контекст является объектом операционной системы посредством которого осуществляется вывод информации на внешнее устройство (монитор, принтер и т.п.). Рассмотрим это понятие более подробно на примере вывода графической информации на экран монитора.
Традиционно сложилась следующая схема вывода (рис. 3.1.).
Рис 3.1. Порядок графического вывода в ОС MS DOS
Программа формирует графическое изображение путем записи в видео памяти соответствующей информации. При этом программа должна учитывать графический режим (текстовый или графический), тип адаптера (CGA, VGA, SVGA и т.п.), а также особенности конкретной видео карты, которая преобразует информацию из видео памяти в RGB сигналы, передаваемые на монитор.
Данная схема хорошо работает в случае однозадачного режима, когда адресным пространством видео памяти владеет только одна программа. Поэтому, эта схема получила распространение в ОС типа MS DOS.
В случае многозадачной ОС ситуация несколько другая. Одновременно графический вывод могут осуществлять несколько программ, причем, так как они не зависят друг от друга, они не должны задумываться о состоянии видео памяти и режимах других программ. Более того, в силу рассмотренных в первой лекции свойств ОС, программа должна быть независимой от аппаратной части (в данном случае – видео карты), то есть формировать изображение без учета формата данных в видео памяти. В связи с этим между программой и видео памятью было введено некоторое промежуточное звено, получившее название контекста.
Контекст – структура данных, формируемая операционной системой, хранящая информацию о параметрах и характеристиках устройства вывода, посредством которого программа осуществляет графический вывод информации. Благодаря введению контекста процесс вывода информации изменился и имеет следующий вид (рис. 3.2):
Рис. 3.2. Схема графического вывода в ОС WINDOWS
Каждая программа получает в свое расположение собственный контекст и осуществляет в него вывод изображения. Таким образом, программа может не заботиться о согласовании с другими программами (эту функцию выполняет операционная система). Кроме этого, в этом случае программа рисует в виртуальные координаты (начиная с координаты 0;0), а операционная система перемещает изображение окна уже в физические координаты. Поэтому, программе не нужно заботится о положении окна на экране монитора.
Введение некоторого логического "буфера" между программой и видео памятью позволило решить еще очень важную проблему – аппаратной независимости программного обеспечения. Контекст является строго стандартизированной структурой данных и, более того, АРI содержит стандартный набор функций работы с ним (считается, что все программы осуществляют графический вывод только с использованием этих функций). Сопряжение логического рисунка (в контексте) с конкретной видео картой осуществляется самой операционной системой на основе установленных драйверов. Тем самым достигается, что на любом компьютере (на котором установлена WINDOWS) изображение будет выглядеть так же.