Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2017-09-28 | 474 |
5.00
из
|
Заказать работу |
|
|
Линейный адрес процесса в Windows состоит из 32 бит и изменяется в пределах от 0хоооооооо до 0xffffffff. Это теоретически позволяет процессу обращаться к 4 Гбайт логической памяти. В операционных системах семейства Windows NT процессу доступны два младших гигабайта этой памяти с диапазоном адресов от 0хоооооооо до 0x7fffffff, а ее старшие два гигабайта с диапазоном адресов от 0xsooooooo до 0xffffffff используются системой. В операционной системе Windows 98 из 2 Гбайт памяти доступной процессу, операционная система использует еще 64 Кбайт памяти с диапазоном адресов от 0хоооооооо до 0x0000ffff для проверки присваивания значений через указатели, значения которых инициализированы в null, и для поддержки совместимости со старыми операционными системами MS-DOS и Windows 3.1.
В операционных Windows виртуальный адрес процесса отличается от линейного адреса этого же процесса только интерпретацией бит линейного адреса. Поэтому, можно сказать, что каждому процессу в Windows также доступно два гигабайта виртуальной памяти. Это не значит, что процесс может использовать всю эту память одновременно. Количество виртуальной памяти, доступной процессу, зависит от емкости физической памяти и дисков. Чтобы ограничить процесс в использовании виртуальной памяти, некоторые страницы в таблице страниц могут быть помечены как недоступные.
После этих замечаний перейдем к описанию состояния виртуальной памяти процесса. С точки зрения процесса, страницы его виртуальной памяти могут находиться в одном из трех состояний:
□ свободны для использования (free);
□ распределены процессу для использования (committed);
□ зарезервированы, но не используются процессом (reserved).
Резервирование, распределение и освобождение виртуальной памяти
|
Для резервирования или распределения области виртуальной памяти процесс должен вызвать функцию virtuaiAiioc, которая имеет следующий прототип:
LPVOID VirtuaiAiioc(
LPVOID IpAddress, // область для распределения или резервирования
SIZE_T dwSize, // размер области
DWORD flAllocationType, // тип распределения
DWORD flProtect // тип защиты доступа
);
В случае успешного завершения эта функция возвращает адрес виртуальной памяти, распределенной или зарезервированной процессом, а в случае неудачи — null. При этом отметим такую деталь, если распределение виртуальной памяти функцией virtuaiAiioc завершается успешно, то выделенная память автоматически инициализируется нулями.
Инициализация и копирование блоков виртуальной памяти
Чтобы заполнить блок памяти определенным значением, используется функция FiliMemory, которая имеет следующий прототип:
VOID FiliMemory (
PVOID Destination, // адрес блока памяти
SIZE_T Length, // длина блока
BYTE Fill // символ-заполнитель
);
Эта функция заполняет блок памяти, длина в байтах и базовый адрес которого задаются соответственно параметрами Length и Destination, символом, заданным в параметре Fill.
Если блок памяти необходимо заполнить нулями, то для этого можно использовать функцию zeroMemory, которая имеет следующий прототип:
VOID ZeroMemory (
PVOID Destination, // адрес блока памяти
SIZE_T Length, // длина блока
);
Параметры этой функции имеют то же назначение, что и параметры функции FiliMemory, исключая символ-заполнитель. Для копирования блока виртуальной памяти используется функция CopyMemory, которая имеет следующий прототип:
VOID CopyMemory (
PVOID Destination, // адрес области назначения
CONST VOID *Source, // адрес исходной области
SIZE_T Length // длина блока памяти
Эта функция копирует блок памяти, длина в байтах и базовый адрес которого задаются соответственно параметрами Length и source в область памяти по адресу Destination. Отметим, что результат выполнения функции CopyMemory непредсказуем, если исходный и результирующий блоки памяти перекрываются.
Для копирования перекрывающихся блоков памяти используется функция MoveMemory, которая имеет следующий прототип:
VOID MoveMemory (
PVOID Destination, // адрес области назначения
CONST VOID *Source, // адрес исходной области
SIZE_T Length // длина блока памяти
);
Параметры этой функции полностью совпадают с параметрами функции CopyMemory.
|
|
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!