Автор работы: Пользователь скрыл имя, 25 Марта 2014 в 14:49, лекция
Конспект лекций содержит описание технологии системного программирования под Windows с использованием функций Win32 API. В первой части конспекта лекций рассмотрены особенности архитектуры ОС Windows, специфика интерфейса прикладного программирования Win32, структура приложений для Windows. Подробно рассмотрены API функции и основные структуры данных для работы с дисками, каталогами, файлами. Отдельная глава посвящена структурной обработке исключений SEH.
Наконец, Windows обеспечивает более полное использование оперативной памяти и многозадачность.
Существование нескольких различных 32-разрядных операционных систем Windows может сбить с толку. Но, с точки зрения программиста, они похожи. В частности, все они поддерживают один и тот же API Win32. Программы, разработанные для одной системы, могут, с известными оговорками, работать на другой; обеспечивается совместимость по исходному коду и в большинстве случаев двоичная совместимость.
Для простоты будем использовать термины «2000/NT» и «9х», когда нет необходимости указывать на различия. Включая СЕ, мы будем иметь только три, а не пять основных членов семейства Win32.
Охарактеризуем коротко каждую из этих ОС.
Windows 2000 –
это операционная система
Windows 98 –
операционная система
Это ядро намного менее требовательно к памяти, чем ядро Windows 98 и Windows 2000. Оно рассчитано главным образом на карманные и автомобильные компьютеры. Устройства, которыми управляет эта ОС, предназначены только для индивидуального пользования, поэтому ее ядро не поддерживает администрирование, масштабирование и т.д.
Следовательно, Windows 9х можно рассматривать как минимальную настольную клиентскую платформу. Windows 2000 и NT, с другой стороны, можно считать высококачественными платформами клиента и сервера, удовлетворяющими требованиям самых больших приложений.
Многочисленные различия в реализации API Win32 и архитектуре систем могут влиять на производительность, и рекомендации по повышению быстродействия на одной платформе Windows могут быть неприменимы к другой.
Существует несколько основных принципов Win32, которые следует запомнить.
Хотя Win32 был разработан, что называется, «с нуля», он обладает обратной совместимостью с API Win16 для Windows 3.1. Некоторые последствия этого факта могут быть непонятны с точки зрения «32-разрядного» программирования. Например:
Многие основные черты Windows обязаны своей спецификой тому факту, что она является системой, основанной на сообщениях. Если вы не разберетесь в механизме сообщений, то не поймете и Windows. Такой подход к программированию заключается в том, что реакция программы определяется внешними событиями.
В отличие от традиционного последовательного программирования, программирование для Windows является объектно-ориентированным. Система Windows представляет собой набор объектов, именно с ними приходится сталкиваться при программировании.
Самым важным таким объектом является окно. Окно первым появляется при запуске системы или любого приложения и последним исчезает при завершении работы. Windows сообщает приложению, точнее, окну приложения, о некотором событии при помощи сообщения, которое описывает некоторое изменение, произошедшее в окружающей среде. (Приложения, не имеющие окон, не получают сообщения). Кроме этого, механизм сообщений – единственный способ «общения» со своими окнами для самих приложений. Происходит это через операционную систему, которая перенаправляет сообщения нужному объекту (окну). Сообщения используются для настройки, изменения и диагностики состояния всех окон. Сообщение – вход в приложение. Они представляют собой события, на которые, при необходимости, должно реагировать приложение. Каждое сообщение связывается с конкретным окном, с каждым из которых, в свою очередь, связана собственная оконная процедура - специальная функция, отвечающая за обработку поступающих сообщений..
Все сообщения, источником которых служат аппаратные средства, система помещает в определенную структуру данных – первичную входную очередь (raw input queue).
Что значит послать окну сообщение? Это значит записать определенную информацию о каком-либо событии в область памяти, доступную оконной процедуре. Эта область памяти, вмещающая несколько сообщений, действует по принципу стека FIFO (First Input – First Output) и называется очередью программы. В свою очередь, приложение тоже вызывает систему не на прямую, а посылая сообщения системе. Следовательно, существует одна общесистемная очередь сообщений и очереди сообщений у каждого окна.
Существуют две реализации механизма очередей сообщений. В версиях Windows 3.х и более ранних система поддерживала лишь одну очередь сообщений, из которой приложения их и выбирали. В этих системах реализована так называемая невытесняющая многозадачность. При этом возможно возникновение проблем при сбое в активном приложении, когда его невыбранные из очереди сообщения не дают возможность другим приложениям получить сообщения.
Напротив, в 32-разрядных операционных системах Windows 95 и Windows NT реализован метод поддержки отдельных очередей сообщений, который называется десинхронизацией вывода (input desynchronization), при котором новые сообщения лишь ненадолго попадают в первичную входную очередь, после чего перенаправляются в частную очередь конкретного потока 32-разрядного приложения. В самом начале своей работы 32-разрядное приложение обладает единственной очередью сообщений, которая относится к его первичному потоку. В случае если процесс заводит еще один поток, система не создает еще одну очередь немедленно. Дополнительная очередь создается только после того, как второй поток данного приложения впервые направляет в систему относящийся к очереди запрос. Если потоку очередь сообщений не нужна, система не тратит ресурсы на ее создание.
Как происходит обработка очередей сообщений? Откуда система знает о том, что пришло сообщение? Каким образом сообщение из очереди становится известным программе? Вероятно, как программа, так и система с какой-то периодичностью обращаются к очереди и проверяют, нет ли в очереди сообщений. Следовательно, у каждой программы, а также у системы должны существовать циклы, в ходе которых опрашивается очередь и выбирается информация о сообщениях в ней.
Что делать с полученным сообщением? Каждое окно Windows имеет специальную функцию, которая вызывается для обслуживания сообщений. Операционная система только посылает сообщение окну, а оно уже само решает, что делать с этим сообщением. Точнее, программист должен «научить» окно, как отвечать на получаемые сообщения. На всем протяжении этого процесса окно действует как автономный объект, живущий своей собственной жизнью.
Следует сказать, что Windows API в своем составе имеет одну очень важную функцию. Эта функция SendMessage. Ее основная задача – послать сообщение некоторому объекту (возможно, с дополнительными данными), дождаться реакции объекта на это сообщение, обычно в виде числа, которое и вернуть системе. При этом объектом может быть не только окно приложения, но и любой элемент управления, например, кнопка. Сообщение, передаваемое с помощью этой функции, практически немедленно обрабатывается оконной процедурой, т.к. последняя получает сообщение не из очереди, а напрямую. При этом приложение дожидается окончания обработки посланного сообщения.
Конечно же, Windows предоставляет приложениям и возможность послать сообщение некоторому объекту, используя очередь сообщений. Осуществляется это с помощью функции PostMessage. В этом случае приложение продолжает выполняться, не дожидаясь реакции на сообщение.
С точки зрения программиста, Windows является системой, не зависящей от устройств (device independent). Эту независимость обеспечивает библиотека GDI32.dll, а со стороны устройства – драйвер этого устройства. Например, если приложение осуществляет вывод в область пользовательского окна дисплея, это библиотека VGA.dll, если на принтер Epson FX-80, то это библиотека – EPSON9.dll.
Перед операцией вывода на некоторое устройство приложение должно запросить GDI (Grafics Device Interface — интерфейс графических устройств) о загрузке соответствующего драйвера (обычно это происходит автоматически и не требует от программиста дополнительных усилий). Как только драйвер загружен, приложение может настроить ряд параметров вывода (цвет линии, кисти, шрифт и т.д.). Windows обеспечивает хранение этих и других параметров в специальной структуре, называемой контекстом устройства (Device Context – DC).
С точки зрения программы контекст устройства является связующим звеном между программой и устройством.
Информация о работе Системное программирование в среде Win32