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----------------------------------------|отображение |||файл байты приложение

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

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

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

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

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

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

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

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

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

Линукс

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

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

Примечания

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

Ссылки