Как windows адресует память

На компьютерах с Windows 7 объем доступной памяти может быть меньше, чем объем установленной

Проблема

На компьютере с ОС Windows 7 объем доступной памяти (ОЗУ) может быть меньше, чем объем установленной.

Например, 32-разрядная версия Windows 7 может сообщать, что на компьютере с установленным объемом памяти в 4 ГБ доступно только 3,5 ГБ системной памяти.

Другой пример: 64-разрядная версия Windows 7 может сообщать, что на компьютере с установленным объемом памяти в 8 ГБ доступно только 7,1 ГБ системной памяти.

Примечание. Указанные в примерах объемы доступной памяти не являются точными. Объем доступной памяти вычисляется путем вычитания объема зарезервированной оборудованием памяти из общего объема физической памяти.

Чтобы узнать объемы установленной и доступной памяти в Windows 7, выполните следующие действия.

Нажмите кнопку Пуск, щелкните правой кнопкой мыши значок Компьютер, затем выберите пункт Свойства.

Обратите внимание на значение, указанное в поле Установленная память (ОЗУ) раздела Система. Например, если там указано 4,00 ГБ (3,5 ГБ свободно), это значит, что из 4 ГБ установленной памяти доступно 3,5 ГБ.

Причина

Это предусмотренная ситуация, возникающая на компьютерах с ОС Windows 7. То, насколько сократится объем доступной системной памяти, зависит от ряда факторов:

Установленных на компьютере устройств и памяти, зарезервированной ими.

Способности системной платы к обработке памяти.

Версии и конфигурации BIOS системы.

Установленной версии Windows 7 (например, ОС Windows 7 Начальная поддерживает только 2 ГБ установленной памяти).

Других параметров системы.

Например, при наличии видеоадаптера с 256 МБ собственной памяти эта память должна отображаться в первых 4 ГБ адресного пространства. Если на компьютере уже установлено 4 ГБ системной памяти, часть адресного пространства должна быть зарезервирована для отображения памяти видеоадаптера. Для отображения памяти видеоадаптера используется часть системной памяти. В результате общий объем системной памяти, доступной операционной системе, сокращается.

Дополнительные сведения о том, как определить, каким образом на компьютере используется память, см. в подразделе «Выделение физической памяти в Windows 7» раздела «Дополнительные сведения».

Что попробовать предпринять

Существует еще несколько ситуаций, при которых объем доступной оперативной памяти меньше ожидаемого. Далее перечислены проблемы и их возможные решения.

Проверьте параметры конфигурации системы

Эта проблема может возникнуть, если по ошибке был выбран параметр Максимум памяти. Чтобы его отключить, выполните следующие действия:

Нажмите кнопку Пуск, введите запрос msconfig в поле Найти программы и файлы, затем выберите пункт msconfig в списке Программы.

В окне Конфигурация системы нажмите Дополнительные параметры на вкладке Загрузка.

Снимите флажок Максимум памяти и нажмите кнопку OK.

Обновление BIOS системы

Проблема может возникнуть, если на компьютере установлена BIOS устаревшей версии. При использовании устаревшего компьютера система может не иметь возможности получить доступ ко всей установленной оперативной памяти. В таком случае нужно обновить BIOS системы до последней версии.

Чтобы обновить BIOS на компьютере, посетите веб-сайт производителя компьютера и загрузите обновление BIOS. Или обращайтесь за помощью к производителю компьютера.

Проверка параметров настройки BIOS

Проблема может возникнуть из-за неправильных настроек некоторых параметров BIOS.

Включение перераспределения памяти

Проверьте, включено ли перераспределение памяти в параметрах BIOS. Перераспределение памяти дает Windows доступ к большему объему памяти. Перераспределение памяти можно включить в BIOS, вызвав меню BIOS при загрузке. Чтобы узнать, как вызвать это меню, см. руководство пользователя, поставляемое с компьютером. Точное название функции перераспределения памяти зависит от поставщика оборудования. Она может называться «перераспределение памяти», «расширение памяти» или иметь другое схожее название. Следует иметь в виду, что ваш компьютер может не поддерживать перераспределение памяти.

Изменение размера видеоапертуры AGP в параметрах BIOS

Просмотрите параметры BIOS и узнайте, сколько памяти выделено для видеоапертуры AGP. Это объем памяти, который система делит с видеоадаптером, используемым для отображения текстур и отрисовки. Данный объем памяти не будет использоваться системой, так как он заблокирован видеоадаптером. Размер видеоапертуры AGP можно настроить в параметрах BIOS. Стандартные значения: «32 МБ», «64 МБ», «128 МБ» и «Авто». После изменения этого параметра в BIOS перезагрузите компьютер, а затем проверьте объем доступной памяти. Можно попробовать применить каждый из параметров, чтобы посмотреть, какой из них даст лучший результат.

