Размер адресной памяти узнать

Обновлено: 06.07.2024

шина адреса является однонаправленной. Разрядность шины адреса определяет объем адресуемой процессором памяти. Имеются 16-, 20-, 24-и 32-разрядные шины адреса. В персональных компьютерах величина адресного пространства процессора и величина фактически установленной оперативной памяти практически всегда различаются.

Как определить разрядность шины адреса?

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

Чем выше разрядность адресной шины тем?

Какой объем памяти можно адресовать 16 разрядной шиной адреса?

В беззнаковом представлении это значения целых чисел от 0 до 65 535; с использованием «дополнения до двух» диапазон возможных значений: от −32 768 до 32 767. Таким образом, процессоры с 16-разрядной адресацией памяти могут получить прямой доступ 64 КБ адресуемой памяти.

Как определяется объем адресуемой памяти Если известна разрядность N адресной шины?

Какая шина является двунаправленной?

Шина данных всегда двунаправленная, так как предполагает передачу информации в обоих направлениях. Наиболее часто встречающийся тип выходного каскада для линий этой шины — выход с тремя состояниями. Обычно шина данных имеет 8, 16, 32 или 64 разряда.

Как вычислить количество адресуемых ячеек памяти?

Количество адресуемых ячеек вычисляется по формуле N=2^i, где i -разрядность.

Какие сигналы передаются по шине управления?

Ши́на управле́ния — компьютерная шина, по которой передаются сигналы, определяющие характер обмена информацией по магистрали. Сигналы управления определяют, какую операцию (считывание или запись информации из памяти) нужно производить, синхронизируют обмен информацией между устройствами и т. д.

Какая шина обладает самой высокой тактовой частотой?

Система Pentium 4 (Socket 423 или Socket 478), созданная на основе hub-архитектуры, показана на рисунке ниже. Особенностью этой конструкции является шина процессора с тактовой частотой 400/533/800 МГц и пропускной способностью соответственно 3200/4266/6400 Мбайт/с. Сегодня это самая быстродействующая шина.

Что больше частота процессора или частота системной шины?

В случае процессора Intel Pentium 4 частота системной шины ровно в четыре раза больше частоты FSB. Поэтому если частота FSB составляет 100 МГц, то частота системной шины 400 МГц, если же частота FSB равна 133 МГц, то частота системной шины соответственно 533 МГц.

Какой максимальный объем памяти может адресовать процессор с 32 разрядной шиной адреса?

32-разрядный процессор может адресовать не более 2 ^ 32 отдельных байтов памяти (около 4 ГБ), но наличие 1 ГБ памяти приведет к 1 * 1024 * 1024 * 1024 адресуемым байтам памяти (хотя у вас, вероятно, все еще будет виртуальное адресное пространство 2 ^ 32). ).

Сколько ячеек памяти можно адресовать по 20 разрядной шине адреса?

Например, если ширина адресной шины составляет 20 бит, и размер слова памяти равен одному байту (минимальный адресуемый объём данных), то объём памяти, который можно адресовать, составляет 220 = 1 048 576 байт (1 Мбайт) как в IBM PC/XT.

Какое количество информации может передаваться по 32 разрядной шине данных?

Разрядность шины адреса у большинства современных персональных компьютеров составляет 32 разряда, т. е. максимальный объем оперативной памяти может составлять 232 = 4 Гб.

Что такое шина в программировании?

Шина – совокупность линий, иногда просто проводников, соединяющая несколько компонентов в цифровой системе. Эти линии делятся на 3 типа – адреса, данных и управления. Иногда по одним и тем же проводникам в разные моменты времени передаются и адрес и данные – в этом случае говорят, что шина мультиплексирована.

Чему равна разрядность адреса?

Каждое устройство или ячейка оперативной памяти имеет свой адрес. Адрес передается по адресной шине от процессора к оперативной памяти и устройствам. Разрядность шины адреса определяется объемом адресуемой памяти. Количество адресуемых ячеек можно рассчитать по формуле: N = 2I, где I – разрядность шины адреса.

Какой вид информации на шине адреса микропроцессора?

Шина адреса несет адрес (номер) той ячейки памяти или того порта ввода-вывода, который взаимодействует с микропроцессором. На шину адреса микропроцессор выводит информацию о номере (адресе) той ячейки памяти или устройства, с которым он собирается производить обмен информацией.

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

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

виртуальное адресное пространство для 32-разрядного Windows имеет размер 4 гигабайта (гб) и делится на две секции: одна для использования процессом, а другая зарезервирована для использования системой. дополнительные сведения о пространстве виртуальных адресов в 64-битном Windows см. в разделе виртуальное адресное пространство в 64-разрядной Windows.

Дополнительные сведения о виртуальной памяти см. в следующих разделах:

Виртуальное адресное пространство по умолчанию для 32-разрядного Windows

В следующей таблице показан диапазон памяти по умолчанию для каждой секции.

Диапазон памяти Использование
Низкая 2 ГБ (от 0x00000000 до 0x7FFFFFFF) Используется процессом.
Высокий 2 ГБ (от 0x80000000 до 0xFFFFFFFF) Используется системой.

виртуальное адресное пространство для 32-разрядного Windows с 4GT

Если включена Настройка 4 гигабайта (4GT), диапазон памяти для каждой секции выглядит следующим образом.

Диапазон памяти Использование
С низким 3 ГБ (0x00000000 до 0xBFFFFFFF) Используется процессом.
Высокий 1 ГБ (0xC0000000 до 0xFFFFFFFF) Используется системой.

После включения 4GT процесс, имеющий установленный в заголовке изображения флаг с большим количеством _ файлов _ _ _ изображений , будет иметь доступ к дополнительному объему памяти (1 ГБ), превышающему младшие 2 ГБ.

Настройка виртуального адресного пространства для 32-разрядного Windows

Можно использовать следующую команду, чтобы задать параметр записи загрузки, который настраивает размер раздела, который может использоваться процессом, в диапазоне от 2048 (2 ГБ) до 3072 (3 ГБ):

BCDEdit/Set инкреасеусерва мегабайт

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

Всем процессам в операционной системе 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. . Отметим, что каждый процесс имеет свое собственное пользовательское ВАП, а системное ВАП для всех процессов одно и то же.


Рис. 11.1. Реализация виртуальной памяти в 32-разрядных Windows

Виртуальная память делится на блоки одинакового размера – виртуальные страницы. В 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).

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

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


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

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

  • образы ядра (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).

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

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.

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

Набор механизмов определения объёмов памяти развивался вместе с ПК, однако происходило это довольно хаотично, поэтому на сегодняшний день имеется целый ряд способов для решения данной задачи.

Содержание

История

Фирма IBM, разрабатывая свой ПК, предусмотрела для оперативной памяти диапазон адресов от нуля до 9FFFFh, то есть 640 килобайт — на рубеже 1970-80-х годов это казалось огромным объёмом, лишь мэйнфреймы и наиболее мощные мини-ЭВМ обладали большим размером ОЗУ. Впоследствии эту область памяти стали называть «базовой или стандартной памятью» (Conventional Memory или Base Memory).

Область адресов от A0000h до BFFFFh была отведена под видеопамять. Выше, от C0000h до FFFFFh, шла область ПЗУ различных устройств и BIOS. Как правило, почти все адреса в этих диапазонах были свободны.

С появлением микропроцессора 80286 физическое адресное пространство возросло до 16 Мбайт, однако доступна вся эта область была только в защищённом режиме. В то же время переключение процессора в защищённый режим делало его несовместимым с многочисленными программами реального режима, что предопределило его низкую популярность; фактически до самого появления микропроцессора 80386 защищённый режим использовался очень ограниченно.

При проектировании процессора 80286 инженерами Intel была допущена ошибка, из-за которой в реальном режиме не происходило «обрезание» адреса до 20 бит, и в результате появилась возможность адресации «лишней» памяти в области адресов 100000h-10FFEFh, общий объём которой составлял 64 Кбайта минус 16 байт. Этой областью, получившей название «Область верхней памяти» (HMA, High Memory Area), немедленно воспользовалась Microsoft: в неё помещалась изрядная часть MS DOS, оставляя свободной для нужд прикладных программ значительную часть базовой памяти. Ошибка же в процессоре была оставлена в целях совместимости с 80286, хотя её можно заблокировать с помощью специальной внешней схемы — вентиля адресной линии A20 (Gate A20), устанавливаемого на системных платах на тот случай, если потребуется обеспечить полную совместимость адресации с процессором 8086.

Микропроцессор 80386 расширил диапазон физических адресов до FFFFFFFFh (4 Гбайта), причём какую-то часть самых старших адресов занимает ПЗУ BIOS, отображающееся также частично и на старшие адреса младшего мегабайта.

В некоторых компьютерах на базе микропроцессора 80486 и во всех, начиная с улучшенного контроллера прерываний APIC (его конфигурационное пространство начинается с адреса FEC00000h и кончается адресом FECFFFFFh). Какая-то часть адресного пространства занята BIOS и операционной системы (исключением является область адресов A0000–BFFFF, отведённая под видеопамять ещё в первых ПК и сохраняемая для совместимости). Наконец, регистры внешних устройств, подключенных к шинам PCI, PCI Express и BIOS и ОС.

Наконец, в старших моделях 32-разрядных микропроцессоров и во всех 64-разрядных (технологии AMD64 и Intel EM64T) объём физического адресного пространства превысил 4 Гбайта и составляет как минимум 64 Гбайта (гарантирована поддержка ширины физического адреса 36 бит, теоретический предел составляет 64 бита, а конкретная разрядность физического адреса зависит от модели процессора).

Подробнее о распределении адресного пространства памяти современных ПК можно прочитать в разделе Карта распределения памяти.

Способы определения объёма памяти

BIOS предосталяет программам ряд вызовов, предназначенных для определения объёма и местоположения доступной оперативной памяти. На современных компьютерах практическую ценность имеют только два из них — один для определения объёма стандартной памяти и другой для определения объёма и местоположения всей памяти вообще.

Определение объёма стандартной памяти

Хотя физически все 640 Кбайт теоретически возможной стандартной памяти на любом современном компьютере имеются, пользоваться всей этой памятью без ограничений нельзя.

Во-первых, младший килобайт (адреса от нуля до 3FFh включительно) используется под векторы прерываний реального режима процессора, поэтому изменять эту область можно лишь с определёнными предосторожностями, точно понимая, что и для чего делается. В частности, не следует переопределять без особой нужды векторы для прерываний от 0 до 31 включительно (00h-1Fh), поскольку они установлены BIOS'ом и обеспечивают вызов его функций.

Во-вторых, сразу за первым килобайтом начинается 256-байтовая область данных BIOS, к которой примыкает ещё одна 256-байтовая область, используемая отдельными функциями BIOS (адреса от 400h до 5FFh включительно). Изменение информации в этих областях может привести к неработоспособности тех или иных функций BIOS, поэтому без особой нужды эти адреса лучше не трогать вообще, хотя, если имеется понимание, для чего служат те или иные байты в этих областях, их можно изменять для достижения каких-то своих целей.

Наконец, все современные BIOS имеют область расширенных данных реального режима, находящуюся в старших адресах стандартной памяти. Например, BIOS системной платы TYAN Tiger i7505 (чипсет Intel E7505, поддерживающий два 32-разрядных процессора Xeon семейства Pentium 4, Socket 603/604) резервирует для своих нужд 7 Кбайт, и их изменение приведёт к неработоспособности BIOS.

Наличие области расширенных данных BIOS заставляет программы определять старший адрес стандартной памяти, доступный для свободного использования. С этой целью используется функция INT 12h, существовавшая ещё на первых ПК, на которых она сообщала объём физически имеющейся оперативной памяти.

Функция INT 12h не имеет входных параметров. При возврате из неё в AX будет находиться объём стандартной памяти в килобайтах, начиная с адреса 0. Например, на упомянутой выше системной плате TYAN Tiger i7505 после вызова INT 12h в AX будет десятичное значение 633. Это означает, что программа может использовать под свои нужды стандартную память от адреса 0 до адреса 9E3FFh включительно (об ограничениях на использование адресов от 0 до 5FFh говорилось выше; эти ограничения не зависят от модели материнской платы), а адреса от 9E400h до 9FFFFh используются BIOS для своих нужд, и программа обращаться к ним не должна.

Определение объёма и карты памяти всего ОЗУ

Наиболее правильным методом для определения объёма и адресов имеющейся оперативной памяти на сегодняшний день является следование спецификации ACPI, которой удовлетворяют все сколько-нибудь современные ПК (её первая версия появилась в 1996 году). ACPI предусматривает три способа решения данной задачи, первый из которых предназначен для обычных ПК, второй — для компьютеров, соответствующих стандарту UEFI, а третий — для машин, обеспечивающих «горячее» добавление и удаление модулей памяти. Ниже речь будет идти только о первом способе, поскольку именно он является наиболее распространённым и поддерживается всеми существующими ПК.

