46079 (Виртуальная память в Microsoft Windows), страница 2
Описание файла
Документ из архива "Виртуальная память в Microsoft Windows", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "46079"
Текст 2 страницы из документа "46079"
Когда EXE- или DLL-файл загружается с дискеты Windows 2000 целиком копируют его в оперативную память, а в страничном файле выделяют такое пространство, чтобы в нем мог уместиться образ загружаемого файла. Если нагрузка на оперативную память в системе невелика, EXE- или DLLфайл всегда запускается непосредственно из оперативной памяти.Так сделано для корректной работы программ установки. Обычно программа установки запускается с первой дискеты, потом поочередно вставляются следующие диски, на которых собственно и содержится устанавливаемое приложение. Если системе понадобится какой-то фрагмент кода EXE- или DLLмодуля программы установки, на текущей дискете его, конечно же, пет. Но, поскольку система скопировала файл в оперативную память (и предусмотрела для него место в страничном файле), у нее не возникнет проблем с доступом к нужной части кода программы установки
Атрибуты защиты
Отдельным страницам физической памяти можно присвоить свои атрибуты защиты показанные в следующей таблице.
Атрибут защиты | Описание |
PAGE_NOACCESS | Попытки чтения, записи или исполнения содержимого памяти на этой странице вызывают нарушение доступа |
PAGE_READONLY | Попытки записи или исполнения содержимого памяти на этой странице вызывают нарушение доступа |
PAGE_READWRITE | Попытки исполнения содержимого памяти на этой странице вызывают нарушение доступа |
PAGE_EXECUTE | Попытки чтения или записи на этой странице вызывают нарушение доступа |
PAGE_EXECUTE_READ | Попытки записи на этой странице вызывают нарушение доступа |
PAGE_EXECUTE_READWRITE | На этой странице возможны любые операции |
PAGE_WRITECOPY | Попытки исполнения содержимого памяти на этой странице выбывают нарушение доступа, попытка записи приводит к тому, что процессу предоставляется "личная" копия данной страницы |
PAGE_EXECUTE_WRITECOPY | На этой странице возможны любые операции, попытка записи приводит к тому, что процессу предоставляется "личная" копия данной страницы |
Защита типа "копирование при записи"
Атрибуты защиты, перечисленные в предыдущей таблице, достаточно понятны, кроме двух последних: PAGE_WRITECOPY и PAGE_EXECUTE_WRITECOPY. Они предназначены специально для экономного расходования оперативной памяти и места в страничном файле. Windows поддерживает мехянизм, позволяющий двум и более процессам разделять один и тот же блок памяти. Например, если Вы запустите 10 экземпляров программы Notepad, все экземпляры будут совместно использовать одни и те же страницы с кодом и данными этой программы. И обычно никяких проблем не возникает — пока процессы ничего не записывают в общие блоки памяти. Только представьте, что творилось бы в системе, если потоки из разных процессов начали бы одновременно записывать в один и тот же блок памяти!
Чтобы предотвратить этот хаос, операционная система присваивает общему блоку памяти атрибут защиты "копирование при записи" (copy-on-write). Когда поток в одном процессе попытается что-нибудь записать в общий блок памяти, в дело тут же вступит система и проделает следующие операции:
Найдет свободную страницу в оперативной памяти. Заметьте, что при первом проецировании модуля на адресное пространство процесса эта страница будет скопирована на одну из страниц, выделенных в страничном файле. Поскольку система выделяет нужное пространство в страничном файле еще при первом проецировании модуля, сбои на этом этапе маловероятны.
Скопирует страницу с данными, которые поток пытается записать в общий блок памяти, на свободную страницу оперативной памяти, полученную на этапе 1. Последней присваивается атрибут защиты PAGE_WRITECOPY или PAGE_EXECUTE_WRITECOPY. Атрибут защиты и содержимое исходной страницы не меняются.
Отобразит виртуальный адрес этой страницы в процессе на новую страницу в оперативной памяти.
Когда система выполнит эти операции, процесс получит свою копию нужной страницы памяти.
Кроме того, при резервировании адресного пространства или передаче физической памяти через VirtualAlloc нельзя указывать атрибуты PAGE_WRITECOPY или PAGE_EXECUTE_WRITECOPY. Иначе вызов VirtualAlloc даст ошибку, a GetLastError вернет код ERROR_INVALID_PARAMETER. Дело в том, что эти два атрибута используются операционной системой, только когда она проецирует образы EXE- или DLL-файлов.
Базовый адрес | Тип | Размер | Блоки | Атрибут( ы) защиты | Описание |
00000000 | Free | 65536 | |||
00010000 | Private | 4096 | 1 | -RW- | |
00011000 | Free | G1440 | |||
00020000 | Private | 4096 | 1 | -RW- | |
000? 1000 | Free | 61440 | |||
00030000 | Private | 1048576 | 3 | -HW- | Стек потока |
00130000 | Private | 1048576 | 2 | -RW- | |
00230000 | Mapped | 65536 | 2 | -RW- | |
00240000 | Mapped | 90112 | 1 | -R- | \Device\HarddiskVolume1\WINN7\system32\unicode.nls |
00256000 | Free | 40960 | |||
00260000 | Mapped | 208896 | 1 | -R- | \Device\HarddiskVolume1\WINNT\system32\locale.nIs |
00293000 | Free | 53248 | |||
002A0000 | Happed | 266240 | 1 | -R- | \Pevicc\HarddiskVolume1\WINNT\system32\sortkey.nls |
002E1000 | Free | 61440 | |||
002F0000 | Mapped | 16384 | 1 | -R- | \Device\HarddiskVolume1\WINNT\system32\sorttbls.nls |
002F4000 | Free | 49152 | |||
00300000 | Mapped | 819200 | 4 | ER- | |
0003С8000 | Free | 229376 | |||
00400000 | Image | 106496 | 5 | ERWC | С \CD\x86\Debug\14_VMMap.ехе |
0041A000 | Free | 24576 | |||
00420000 | Mapped | 274432 | 1 | -R- | |
00463000 | Free | 53248 | |||
00470000 | Mapped | 3145728 | 2 | ER | |
00770000 | Private | 4096 | 1 | -RW- | |
00771000 | Free | 61440 | |||
00780000 | Private | 4096 | 1 | -RW- | |
00781000 | Free | 61440 | |||
00790000 | Private | 65536 | 2 | -RW- | |
007A0000 | Mapped | 8192 | 1 | -R- | \Device\HarddiskVolume1\WINNT\system32\ctype.nls |
007А2000 | Free | 1763893248 | |||
699D0000 | Image | 45056 | 4 | ERWC | C:\WINNT\Systpm32\PSAPI dll |
6990В000 | Free | 238505984 | |||
77D50000 | Image | 450560 | 4 | ERWC | С:\WINNT\system32\RPCRT4 DLL |
770ВЕ000 | Free | 8192 | |||
770С0000 | Image | 344064 | 5 | ERWC | С:\WINNT\system32\ADVAPI32 dll |
77Е14000 | Free | 49152 | |||
77E20000 | Image | 401408 | 4 | ERWC | C:\WINNT\system32\USER32 dll |
77Е82000 | Free | 57344 | |||
77Е90000 | Image | 720896 | 5 | ERWC | С \WINNT\system32\KERNEL32.dll |
77F40000 | Image | 241664 | 4 | ERWC | С \WINKT\system32\GUI32 DLL |
77F7В000 | Free | 20480 | |||
77FB0000 | image | 483328 | 5 | ERWC | С \WINNT\System32\ntdll.dll |
77FF000 | Free | 40960 | |||
78000000 | Image | 290816 | 6 | bMWC | С \WINNT\system32\MSVCRI.dll |
78047000 | Free | 124424192 | |||
7F6F0000 | Mapped | 1048576 | 2 | ER-- | |
7F7F0000 | Free | 8126464 | |||
7FFB0000 | Mapped | 147456 | 1 | -R-- | |
7FFD4000 | Free | 40960 | |||
7FFDE000 | Private | 4096 | 1 | ERW- | |
7FFDF000 | Private | 4096 | 1 | ERW- | |
7FFE0000 | Private | 65536 | 2 | -R-- |
Таблица 13-2. Образец карты адресного пространства процесса в Windows 2000 на 32-разрядном процессоре типа x86