Мегаобучалка Главная | О нас | Обратная связь


ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 13. 1. Вызов функций API



2015-12-13 420 Обсуждений (0)
ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 13. 1. Вызов функций API 0.00 из 5.00 0 оценок




1. Вызов функций API

2. Файлы, отображаемые в память. Объекты отображения файлов.

Отображение файлов

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

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

• Отпадает необходимость в выполнении операций непосредственного файлового ввода/вывода (чтения и записи).

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

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

• В некоторых случаях значительно повышается эффективность обработки файлов.

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

• Обеспечивается возможность разделения памяти несколькими параллельно выполняющимися процессами (глава 6) за счет отображения на их виртуальные адресные пространства одного и того же обычного файла или файла подкачки (разделение памяти несколькими процессами является одной из основных причин использования объекта отображения файла подкачки).

• Отпадает необходимость в расходовании излишнего пространства файла подкачки.

ОС сама использует методы отображения файлов для реализации DLL, а также для загрузки и выполнения исполняемых (.EXE) файлов. Библиотеки DLL описаны в конце настоящей главы.

Сначала необходимо создать для открытого файла объект отображения файла (file mapping object), у которого имеется дескриптор, а затем отобразить этот файл или только некоторую его часть на виртуальное адресное пространство процесса. Объектам отображения можно присваивать имена, по которым к ним смогут обращаться другие процессы, разделяющие память совместно с данным процессом. Кроме того, объекты отображения файлов имеют параметры размера и атрибуты защиты.

 

Динамическая память для кучи должна физически резервироваться в файле

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

перемещение страниц между физической памятью и файлом подкачки, а также

отображает в него виртуальное адресное пространство процесса. Когда процесс

завершается, физическое пространство в файле освобождается.

Возможность отображения файлов в память Win32 также применима и для

отображения в память обычных файлов. При этом проявляется ряд

преимуществ.

• Нет необходимости выполнять прямой ввод-вывод из файла (запись и

чтение).

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

осторожны при использовании указателей.

• Удобные и эффективные алгоритмы для работы в памяти (сортировка,

деревья поиска, обработка строк и т.д.) могут обрабатывать данные файла,

даже если его размер намного превышает объем доступной физической

памяти. При этом в случае больших файлов быстродействие будет

определяться характером подкачки страниц.

• В некоторых случаях может быть значительно повышена производи-

тельность обработки файлов.

• Отсутствует потребность в уцравлении буферами и данными файла,

которые они содержат. Эту работу эффективно и надежно выполняет

операционная система.

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

отображая свои виртуальные адресные пространства в один файл или в

файл подкачки (межпроцессное разделение памяти — главная предпосылка

для отображения в файл подкачки).

• Нет необходимости расходовать пространство файла подкачки.

Сама операционная система использует отображение в память для

реализации библиотек динамической компоновки (DLLs), а также для загрузки

исполняемых (.ЕХЕ) файлов и их выполнения.

Объекты отображения файлов

Первый этап — создание для открытого файла объекта отображения файла,

который имеет дескриптор, и последующее отображение адресного

пространства процесса на весь файл или на его часть. Объекты отображения

файлов могут получать имена, поэтому они доступны другим процессам для

разделения памяти. Также отображаемый объект имеет защиту, атрибуты

безопасности и размер.

HANDLE CreateFileMapping ( HANDLE hFile,

LPSECURITY_ATTRIBUTES lpsa, DWORD fdwProtect,

DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow,

LPCTSTR lpszMapName)

Возвращаемое значение: дескриптор отображения файла или NULL при

неудаче.

hFile — дескриптор открытого файла с флагами защиты, совместимыми с

параметром fdwProtect. Значение (типа HANDLE) 0 X FFFFFFFF (эквивалентно

константе INVALID_HANDLE_VALUE) указывает на файл подкачки, и вы

можете использовать это значение для межпроцессного разделения памяти без

создания отдельного файла.

Тип LPSECURITY_ATTRIBUTES позволяет защитить объект отображения.

Параметр определяет доступ к отображенному файлу с помощью описанных

ниже флагов. Для специальных целей разрешены дополнительные флаги;

например, флаг SEC_IMAGE определяет исполняемый образ (подробнее это

описано во встроенной документации).

• Установленный флаг PAGE_READONLY означает, что программа может

только читать страницы в отображенной области и не может записывать

