Виртуальное адресное пространство
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
В вычислительной технике виртуальное адресное пространство ( VAS ) или адресное пространство — это набор диапазонов виртуальных адресов, которые операционная система предоставляет процессу. [1] Диапазон виртуальных адресов обычно начинается с младшего адреса и может расширяться до самого высокого адреса, разрешенного архитектурой набора команд компьютера и поддерживаемого операционной системы реализацией размера указателя , который может составлять 4 байта для 32-битной версии или 8 байтов для 64-битные версии ОС. Это дает несколько преимуществ, одним из которых является безопасность за счет изоляции процессов при условии, что каждому процессу выделено отдельное адресное пространство .
Пример
[ редактировать ]- В следующем описании используемая терминология будет характерна для операционной системы Windows NT , но концепции применимы и к другим операционным системам с виртуальной памятью.
При запуске нового приложения в 32-битной ОС процесс имеет VAS размером 4 ГиБ : каждый из адресов памяти (от 0 до 2 32 − 1) в этом пространстве может иметь значение один байт. Изначально ни один из них не имеет значений («-» означает отсутствие значения). Использование или установка значений в таком VAS приведет к исключению памяти .
0 4 GiBVAS |----------------------------------------------|
Затем исполняемый файл приложения отображается в VAS. Адреса в процессе VAS сопоставляются с байтами в exe-файле. ОС управляет сопоставлением:
0 4 GiBVAS |---vvv----------------------------------------|mapping |||file bytes app
V — это значения байтов сопоставленного файла . Затем DLL (включая как пользовательские библиотеки, так и системные, такие как сопоставляются необходимые файлы kernel32.dll
и user32.dll
):
0 4 GiBVAS |---vvv--------vvvvvv---vvvv-------------------|mapping ||| |||||| ||||file bytes app kernel user
Затем процесс начинает выполнять байты в EXE-файле. Однако единственный способ, которым процесс может использовать или устанавливать значения «-» в своем VAS, — это попросить ОС сопоставить их с байтами из файла. Распространенный способ использования памяти VAS таким образом — сопоставить ее с файлом подкачки . Файл подкачки представляет собой один файл, но в VAS можно сопоставить несколько отдельных наборов смежных байтов:
0 4 GiBVAS |---vvv--------vvvvvv---vvvv----vv---v----vvv--|mapping ||| |||||| |||| || | |||file bytes app kernel user system_page_file
И разные части файла подкачки могут отображаться в VAS разных процессов:
0 4 GiBVAS 1 |---vvvv-------vvvvvv---vvvv----vv---v----vvv--|mapping |||| |||||| |||| || | |||file bytes app1 app2 kernel user system_page_filemapping |||| |||||| |||| || |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 языка malloc устанавливаетфайл подкачки в качестве резервного хранилища для любого нового виртуального адресного пространства. Однако процесс также может явно отображать байты файла.
Линукс
[ редактировать ]Для x86 процессоров 32-разрядная версия Linux позволяет разделить диапазоны адресов пользователя и ядра по-разному: пользователь/ядро 3G/1G (по умолчанию), пользователь/ядро 1G/3G или пользователь/ядро 2G/2G . [9]
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ «Что такое адресное пространство?» . ИБМ . Проверено 5 мая 2024 г.
- ^ «Виртуальное адресное пространство» . MSDN . Майкрософт.
- ^ «Структура LOADED_IMAGE» . MSDN . Майкрософт.
- ^ Перейти обратно: а б «4-гигабайтная настройка: BCDEdit и Boot.ini» . MSDN . Майкрософт.
- ^ «/LARGEADDRESSAWARE (обработка больших адресов)» . MSDN . Майкрософт.
- ^ «Виртуальное адресное пространство» . MSDN . Майкрософт.
- ^ «/LARGEADDRESSAWARE (обработка больших адресов)» . MSDN . Майкрософт.
- ^ «/LARGEADDRESSAWARE (обработка больших адресов)» . MSDN . Майкрософт.
- ^ «Ядро Linux — x86: разделение памяти» .
Ссылки
[ редактировать ]- « Расширенные возможности Windows », Джеффри Рихтер, Microsoft Press