stringtranslate.com

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

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

Пример

В следующем описании используемая терминология будет характерна для операционной системы Windows NT , но концепции применимы и к другим операционным системам с виртуальной памятью.

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

 0 4 ГиБВАС |----------------------------------------------|

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

 0 4 ГиБВАС |---vvv----------------------------------------|картографирование |||приложение File Bytes

V — это значения байтов сопоставленного файла . Затем сопоставляются необходимые файлы DLLkernel32.dll (включая как пользовательские библиотеки, так и системные, такие как и user32.dll):

 0 4 ГиБВАС |---ввв--------вввввв---вввв-------------------|картографирование ||| |||||| ||||пользователь ядра приложения file bytes

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

 0 4 ГиБВАС |---ввв--------вввввв---вввв----вв---в----ввв--|картографирование ||| |||||| |||| || | |||файл байтов пользователя ядра приложения system_page_file

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

 0 4 ГиБВАС 1 |---вввв-------вввввв---вввв----вв---в----ввв--|картографирование |||| |||||| |||| || | |||файл байты app1 app2 пользователь ядра system_page_fileкартографирование |||| |||||| |||| || |ВАС 2 |--------вввв--вввввв---вввв-------вв---в------|

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

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

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

Линукс

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

Смотрите также

Примечания

  1. ^ «Что такое адресное пространство?». ИБМ . Проверено 5 мая 2024 г.
  2. ^ «Виртуальное адресное пространство». MSDN . Майкрософт.
  3. ^ "Структура LOADED_IMAGE" . MSDN . Майкрософт.
  4. ^ ab «4-гигабайтная настройка: BCDEdit и Boot.ini». MSDN . Майкрософт.
  5. ^ "/LARGEADDRESSAWARE (обработка больших адресов)" . MSDN . Майкрософт.
  6. ^ «Виртуальное адресное пространство». MSDN . Майкрософт.
  7. ^ "/LARGEADDRESSAWARE (обработка больших адресов)" . MSDN . Майкрософт.
  8. ^ "/LARGEADDRESSAWARE (обработка больших адресов)" . MSDN . Майкрософт.
  9. ^ «Ядро Linux — x86: разделение памяти» .

Рекомендации