или исполнять их. Файл hFile должен быть открыт с правом доступа

GENERIC_READ.

• Флаг PAGE_READWRITE предоставляет полный доступ к объекту, если

файл hFile открыт с правами доступа GENERIC_READ и

GENERIC_WRITE.

• Флаг PAGE_WRITECOPY определяет, что при изменении содержимого

отображенной памяти собственная (для данного процесса) копия

записывается в файл подкачки, а не в исходный файл. Отладчик может

использовать этот флаг при определении точек останова в разделяемом

коде. Результат будет различным в Windows 2000/NT и Windows 9x

Параметры dwMaximumSizeHigh и dwMaximumSizeLow определяют

размер объекта отображения. Если указан нуль, используется текущий размер;

обязательно определяйте размер при использовании файла подкачки. Если

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

при необходимости будет немедленно установлен нужный размер файла. Не

отображайте область файла за указанной границей — объект отображения не

может расти.

lpszMapName указывает имя объекта отображения, что позволяет другим

процессам совместно использовать объект. Регистр символов в имени не

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

NULL.

Об ошибке сообщает возвращаемое значение NULL (a не

INVALID_HANDLE_VALUE).

Указав имя существующего объекта отображения, можно получить

дескриптор отображения файла. Имя должно быть получено предшествующим

вызовом функции CreateFileMapping. Два процесса могут совместно

использовать память, разделяя отображение файла. Первый процесс создает

отображение файла, а следующий открывает это отображение, используя имя.

Если названного объекта не существует, открыть его не удастся..

HANDLE OpenFileMapping ( DWORD dwDesiredAccess,

BOOL bInheritHandle, LPCTSTR lpName);

Возвращаемое значение: дескриптор отображения файла или NULL при

неудаче.

dwDesiredAccess использует тот же набор флагов, что и параметр функции

CreateFileMapping. Значение lpName — имя, полученное вызовом функции

CreateFileMapping. Параметр blnheritHandle - наследование дескриптора.

Функция CloseHandle, как и ожидалось, уничтожает дескрипторы

отображения.

Отображение адресного пространства процесса в объекты отображения

Следующий этап — выделение виртуального адресного пространства и

отображение его в файл через объект отображения. С точки зрения

программиста, такое выделение памяти аналогично действию функции

HeapAlloc, но намного грубее, более крупными частями. Возвращается

указатель на выделенный блок (или образ файла); отличие состоит в том, что выделенный блок отображается в указанный пользователем файл, а не в файл подкачки обмена. Объект отображения файла играет ту же роль, что и куча при использовании функции HeapAlloc.

LPVOID MapViewOfFile (HANDLE hMapObject,

DWORD fdwAccess, DWORD dwOffsetHigh,

DWORD dwOffsetLow, SIZE_T cbMap);

Возвращаемое значение: начальный адрес блока (образ файла) или

NULL. при неудаче.

Параметры

hMapObject указывает объект отображения файла, полученный от

функций CreateFileMapping или OpenFileMapping. Значение параметра

fdwAccess должно соответствовать правам доступа объекта отображения.

возможны три значения флагов: FILE_MAP_WRITE, FILE_MAP_READ и

FILE_MAP_ALL_ACCESS (поразрядное "или" двух предыдущих флагов).

Параметры dwOffsetHigh и dwOffsetLow определяют начальное

положение области отображения. Начальный адрес должен быть кратным 64К.

Для отображения от начала файла используйте нулевое значение смещения.

cbMap указывает размер отображаемой области в байтах. Его нулевое

значение при вызове функции MapViewOfFile указывает на то, что весь файл должен быть отображен.

Функция MapViewOfFileEx аналогична, за исключением того, что

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

Освобождение образа файла выполняется так же, как и освобождение

памяти, выделенной в куче, т.е. функцией HeapFree..

BOOL UnmapViewOfFile (LPVOID lpBaseAddress )

Функция FlushViewOfFile заставляет систему записывать "грязные"

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

стандартные функции ввода-вывода, не будут иметь согласованных образов

файла. Выполнение файлового ввода-вывода без буферизации не поможет, так как отображенная память не будет немедленно записываться в файл.

 

3. Файловые системы Win32.



2015-12-13 420 Обсуждений (0)
ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 13. 1. Вызов функций API 0.00 из 5.00 0 оценок









Обсуждение в статье: ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 13. 1. Вызов функций API

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (420)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)