КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Совместно используемая физическая памятьО физической памяти говорят, что она совместно используется (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). Таким образом, программист информируется об ошибочной инициализации указателя.
|