Для определения объёма и карты распределения памяти спецификация ACPI предусматривает использование функции E820h прерывания INT 15h. Каждый вызов этой функции возвращает описание одного диапазона адресов оперативной памяти. Чтобы получить полную карту распределения памяти, необходимо вызывать эту функцию многократно, пока не будет получено описание последнего диапазона.

На входе в функцию E820h прерывания INT 15h передаются следующие параметры:

  • EAX — содержит код функции 0000E820h; Некоторые БИОСы требуют чтобы в верхней части eax были нули.
  • EBX — при первом вызове в этом регистре должен находиться нуль. В последующих вызовах здесь находится значение, возвращённое предыдущим вызовом функции и необходимое для продолжения её работы и возврата описания очередного диапазона адресов памяти. Это может быть начальный адрес очередной области, её порядковый номер или любое другое значение — точный смысл этой величины оставлен на усмотрение разработчиков BIOS;
  • ES:DI — указатель области памяти для сохранения очередного описателя диапазона адресов;
  • ECX — размер описателя диапазона адресов. Нынешняя версия стандарта определяет его длину в 24 байта; позже он может быть расширен. Минимально допустимый размер — 20 байтов;
  • EDX — сигнатура 'SMAP'. Используется BIOS'ом для проверки того, что программа действительно вызывает сервис ACPI.

На выходе функция возвращает следующие значения:

  • CF — если флаг сброшен, ошибок при выполнении не возникло. Обычно флаг CF устанавливается при вызове фукции уже после того, как она вернула описатель последнего диапазона адресов. Тем не менее, полагаться на это не стоит, поскольку может привести к странным ошибкам. Например, виртуальная машина ACPI-совместимым BIOS;
  • ES:DI — указатель на описатель диапазона адресов (то же самое значение, что и при вызове функции);
  • ECX — объём информации в байтах, записанной в описатель диапазона (минимум 20 байтов; не превышает длину области под описатель, указанную при вызове функции);
  • EBX — значение, необходимое для получения описателя следующего диапазона адресов; должно в неизменном виде передаваться на вход функции при её очередном вызове. Если при возврате из функции этот регистр содержит нуль, это означает, что получен описатель последнего диапазона адресов.

Формат описателя диапазона адресов, заполняемого функцией E820h прерывания INT 15h:

СмещениеОписание
0Начальный адрес диапазона, младшие 32 бита
4Начальный адрес диапазона, старшие 32 бита
8Длина диапазона, младшие 32 бита
12Длина диапазона, старшие 32 бита
16Тип диапазона (описаны ниже)
20Расширенные атрибуты диапазона (описаны ниже)

Нынешняя версия спецификации ACPI предусматривает следующие типы диапазонов памяти:

ЗначениеМнемоникаОписание
1AddressRangeMemoryДоступная оперативная память
2AddressRangeReservedЗарезервированная область памяти; использоваться программами не должна
3AddressRangeACPIОбласть памяти, занятая таблицами ACPI. Может использоваться операционной системой после того, как информация в этих таблицах станет для неё ненужной
4AddressRangeNVSЗарезервированная область памяти; использоваться программами не должна. В отличие от диапазона типа 2, эта область памяти должна сохраняться при «отходе ко сну» и восстанавливаться при «пробуждении»
5AddressRangeUnusableОбласть памяти, содержащая ошибки. Использоваться не должна
другоеUndefinedЗарезервировано для будущего использования. ОС должна рассматривать такие области как зарезервированные и не пытаться их использовать

Двойное слово расширенных атрибутов имеет следующий формат:

>

БитМнемоникаОписание
0AddressRangeEnabledЕсли содержит 0, ОС должна игнорировать этот описатель диапазона адресов (он содержит недействительную информацию)
1AddressRangeNonVolatileЕсли установлен, данный описатель соответствует устойчивой (non-volatile) памяти. Устойчивая память может потребовать уточнения своих характеристик, чтобы ОС могла понять, годится ли такая память для использования в качестве обычного ОЗУ
2-31ReservedЭти разряды зарезервированы для будущего использования