Читайте также:  Лучшие авторские сборки windows 10

Проверка возможных проблем с установленными модулями памяти

Проблема может возникнуть из-за неполадок в установленных физических модулях памяти.

Проверка на наличие поврежденных модулей памяти

Чтобы проверить ПК на наличие этой проблемы, выключите компьютер, отключите его от сети, а затем поменяйте местами модули памяти.

Проверка расположения модулей памяти

Чтобы определить, в каком порядке модули памяти должны быть установлены в гнезда, см. руководство пользователя, поставляемое с компьютером. Если вы не используете все гнезда для модулей памяти, может требоваться использовать строго определенные. Например, в компьютере есть четыре гнезда для модулей памяти. Возможно, потребуется задействовать гнездо 1 и гнездо 3, если вы хотите установить только два модуля.

Используются ли платы-концентраторы для модулей памяти?

Если вы используете плату-концентратор для модулей памяти (плату, в которую можно установить несколько модулей памяти и которая при этом устанавливается в одно гнездо для модуля памяти), может потребоваться дополнительная настройка системы. И объем доступной памяти может быть меньше, чем ожидалось.

Дополнительная информация

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

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

Память, зарезервированная для использования BIOS и некоторыми драйверами других периферийных устройств.

Память, используемая процессами, драйверами или операционной системой.

Память, содержимое которой должно быть перемещено на диск перед использованием по другому назначению.

Память, содержащая неиспользуемые кэшированные данные и код.

Память, не содержащая никаких важных данных. Именно она будет использоваться в первую очередь, если процессам, драйверам или операционной системе потребуется больший объем памяти.

Примечание. Чтобы узнать, каким образом распределена установленная память в Windows 7, выполните следующие действия.

Нажмите кнопку Пуск, введите запрос монитор ресурсов в поле Найти программы и файлы, затем выберите пункт Монитор ресурсов в списке Программы.

Перейдите на вкладку Память и просмотрите раздел Физическая память внизу страницы.

Состояние памяти в Windows 7

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

Объем памяти (включая зарезервированную и свободную память), доступный для использования процессами, драйверами и операционной системой.

Объем памяти (включая зарезервированную и измененную память), содержащий кэшированные данные и код для быстрого доступа со стороны процессов, драйверов и операционной системы.

Объем физической памяти, доступной операционной системе, драйверам устройств и процессам.

Объем физической памяти, установленной на компьютере.

Учет памяти в Windows 7

В Windows 7 ведется учет объема физической памяти, установленной на компьютере. Операционные системы на основе Windows NT до Windows Vista с пакетом обновления 1 (SP1) сообщают об объеме памяти, доступной операционной системе. Учитываемый объем памяти в более ранних версиях Windows не включает в себя память, зарезервированную оборудованием. Это изменение связано только с учетом.

В Windows Vista с пакетом обновления 1 (SP1) и более поздних версиях Windows вы заметите изменения в учете памяти в следующих местах:

Значение ОЗУ в Центре начальной настройки

Значение Памяти в нижней части окна «Мой компьютер»

Значение Память в окне «Свойства системы»

Значение Суммарный объем системной памяти на странице Отображение и печать подробных сведений элемента Информация и средства производительности на Панели управления

Кроме того, компонент «Сведения о системе» (Msinfo32.exe) выводит на экран следующие записи на странице Сводные сведения о системе:

установленная физическая память (ОЗУ);

полный объем физической памяти;

доступная физическая память.

Учет памяти в следующих средствах диагностики не изменился:

Вкладка Производительность в диспетчере задач

Если объем физически установленной на компьютере оперативной памяти равен объему адресного пространства, поддерживаемому набором микросхем, общий объем системной памяти, доступной операционной системе, будет всегда меньше объема физической памяти.

Читайте также:  Сервер carddav для windows

Предположим, что в компьютере используется набор микросхем Intel 975X, поддерживающий 8 ГБ адресного пространства. Если установить 8 ГБ ОЗУ, объем системной памяти, доступной операционной системе, сократится из-за памяти, необходимой для конфигурации шины PCI. В данном случае для конфигурации шины PCI потребуется примерно от 200 МБ до 1 ГБ памяти, и именно на эту величину сократится объем памяти, доступный операционной системе. Реальный объем доступной памяти зависит от конфигурации.

Ограничения физической памяти в Windows 7

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

Управление памятью

Виртуальная память

