![]() Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Совместно используемая физическая память
О физической памяти говорят, что она совместно используется (shared), если она отображается на виртуальное адресное пространство нескольких процессов, хотя виртуальные адреса в каждом процессе могут отличаться. Следующим рисунок иллюстрирует это утверждение. Если файл, такой как DLL, находится в совместно используемой физической памяти, то о нем можно говорить как о совместно используемом. Одно из преимуществ файлов, отображаемых в память, заключается в том, что их легко использовать совместно. Присвоение имени объекту «отображение файла» делает возможным совместное использование файла несколькими процессами. В этом случае его содержимое отображено на совместно используемую физическую память (рис. 7.5). Возможно также совместное пользование содержимого файла подкачки с помощью механизма отображения файла
Рис. 7.5 –Отображение файла Каждый процесс Win32 получает виртуальное адресное пространство (virtual address space), называемое также адресным пространством, или пространством процесса (process space), объем которого равен 4 Гб. Таким образом, код процесса может ссылаться на адреса с &Н00000000 по &HFFFFFFFF (или с 0 по 232 - 1 = 4 294 967 295 в десятичной системе счисления). Конечно, так как виртуальные адреса - это просто числа, заявление о том, что каждый процесс получает свое собственное виртуальное адресное пространство, выглядит довольно бессмысленным. (Это все равно, что сказать, что каждый человек получает свой собственный диапазон возраста от 0 до 150). Тем не менее, это утверждение должно означать, что Windows не видит ни какой взаимосвязи в том, что и процесс А, и процесс В используют один и тот же виртуальный адрес, например &Н40000000. В частности, Windows может сопоставить (или не сопоставить) виртуальным адресам каждого процесса разные физические адреса. Использование адресного пространства в Windows NT На рисунке 7.6 показана общая схема использования адресного пространства процесса в Windows NT.
![]() ![]() Рис. 7.6. Схема использования адресного пространства процесса в Windows NTОбласть А Как видно из рисунка, Windows NT резервирует первые 64 Кб виртуальной памяти для специального назначения и помечает эту область как недоступную для программ пользовательского режима. При работе с указателями, а работать с ними программистам VC++ приходится довольно часто, легко забыть проинициализировать один из них. Например, рассмотрим следующий код: int *pi; // Объявляем указатель на тип integer. *pi = 5; // Устанавливаем указатель на целочисленное значение. Этот код не будет работать. Проблема в том, что указатель должен ссылаться на переменную (содержать ее адрес), а не хранить ее значение. В первой строке кода объявляется указатель, который изначально ничем не инициализирован, то есть является указателем типа NULL (NULL pointer). Во второй строке выполняется операция записи числа 5 по нулевому адресу памяти. Чтобы предотвратить доступ к защищенной области, данная нижняя часть памяти резервируется Windows. В результате код, подобный представленному в предыдущем примере, приведет к общей ошибке защиты (GPF). Таким образом, программист информируется об ошибочной инициализации указателя.
Область В Область В начинается на верхней границе 64 Кб рассмотренной выше области А и распространяется до отметки, лежащей на 64 Кб ниже, чем отметка 2 Гб. Таким образом, размер области В равен 2 Гб - 128 Кб (почти половина всего адресного пространства). Отдельные ее части отображают основной загрузочный модуль приложения, любые относящиеся к приложению DLL, в их числе системные DLL, такие как KERNEL32.DLL, USER32 DLL, GDI32.DLL и т.д. Стоит отметить особо, что эта область может включать как автономные (unshared), так и совместно используемые файлы. Системные DLL, такие как KERNEL32.DLL,используются совместно, так как в физической памяти присутствует только одна копия каждой из них. Как правило, эта копия отображается на одни и те же виртуальные адреса каждого процесса, но это необязательно.
Область С Область С - это область объемом 64 Кб, сразу под отметкой 2 Кб, где начинается зарезервированное Windows адресное пространство. Она используется как своего рода разграничительная полоса, препятствующая обращениям к адресам памяти, которые разделяют открытую для доступа область В и недоступную область D, принадлежащую Windows. Область D Эта область зарезервирована для использования Windows NT (например, исполнительной системой, ядром и драйверами устройств). Приложения не могут обращаться к памяти в этом диапазоне виртуальных адресов. Любая попытка сделать это приведет к ошибке нарушения доступа (access violation, GPF) |
||||||||||
Последнее изменение этой страницы: 2018-05-10; просмотров: 308. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |