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