Всем процессам в операционной системе Windows предоставляется важнейший ресурс – виртуальная память ( virtual memory ). Все данные, с которыми процессы непосредственно работают, хранятся именно в виртуальной памяти.

Название «виртуальная» произошло из-за того что процессу неизвестно реальное (физическое) расположение памяти – она может находиться как в оперативной памяти ( ОЗУ ), так и на диске. Операционная система предоставляет процессу виртуальное адресное пространство (ВАП, virtual address space ) определенного размера и процесс может работать с ячейками памяти по любым виртуальным адресам этого пространства, не «задумываясь» о том, где реально хранятся данные.

Размер виртуальной памяти теоретически ограничивается разрядностью операционной системы. На практике в конкретной реализации операционной системы устанавливаются ограничения ниже теоретического предела. Например, для 32-разрядных систем ( x86 ), которые используют для адресации 32 разрядные регистры и переменные, теоретический максимум составляет 4 ГБ (2 32 байт = 4 294 967 296 байт = 4 ГБ). Однако для процессов доступна только половина этой памяти – 2 ГБ, другая половина отдается системным компонентам. В 64 разрядных системах (x64) теоретический предел равен 16 экзабайт (2 64 байт = 16 777 216 ТБ = 16 ЭБ). При этом процессам выделяется 8 ТБ, ещё столько же отдается системе, остальное адресное пространство в нынешних версиях Windows не используется.

Введение виртуальной памяти, во-первых, позволяет прикладным программистам не заниматься сложными вопросами реального размещения данных в памяти, во-вторых, дает возможность операционной системе запускать несколько процессов одновременно, поскольку вместо дорогого ограниченного ресурса – оперативной памяти, используется дешевая и большая по емкости внешняя память .

Реализация виртуальной памяти в Windows

Схема реализации виртуальной памяти в 32-разрядной операционной системе Windows представлена на рис.11.1. Как уже отмечалось, процессу предоставляется виртуальное адресное пространство размером 4 ГБ, из которых 2 ГБ, расположенных по младшим адресам (0000 0000 – 7FFF FFFF), процесс может использовать по своему усмотрению (пользовательское ВАП), а оставшиеся два гигабайта (8000 0000 – FFFF FFFF) выделяются под системные структуры данных и компоненты (системное ВАП) 1 Специальный ключ /3GB в файле boot.ini увеличивает пользовательское ВАП до 3 ГБ, соответственно, уменьшая системное ВАП до 1 ГБ. Начиная с Windows Vista вместо файла boot.ini используется утилита BCDEDIT. Чтобы увеличить пользовательское ВАП, нужно выполнить следующую команду: bcdedit /Set IncreaseUserVa 3072. При этом, чтобы приложение могло использовать увеличенное ВАП, оно должно компилироваться с ключом /LARGEADDRESSAWARE. . Отметим, что каждый процесс имеет свое собственное пользовательское ВАП, а системное ВАП для всех процессов одно и то же.

Виртуальная память делится на блоки одинакового размера – виртуальные страницы. В Windows страницы бывают большие ( x86 – 4 МБ, x64 – 2 МБ) и малые (4 КБ). Физическая память ( ОЗУ ) также делится на страницы точно такого же размера, как и виртуальная память . Общее количество малых виртуальных страниц процесса в 32 разрядных системах равно 1 048 576 (4 ГБ / 4 КБ = 1 048 576).

Обычно процессы задействуют не весь объем виртуальной памяти, а только небольшую его часть. Соответственно, не имеет смысла (и, часто, возможности) выделять страницу в физической памяти для каждой виртуальной страницы всех процессов. Вместо этого в ОЗУ (говорят, «резидентно») находится ограниченное количество страниц, которые непосредственно необходимы процессу. Такое подмножество виртуальных страниц процесса, расположенных в физической памяти, называется рабочим набором процесса (working set ).

Те виртуальные страницы, которые пока не требуются процессу, операционная система может выгрузить на диск , в специальный файл , называемый файлом подкачки (page file).

Каким образом процесс узнает, где в данный момент находится требуемая страница? Для этого служат специальные структуры данных – таблицы страниц ( page table ).

Структура виртуального адресного пространства

Рассмотрим, из каких элементов состоит виртуальное адресное пространство процесса в 32 разрядных Windows (рис.11.2).

Читайте также:  Nvapi64 dll windows 10

В пользовательском ВАП располагаются исполняемый образ процесса, динамически подключаемые библиотеки ( DLL , dynamic-link library ), куча процесса и стеки потоков.

При запуске программы создается процесс (см. лекцию 6 «Процессы и потоки»), при этом в память загружаются код и данные программы (исполняемый образ, executable image ), а также необходимые программе динамически подключаемые библиотеки ( DLL ). Формируется куча ( heap ) – область, в которой процесс может выделять память динамическим структурам данных (т. е. структурам, размер которых заранее неизвестен, а определяется в ходе выполнения программы). По умолчанию размер кучи составляет 1 МБ, но при компиляции приложения или в ходе выполнения процесса может быть изменен. Кроме того, каждому потоку предоставляется стек (stack) для хранения локальных переменных и параметров функций, также по умолчанию размером 1 МБ.

В системном ВАП расположены:

  • образы ядра (ntoskrnl.exe), исполнительной системы, HAL (hal.dll), драйверов устройств, требуемых при загрузке системы;
  • таблицы страниц процесса;
  • системный кэш;
  • пул подкачиваемой памяти (paged pool) – системная куча подкачиваемой памяти;
  • пул подкачиваемой памяти (nonpaged pool) – системная куча неподкачиваемой памяти;
  • другие элементы (см. [5]).

Переменные, в которых хранятся границы разделов в системном ВАП, приведены в [5, стр. 442]. Вычисляются эти переменные в функции MmInitSystem ( файл base\ntos\mm\mminit.c, строка 373), отвечающей за инициализацию подсистемы памяти. В файле base\ntos\mm\i386\mi386.h приведена структура ВАП и определены константы , связанные с управлением памятью (например, стартовый адрес системного кэша MM_SYSTEM_CACHE_START , строка 199).

Выделение памяти процессам

Существует несколько способов выделения виртуальной памяти процессам при помощи Windows API 2 См. обзор в MSDN «Comparing Memory Allocation Methods» (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366533(v=vs.85).aspx). . Рассмотрим два основных способа – с помощью функции VirtualAlloc и с использованием кучи.

1. WinAPI функция VirtualAlloc позволяет резервировать и передавать виртуальную память процессу. При резервировании запрошенный диапазон виртуального адресного пространства закрепляется за процессом (при условии наличия достаточного количества свободных страниц в пользовательском ВАП), соответствующие виртуальные страницы становятся зарезервированными ( reserved ), но доступа к этой памяти у процесса нет – при попытке чтения или записи возникнет исключение . Чтобы получить доступ , процесс должен передать память зарезервированным страницам, которые в этом случае становятся переданными ( commit ).

Отметим, что резервируются участки виртуальной памяти по адресам, кратным значению константы гранулярности выделения памяти MM_ALLOCATION_GRANULARITY ( файл base\ntos\inc\mm.h, строка 54). Это значение равно 64 КБ. Кроме того, размер резервируемой области должен быть кратен размеру страницы (4 КБ).

WinAPI функция VirtualAlloc для выделения памяти использует функцию ядра NtAllocateVirtualMemory ( файл base\ntos\mm\allocvm.c, строка 173).

2. Для более гибкого распределения памяти существует куча процесса, которая управляется диспетчером кучи ( heap manager ). Кучу используют WinAPI функция HeapAlloc , а также оператор языка C malloc и оператор C++ new . Диспетчер кучи предоставляет возможность процессу выделять память с гранулярностью 8 байтов (в 32-разрядных системах), а для обслуживания этих запросов использует те же функции ядра, что и VirtualAlloc.

Дескрипторы виртуальных адресов

Для хранения информации о зарезервированных страницах памяти используются дескрипторы виртуальных адресов ( Virtual Address Descriptors, VAD ). Каждый дескриптор содержит данные об одной зарезервированной области памяти и описывается структурой MMVAD ( файл base\ntos\mm\mi.h, строка 3976).

Границы области определяются двумя полями – StartingVpn (начальный VPN ) и EndingVpn (конечный VPN ). VPN ( Virtual Page Number) – это номер виртуальной страницы; страницы просто нумеруются, начиная с нулевой. Если размер страницы 4 КБ (212 байт ), то VPN получается из виртуального адреса начала страницы отбрасыванием младших 12 бит (или 3 шестнадцатеричных цифр). Например, если виртуальная страница начинается с адреса 0x340000, то VPN такой страницы равен 0x340.

Дескрипторы виртуальных адресов для каждого процесса организованы в сбалансированное двоичное АВЛ дерево 3 АВЛ дерево – структура данных для организации эффективного поиска; двоичное дерево, сбалансированное по высоте. Названо в честь разработчиков – советских ученых Г. М. Адельсон Вельского и Е. М. Ландиса. ( AVL tree ). Для этого в структуре MMVAD имеются поля указатели на левого и правого потомков: LeftChild и RightChild .

Для хранения информации о состоянии области памяти, за которую отвечает дескриптор , в структуре MMVAD содержится поле флагов VadFlags.

Оцените статью