При использовании функции E820h прерывания INT 15h следует учитывать следующие соглашения и ограничения:

    с помощью этой функции возвращает описатели только той памяти, что установлена на системной плате;
  • функция не описывает диапазоны адресного пространства памяти, занятые дополнительными ПЗУ устройств ISA и устройствами, поддерживающими технологию Plug and Play (к таковым отностся все устройства, подключаемые к шинам PCI, PCI Express , а также некоторые устройства для шины ISA), поскольку операционная система имеет другие способы узнать о существовании таких устройств и о занимаемых ими областях памяти;
  • «дыры» в адресном пространстве, предусмотренные чипсетом, но не используемые устройствами, этой функцией возвращаются как зарезервированные области памяти;
  • фиксированные (не настраиваемые с помощью Plug and Play) диапазоны адресов памяти, занимаемые регистрами устройств, установленных на системной плате (например, область, отведённая под APIC), возвращаются функцией как зарезервированные;
  • области адресов, занимаемые ПЗУ BIOS, возвращаются как зарезерированные;
  • функция не описывает стандартные диапазоны адресов, используемые в ПК для определённых целей. Например, она не описывает диапазон A0000–BFFFF, отведённый под видеопамять. Однако диапазон E0000–EFFFF может быть включён в список диапазонов, описываемых этой функцией;
  • вся стандартная («нижняя») память считается обычной, доступной для использования ОС, однако разработчик системы должен учитывать ограничения на её использование, описанные в предыдущем подразделе.

Наконец, заметим, что в некоторых BIOS в этой функции встречались ошибки. Так, однажды, когда спецификация ACPI ещё только-только «поступала на вооружение», пришлось столкнуться с ситуацией, когда эта функция вообще не сообщила о наличии диапазона памяти от 0 до BFFFFh, хотя в соответствии со стандартом должна была бы описать его как доступный для использования (тип диапазона 1). Бывали случаи, когда эта функция не упоминала о диапазоне адресов, занимаемом APIC. Поэтому разработчикам ОС не следует полагаться на эту функцию для определения областей, назначение которых и так хорошо известно и не зависит от модели системной платы.

Альтернативные способы определения объёма памяти свыше 1 Мбайта

Хотя все сколько-нибудь современные ПК соответствуют стандарту ACPI, в «древних» моделях он не поддерживался. В такой ситуации определить объём ОЗУ свыше 1 Мбайта можно несколькими другими способами, кратко описанными ниже. Тем не менее, пользоваться ими следует только в том случае, если ACPI не поддерживается.

Заметим, что вызов перечисленных ниже функциях в ACPI-совместимых системах вполне возможен, однако они вернут объём памяти, в который не включены служебные области, отражённые функцией E820h как недоступные для использования операционной системой.

Функция 88h прерывания INT 15h сообщает объём имеющейся оперативной памяти свыше 1 Мбайта, т.е. начиная с адреса 100000h.

  • CF — если функция выполнена успешно, будет сброшен;
  • AX — объём памяти свыше 1 Мбайта, выраженный в килобайтах.

Эта функция обычно сообщает объём памяти, лежащей в диапазоне от 1 Мбайта до 16 Мбайт, то есть в области адресов от 10000h до FFFFFFh включительно. Чтобы узнать объём памяти свыше 16 Мбайт, можно воспользоваться функцией C7h прерывания INT 15h.

Функция C7h прерывания INT 15h появилась в компьютерах IBM PS/2 поздних серий и является необязательной. Она возвращает карту распределения памяти.

  • AH — код функции C7h;
  • DS:SI — адрес карты памяти (см. ниже).
  • CF — если функция завершилась успешно, будет сброшен.

Формат карты памяти:

СмещениеРазмерОписание
0WORDРазмер области, отведённой под карту памяти, не включая это слово
2DWORDОбъём в килобайтах локальной памяти в пределах от 1 до 16 Мбайт
6DWORDОбъём в килобайтах локальной памяти в пределах от 16 Мбайт до 4 Гбайт
10DWORDОбъём в килобайтах системной памяти в пределах от 1 до 16 Мбайт
14DWORDОбъём в килобайтах системной памяти в пределах от 16 Мбайт до 4 Гбайт
18DWORDОбъём в килобайтах кэшируемой памяти в пределах от 1 до 16 Мбайт
22DWORDОбъём в килобайтах кэшируемой памяти в пределах от 16 Мбайт до 4 Гбайт
26DWORDОбъём в килобайтах перед началом несистемной памяти в пределах от 1 до 16 Мбайт
30DWORDОбъём в килобайтах перед началом несистемной памяти в пределах от 16 Мбайт до 4 Гбайт
34WORDНачальный сегмент крупнейшего свободного блока в диапазоне адресов от C0000h до DFFFFh
36WORDРазмер крупнейшего свободного блока
38DWORDЗарезервировано

