Виртуальное адресное пространство

редактировать
Виртуальный адрес отношение пространства и физического адресного пространства. svg

В вычислениях, виртуальное адресное пространство (VAS ) или адресное пространство - это набор диапазонов виртуальных адресов, которые операционная система делает доступными для процесса. Диапазон виртуальных адресов обычно начинается с низкого адреса и может расширяться до самого высокого адреса, разрешенного архитектурой набора команд компьютера и поддерживаемого реализацией размера указателя операционной системы, которая может быть 4 байтов для 32-битных или 8 байтов для 64-битных версий ОС. Это дает несколько преимуществ, одно из которых - безопасность за счет изоляции процесса, если каждому процессу предоставляется отдельное адресное пространство .

Содержание
  • 1 Пример
  • 2 Linux
  • 3 См. также
  • 4 Примечания
  • 5 Ссылки
Пример
В последующем описании используемая терминология будет специфичной для операционной системы Windows NT, но концепции применимы к другим виртуальным операционные системы с памятью.

Когда новое приложение выполняется в 32-битной ОС, процесс имеет 4 ГиБ VAS: каждый из адресов памяти (от 0 до 2 - 1) в этом пространстве может иметь в качестве значения один байт. Изначально ни у одного из них нет значений ('-' означает отсутствие значения). Использование или установка значений в таком VAS вызовет исключение памяти.

0 4 ГиБ VAS | -------------------------- -------------------- |

Затем исполняемый файл приложения отображается в VAS. Адреса в процессе VAS сопоставляются с байтами в exe-файле. ОС управляет отображением:

0 4 ГиБ VAS | --- vvvvvvv ----------------------------- ------- | отображение | ----- | file bytes app.exe

Значения v - это значения из байтов в сопоставленном файле. Затем сопоставляются требуемые файлы DLL (сюда входят как пользовательские библиотеки, так и системные, такие как kernel32.dllи user32.dll):

0 4 ГиБ VAS | --- vvvvvvv ---- vvvvvv --- vvvv ------------------- | отображение ||||||| |||||| |||| файл байтов app.exe пользователь ядра

Затем процесс начинает выполнение байтов в exe-файле. Однако единственный способ, которым процесс может использовать или устанавливать значения «-» в своем VAS, - это попросить ОС сопоставить их с байтами из файла. Распространенный способ использования памяти VAS таким образом - сопоставить ее с файлом подкачки . Файл подкачки - это один файл, но несколько отдельных наборов смежных байтов могут быть отображены в VAS:

0 4 ГиБ VAS | --- vvvvvvv ---- vvvvvv --- vvvv ---- vv --- v ---- vvv-- | отображение ||||||| |||||| |||| || | ||| файл байтов app.exe ядро ​​пользователь system_page_file

И разные части файла подкачки могут отображаться в VAS разных процессов:

0 4 ГиБ VAS 1 | --- vvvv ---- --- vvvvvv --- vvvv ---- vv --- v ---- vvv-- | отображение |||| |||||| |||| || | ||| файл байтов app1 app2 ядро ​​пользователь system_page_file сопоставление |||| |||||| |||| || | VAS 2 | -------- vvvv - vvvvvv --- vvvv ------- vv --- v ------ |

В 32-разрядной версии Microsoft Windows по умолчанию только 2 ГиБ доступны процессам для собственного использования. Остальные 2 ГиБ используются операционной системой. В более поздних 32-разрядных выпусках Microsoft Windows можно расширить виртуальное адресное пространство пользовательского режима до 3 ГиБ, в то время как для виртуального адресного пространства режима ядра остается только 1 ГиБ, пометив программы как IMAGE_FILE_LARGE_ADDRESS_AWARE и включив переключатель / 3GB в файл boot.ini.

В 64-разрядной версии Microsoft Windows в процессе, выполняющем исполняемый файл, который был связан с / LARGEADDRESSAWARE: NO, операционная система искусственно ограничивает часть виртуального адресного пространства процесса в пользовательском режиме до 2 ГиБ. Это касается как 32-, так и 64-битных исполняемых файлов. Процессы, выполняющие исполняемые файлы, которые были связаны с параметром / LARGEADDRESSAWARE: YES, который используется по умолчанию для 64-разрядных Visual Studio 2010 и более поздних версий, имеют доступ к более чем 2 ГиБ виртуального адресного пространства: до 4 ГиБ для 32-разрядных исполняемых файлов, до 8 ТиБ для 64-битных исполняемых файлов в Windows через Windows 8 и до 128 ТиБ для 64-битных исполняемых файлов в Windows 8.1 и более поздних версиях.

Распределение памяти с помощью C 's malloc устанавливает файл подкачки в качестве резервного хранилища для любого нового виртуального адресного пространства. Однако процесс также может явно отображать байты файла.

Linux

Для процессоров x86, Linux 32-бит позволяет разделить диапазоны адресов пользователя и ядра по-разному: 3G / 1G user / ядро (по умолчанию), пользователь / ядро ​​1G / 3G или пользователь / ядро ​​2G / 2G.

См. также
Примечания
Ссылки
  • "Advanced Windows ", Microsoft Press
Последняя правка сделана 2021-06-18 03:36:02
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте