WikiDer > Виртуальное адресное пространство
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
В вычисление, а виртуальное адресное пространство (ВАШ) или же адресное пространство набор диапазонов виртуальных адресов, которые Операционная система делает доступным для процесса.[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]
Смотрите также
Примечания
- ^ Корпорация IBM. "Что такое адресное пространство?". Получено 24 августа, 2013.
- ^ «Виртуальное адресное пространство». MSDN. Microsoft.
- ^ «Структура LOADED_IMAGE». MSDN. Microsoft.
- ^ а б «4-гигабайтная настройка: BCDEdit и Boot.ini». MSDN. Microsoft.
- ^ "/ LARGEADDRESSAWARE (обработка больших адресов)". MSDN. Microsoft.
- ^ «Виртуальное адресное пространство». MSDN. Microsoft.
- ^ "/ LARGEADDRESSAWARE (обработка больших адресов)". MSDN. Microsoft.
- ^ "/ LARGEADDRESSAWARE (обработка больших адресов)". MSDN. Microsoft.
- ^ «Ядро Linux - x86: разделение памяти».
Рекомендации
- "Расширенная Windows" к Джеффри Рихтер, Microsoft Press