Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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




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

 


Поделиться:

Дата добавления: 2015-09-14; просмотров: 61; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты