Виртуальное адресное пространство - Virtual address space

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

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

Пример

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

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

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

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

           0 4 GiBVAS | --- vvvvvvv ------------------------------------ | отображение | --- - | байтов файла app.exe

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

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

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

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

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

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

На Майкрософт Виндоус 32-битный, по умолчанию только 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]

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

Linux

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

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

Примечания

  1. ^ Корпорация IBM. "Что такое адресное пространство?". Получено 24 августа, 2013.
  2. ^ «Виртуальное адресное пространство». MSDN. Microsoft.
  3. ^ «Структура LOADED_IMAGE». MSDN. Microsoft.
  4. ^ а б «4-гигабайтная настройка: BCDEdit и Boot.ini». MSDN. Microsoft.
  5. ^ "/ LARGEADDRESSAWARE (обработка больших адресов)". MSDN. Microsoft.
  6. ^ «Виртуальное адресное пространство». MSDN. Microsoft.
  7. ^ "/ LARGEADDRESSAWARE (обработка больших адресов)". MSDN. Microsoft.
  8. ^ "/ LARGEADDRESSAWARE (обработка больших адресов)". MSDN. Microsoft.
  9. ^ «Ядро Linux - x86: разделение памяти».

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