Функция E801h прерывания INT 15h является основной альтернативой описанному в предыдущем подразделе механизму определения памяти в ACPI-совместимых системах.

  • CF — сброшен, если функция выполнена успешно;
  • AX — размер памяти в диапазоне от 1 до 16 Мбайт, выраженный в килобайтах;
  • BX — размер памяти свыше 16 Мбайт, выраженный в блоках по 64 Кбайта;
  • CX — размер сконфигурированной памяти в диапазоне от 1 до 16 Мбайт, выраженный в килобайтах;
  • DX — размер сконфигурированной памяти свыше 16 Мбайт, выраженный в блоках по 64 Кбайта.

Некоторые BIOS возвращают в регистрах AX и BX нули; в этом случае следует пользоваться объёмом памяти, указанным в регистрах CX и DX.

У меня есть упражнение, которое я не мог решить, У меня есть 3 диапазона памяти :

range1: FD00 0000 to FDFF ffff

range2 : D000 0000 to DFFF ffff

range3: FA00 0000 к FBFF ffff

вопрос :дайте размер памяти для каждого диапазона (Мега байт)?

Я знаю, что я должен рассчитать площадь круга = "Последний адрес" - первый адрес таким образом, результат для первого диапазона : 00FF FFFF . Заключаться в следующем правильно? тогда что мне делать? Я искал в Интернете я не нашел пример

в вашем примере для диапазона 1, Вы правы. Это размер памяти, указанный в шестнадцатеричном формате, в байтах.

вы можете получить наибольшее представление, сначала преобразовав 00FF FFFF в десятичное число, а затем преобразовав это количество байтов в мегабайты.

для преобразования из байтов в мегабайты использовать отношения

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

для других диапазонов, вы снова хотите сделать вычитание, чтобы определить размер диапазона, а затем применять указанные выше действия, например,

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

таким образом, 1 МБ совпадает с 0010 0000 (иногда называемый 0x100000).

извините, чтобы ответить на вопрос с другим вопросом / s.

разве количество адресов, доступных в пределах заявленного диапазона, не включает эти ограничители диапазона? например (в десятичном, чтобы проиллюстрировать мою точку) с начальным адресом 5 и конечным адресом 10. С вычитанием только т. е. конечный адрес минус начальный адрес (10-5) мы получаем диапазон 5. Но на самом деле есть шесть уникальных адресов в диапазоне, т. е. 5,6,7,8,9,10 (поэтому мы должны добавить 1 к результату вычитание в первоначальном вопросе Джули?)

и размер адреса памяти и фактический размер памяти. Мы говорим о количестве отдельных ячеек памяти или о размере памяти, доступной для хранения данных (который должен учитывать размер каждого местоположения)?

Если это просто места памяти, то мы почти закончили (я думаю, что это называется размером адреса памяти). Просто нужно решить часть MB вопроса (Я вернусь к этому вопросу в конце)

Если это доступное пространство для хранения, это должно включать размер каждой адресуемой части памяти, например, каждое адресное местоположение содержит неизвестный размер куска данных. Скажем, если это 1 байт (1B) данных на место памяти, чем мой пример выше, означает, что размер памяти: 6 (места памяти), умноженные на 1 байт (объем каждого места памяти) для общего размера памяти 6B

Итак, основываясь на моей логике,ответ в оригинальной вопрос для диапазона 1 должно быть 01000000hex (range1 = FDFF FFFF-FD00 0000 + 1 = 01000000h).

Что касается размера памяти этого диапазона, вот где я действительно запутался. Это определенное количество ячеек памяти, т. е. 1000000h, некоторого неопределенного размера для каждого местоположения. Так зачем выражать его в MB или GB. Если вы знаете размер каждого местоположения памяти (и умножаете количество местоположений на размер каждого местоположения, то у вас есть размер памяти для этого диапазон и может выражать его в числовой форме.

и пока мы на нем, где я действительно очень запутался, это использование MB, GB и т. д. Часто цитируется, поскольку каждый префикс равен кратному 1024, например 1KB = 1024Bytes, 1MB = 1024kB и т. д., Но предпочтительное соглашение IEC основано на стандарте ISO (согласно моему googling только что), Который говорит Kilo (kB) = 1000, Mega (MB) = 1000000 и т. д.

таким образом, откладывая неизвестный размер каждого местоположения в сторону и преобразуя 1000000h в десятичной, т. е. 16,777,216 ответ:

Читайте также: