Из Википедии, свободной энциклопедии
  (Перенаправлено с виртуального адреса )
Перейти к навигации Перейти к поиску
Взаимосвязь виртуального адресного пространства и физического адресного пространства.svg

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

Пример [ править ]

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

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

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

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

 0 4 ГиБVAS | --- vvvvvvv ------------------------------------ |отображение | ----- |файл байтов 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] Остальные 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 «s таНос устанавливает файл подкачки в качестве резервного хранилища для любого нового виртуального адресного пространства. Однако процесс также может явно отображать байты файла.

Linux [ править ]

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

См. Также [ править ]

  • Линейное адресное пространство
  • Операционная система с единым адресным пространством

Заметки [ править ]

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

Ссылки [ править ]

  • " Advanced Windows " Джеффри Рихтер , Microsoft Press