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