Совместно используемая физическая память

О физической памяти говорят, что она совместно используется (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.

Используется для неинициализи-рованных указателей (null pointer). Недоступно в пользовательском режиме. (64 Кб).  
 
 
 

Рис. 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 и т.д. Стоит отметить особо, что эта область может включать как автономные (un­shared), так и совместно используемые файлы. Системные DLL, такие как KERNEL32.DLL,используются совместно, так как в физической памяти присутствует только одна копия каждой из них. Как правило, эта копия отображается на одни и те же вир­туальные адреса каждого процесса, но это необязательно.

 

Область С

Область С - это область объемом 64 Кб, сразу под отметкой 2 Кб, где начинается зарезервированное Windows адресное простран­ство. Она используется как своего рода разграничительная полоса, препятствую­щая обращениям к адресам памяти, которые разделяют открытую для доступа область В и недоступную область D, принадлежащую Windows.

Область D

Эта область зарезервирована для использования Windows NT (например, ис­полнительной системой, ядром и драйверами устройств). Приложения не могут обращаться к памяти в этом диапазоне виртуальных адресов. Любая попытка сде­лать это приведет к ошибке нарушения доступа (access violation, GPF)








Дата добавления: 2018-11-25; просмотров: 511;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.