Какой максимальный объем памяти может адресовать pintos почему

Обновлено: 05.07.2024

Организация памяти данных семейства PIC24F значительно отличается от карты памяти данных микроконтроллеров PIC18. Основные различия представлены в таблице:

Параметр PIC18 PIC24F
Шина адреса памяти данных (адресуемый объем) 12 бит (максимум 4096 байт) 16 бит (максимум 65536 байт)
Сегментация Линейный доступ, банковая сегментация. Полностью линейный доступ только для некоторых инструкций Линейный доступ без сегментации
Области специального доступа Access RAM (первый и последний банки) Near Data Space (область ближней памяти - первые 8 кБ)
Размещение регистров специального назначения Нижняя половина последнего банка памяти Размешены в области ближней памяти
Стек Аппаратный, 32 уровня, не отображается в память данных Программный стек. Вершина стека – 0x0800 , глубина стека ограничивается программно
Доступ к памяти Побайтный (прямой или косвенный) Побайтный, доступ к слову (16 бит), доступ к двойному слову (32 бита) – прямой и косвенный
Аппаратное отображение памяти программ в память данных (PSV 1) ) Нет Да, в верхнюю часть области памяти данных

Адресуемый объем и сегментация

Для семейства PIC24F вся память данных может быть представлена как линейный массив. Большинство инструкций могут адресовать первые 8 кБ памяти данных, так как слово инструкции содержит 13 бит для прямой адресации операнда. Остальная часть памяти данных может быть адресована косвенно. Максимальный адресуемый объем памяти для семейства PIC24F составляет 64 кБ, память данных может иметь объем 32 кБ. Оставшиеся 32 кБ используются для отображения части программной памяти в ОЗУ (PSV). Сравнение карт памяти данных для семейств PIC18 и PIC24F приведено на рисунке:

Сравнение карт памяти данных семейств PIC18 и PIC24F

Расположение регистров специального назначения (SFR)

В микроконтроллерах PIC18 регистры специального назначения (регистры управления ядром, периферией, и т. п.) расположены обычно в самом низу памяти данных, как правило, по адресам с 0xF60 по 0xFFF включительно.

В микроконтроллерах PIC24F регистры специального назначения расположены в самом верху памяти данных и занимают 2 кБ (адреса с 0x0000 по 0x07FF включительно).

Области специального доступа

Определенный способ расположения сегментов памяти данных в архитектуре PIC18 делает возможным быстрый доступ без переключения банков к регистрам специального назначения и к данным приложения. Это осуществляется выделением виртуального банка, который называется Access RAM и в который входит верхняя половина нулевого банка и нижняя половина пятнадцатого банка (область SFR). Такая реализация доступа к памяти позволяет всегда, вне зависимости от значения регистра BSR получать быстрый доступ к регистрам SFR. Для доступа к банку Access RAM используется специальный синтаксис ассемблера, область доступа (память данных или Access RAM) задается в машинном коде инструкции.

В микроконтроллерах семейства PIC24F верхняя часть памяти данных объемом 8 кБ ( 0x0000 – 0x1FFF ) называется Near Data Space («пространство близких данных»). Доступ к этому блоку данных (в который входят и регистры SFR) может осуществляться с помощью прямой адресации любой инструкцией (если конечно инструкция имеет возможность прямой адресации операндов).

Аппаратное отображение памяти программ в память данных

Архитектура PIC18 подразумевает доступ к памяти программ с помощью инструкций табличного чтения TBLRD .

Архитектура PIC24F так же имеет инструкции табличного чтения, однако кроме этого возможно прямое отображение памяти программ в область памяти данных (PSV – Program Space Visibility). Когда используется данная опция, сегмент памяти программ объемом 32 кБ может быть отображен в физически не реализуемый сегмент памяти данных. В этом случае возможен прозрачный доступ к ПЗУ как к ОЗУ (только на чтение). Регистр PSVPAG определяет часть памяти программ, отображаемую в ОЗУ, бит PSV ( CORCON<2> ) используется для разрешения/запрещения отображения ПЗУ в ОЗУ.

Программный стек

Как было отмечено в пункте "Ядро", микроконтроллеры PIC18 имеют аппаратный стек для сохранения адреса возврата, который не отображен в память данных и имеет глубину 32 уровня.

В архитектуре PIC24F используется программный стек в области данных. Область стека начинается с адреса 0x800 сразу после области SFR. Стек растет вниз, в качестве указателя стека используется регистр W15 . Размер стека ограничивается программно значением регистра SPLIM . При переполнении стека возникает аппаратное исключение (прерывание).

Доступ к данным

Как было отмечено в пункте "Набор инструкций", микроконтроллеры PIC18 имеют атомарные инструкции только для работы с байтами.

Микроконтроллеры PIC24 имеют атомарные инструкции как для работы с байтами, так и для работы со словами (16 бит) и двойными словами (32 бита).

В спецификации « Intel Core Duo T2300 » говорится:

Я думаю, что теперь я могу предположить, что шина данных также является по крайней мере 32-битной. Поэтому минимальная адресуемая память должна быть 4 ГБ.

Кроме того, в спецификации процессора также упоминаются спецификации памяти

что, как я понимаю, означает, что он может адресовать 64 ГБ памяти

Означает ли это, что, имея только 2 слота памяти на материнской плате, мой ноутбук может поддерживать 2x 2 ГБ карты памяти == (4 ГБ) памяти?

Полагаю, ребята из ноутбуков предположили, что не будет 2ГБ, поэтому они могли бы упомянуть Memory Max: 2048MB

4 ответа 4

Адресная память для 32-разрядной системы составляет 4 ГБ, физическая память - это то, что установлено. Ваша операционная система управляет последними, чтобы дать запущенным программам иллюзию первого. Это намного сложнее, но это суть.

PAE увеличивает объем физической памяти, которую может использовать машина, а не адресуемую память. Указатели остаются 32-разрядными, поэтому адресуемая память по-прежнему ограничена 4 ГБ.

Объем памяти на машине определяется не только возможностями процессора. Не думайте, что ваша машина может поддерживать 4 ГБ.

Помимо адресного пространства памяти, существует множество факторов, определяющих, сколько памяти может адресовать компьютер. Например, Mac Book PRo моей жены может поддерживать только 3 ГБ, и если вы установите две карты памяти объемом 2 ГБ, они по-прежнему будут адресованы только 3 ГБ.

Кстати, 32 бита означает, что чип теоретически может адресовать 4 ГБ памяти. Где вы получили этот номер 64GB?

Здесь есть ряд факторов. Благодаря 32-битной архитектуре ОС может обрабатывать 4 ГБ памяти. Однако все это может быть недоступно для приложений. Например, машина Windows с 4 ГБ памяти, как правило, не сможет использовать более 3,5 ГБ для ОС и приложений, поскольку часть адресного пространства используется для отображения оборудования.

Кроме того, Windows разделяет 32-разрядное адресное пространство памяти на два: 2 ГБ для памяти ядра, используемой ОС, и 2 ГБ для приложений пользовательского пространства. Т.е. по умолчанию каждое приложение сможет получить доступ только к 2 ГБ памяти. В Windows можно настроить использование 1 ГБ для ядра и 3 ГБ для пользователя.

Кроме того, фактическое оборудование может устанавливать определенные ограничения. Когда в спецификации вашего ноутбука указано, что максимальная память составляет 2 ГБ, это, скорее всего, потому что это максимум, который материнская плата будет поддерживать. Неважно, сколько ОС может адресовать. Если оборудование распознает только 2 ГБ, то это предел физической памяти для машины.

Нет, я совершенно не согласен - 32-разрядный процессор не означает, что адресуемая память составляет 4 ГБ. Строго говоря, 32-битные процессоры означают, что ваш размер ALU равен 32, то есть он может выполнять операции с 32-битными данными одновременно. * примечание: 32-битный процессор не означает размер шины данных. Поскольку ваш процессор 32-битный, он может манипулировать 32-битными данными (которые могут быть адресами), поэтому он работает быстрее.

Все, что от этого зависит, - это размер вашей адресной шины. Если размер шины адреса составляет 32 бита, это означает, что для вашего ЦП доступно 2 ^ 32 местоположения, с которым он может взаимодействовать. Расположение начинается с 0H до FFFFFFFF. Представьте, что ваш процессор 32-битный, а адресная шина всего 8 бит. Сколько локаций доступно для вашего процессора для связи? Для вашего процессора доступно только 2 ^ 8 = 256 мест. Поскольку каждое местоположение составляет 8 бит = 1 байт, ваш процессор может адресовать только до 256 байтов памяти.

Перед изучением команд и регистров процессора 8086, очень важно понять, как он получает доступ к оперативной памяти, чтобы записывать в нее значения и читать их от туда.
Почему именно процессор 8086? Просто потому, что режим совместимости с командами этого процессора есть во всех старших моделях. И начинать изучать язык ассемблера проще с этого процессора.
Процессор 8086, мог работать только в одном режиме адресации памяти. Все следующие модели, начиная с процессора 80286, сохранили режим совместимости с 8086. Этот режим получил название реального режима ( Real Address Mode ), или R-режима.

Итак, ближе к делу.

Но постойте! Два 16-разрядных регистра дают 32 разряда. Как же из этого получается 20 битный адрес? Давайте разбираться где тут собака порылась.

Для определения начала сегментов памяти процессор 8086 использует четыре 16-битных сегментных регистра (CS, DS, SS, ES). Смещение внутри сегмента выбирается из регистров-указателей SP, BP, SI, DI или регистра IP (указателя команд - Instructions Pointer). Для получения 20-битного физического адреса, процессор размещает на адресной шине значение сегментного регистра и сдвигает его влево на четыре бита, заполняя младшие четыре бита адресной шины нулями (умножение на десятичное 16 или шестнадцатеричное 10 ), затем к этому значению прибавляется смещение и адрес сформирован.

Исходя из этого получается что границы сегментов (16-битное значение + 4 нулевых бита ) располагаются через каждые 16 байт физических адресов. 4 битами можно адресовать 16 (байт) ячеек памяти, каждая из которых как мы помним содержит один байт . Каждый из этих 16-байтовых фрагментов называется параграфом . 16-разрядные сегментные регистры могут адресовать 65536 (2 16 ) параграфов (границ сегментов). А параграф, как уже говорилось, это 16 байт. 65536(параграфов) умножаем 16(байт) получаем 1048576 байт или округленно 1 Мбайт. Хотя и тут не все гладко :). Здесь порылась вторая собака. Откапывать ее будет чуть позже.

Ниже приведен вывод регистров и сегмента кода в программе debug.exe, чтобы можно было все это наглядно увидеть.

-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13DF ES=13DF SS=13DF CS=13DF IP=0100 NV UP EI PL NZ NA PO NC
13DF:0100 0000 ADD [BX+SI],AL DS:0000=CD
-d cs:100
13DF:0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .
13DF:0110 00 00 00 00 00 00 00 00-00 00 00 00 34 00 CE 13 . 4.

Например, в сегментном регистре (CS -выделен ярким желтым цветом) хранится значение 13DFh, при умножении его на 10h получаем 13DF0h. Стоит обратить внимание, что младшая шестнадцатеричная цифра в адресе каждого сегмента всегда равна 0. То есть адрес любого сегмента всегда кратен 16 десятичному (10h). Поскольку последняя цифра в адресе сегмента всегда равна 0, то ее можно не хранить. В действительности 8086 вместо умножения на 16 использовал содержимое регистра так, как если бы оно имело четыре дополнительных нулевых бита (см. картинку).

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

Факты о "свинье":
* Нет никаких препятствий для обращения к физически не существующей памяти.
* При обращении к несуществующей памяти результат непредсказуем (все зависит от разработчика материнской платы и другого аппаратного обеспечения компьютера).
* Программа может обращаться к любому сегменту как для считывания, так и для записи данных и команд.

Содержание

Типы адресов памяти

Физические адреса

Память цифрового компьютера (или основная память) состоит из множества ячеек памяти, каждая из которых имеет физический адрес. [Источник 1] - код, который центральный процессор (или другое устройство) может использовать для доступа к ней. Как правило, только системное программное обеспечение, то есть BIOS [Источник 2] , операционные системы, и некоторые специализированные вспомогательные программы (например, тестеры памяти), обращаются к физической памяти с использованием операторов машинного кода и регистров процессора, Инструктируя CPU направлять аппаратное устройство, называемое контроллером памяти, использовать шину памяти или системную шину или отдельные управляющие, адресные и информационные шины для выполнения команд программы. Шина контроллеров памяти состоит из нескольких параллельных линий, каждая из которых представлена двоичной цифрой (бит). Ширина шины и, следовательно, количество адресуемых единиц хранения и количество битов в каждой единице варьируется среди компьютеров. Физический адрес - это конечный результат всех преобразований других типов адресов, перечисленных далее. На нём кончается работа внутри центрального процессора по преобразованию адресов.

Эффективные адреса

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

Логические адреса

Без знания номера и параметров сегмента, в котором указан эффективный адрес, последний бесполезен. Сам сегмент выбирается ещё одним числом, именуемым селектором. Пара чисел, записываемая как selector:offset, получила имя логический адрес. Так как активные селекторы хранятся в группе специальных регистров, чаще всего вместо первого числа в паре записывается имя регистра, например, ds:0x11223344 [Источник 3] . В старых компьютерах логические и физические адреса были согласованы, но с момента появления виртуальной памяти у большинства прикладных программ нет информации о физических адресах. Скорее, они адресуют логические адреса [Источник 4] или виртуальные адреса, используя блок управления памятью компьютера и отображение памяти операционной системы.

Линейные адреса

Эффективный адрес — это смещение от начала сегмента — его базы. Если сложить базу и эффективный адрес, то получим число, называемое линейным адресом:

lin_addr = segment.base + eff_addr

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

Виртуальные адреса

В литературе и в документации других архитектур встречается ещё один термин — виртуальный адрес. Он не используется в документации Intel на IA-32, однако встречается, например, в описании Intel® Itanium, в котором сегментация не используется. Можно смело считать, что для IA-32 виртуальный == линейный. В советской литературе по вычислительной технике этот вид адресов также именовался математическим.

Единица измерения адреса

Некоторые старые компьютеры (десятичные компьютеры) были десятизначными с цифровой адресацией. Например, каждый адрес в магнитной памяти IBM 1620 идентифицировал одну шестиразрядную двоично-кодированную десятичную цифру, состоящую из бита четности, бита флага и четырех числовых битов. В 1620 использовались пятизначные десятичные адреса, поэтому в теории максимально возможный адрес был 99,999. На практике CPU поддерживал 20000 ячеек памяти и мог добавить до двух дополнительных модулей внешней памяти, каждый из которых поддерживает 20 000 адресов, в общей сложности 60 000 (00000-59999).

Размер слова в зависимости от размера адреса

Размер слова является характеристикой для данной архитектуры компьютера. Он обозначает количество цифр, которое процессор может обрабатывать за один раз. Современные процессоры, включая встроенные системы, обычно имеют размер слова 8, 16, 24, 32 или 64 бита; Большинство современных компьютеров общего назначения используют 32 или 64 бита. В истории же использовалось много различных вариантов, включая 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 и 60 бит.

Очень часто, когда речь идет о размере слова современного компьютера, также оценивается размер адресного пространства на этом компьютере. Например, компьютер, называемый «32-битным», также обычно разрешает 32-разрядные адреса памяти; 32-разрядный компьютер с байтовой адресацией может адресовать 2^32 = 4,294,967,296 байт памяти или 4 гибибайта (GB). Это позволяет эффективно хранить адрес памяти одним словом.

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

Содержание отдельной ячейки памяти

Каждая ячейка памяти на компьютере с хранимой программой хранит двоичное число или десятичное число некоторого типа. Эти числа определяются как данные или как команды, а их использование определяется командами, которые извлекают и взаимодействуют с ними. Некоторые «ранние» программисты сочетали команды и данные в словах как способ сэкономить память: «Манчестер-Марк-1» имел место в своих 40-битных словах для хранения нескольких бит данных - его процессор игнорировал небольшую секцию в середине слова - и это часто использовалось как эксплойт для хранения дополнительных данных. Самовоспроизводящиеся программы, такие как вирусы, иногда рассматривают себя как данные, а иногда как команды. Самовоспроизводящийся код в настоящее время устаревает, поскольку его тестирование и техническое обслуживание непропорционально сложно для экономии нескольких байт, а также он может выдавать неверные результаты из-за предположений компилятора или процессора относительно состояния машины, но все же он иногда используется намеренно, с большой осторожностью.

Адресное пространство в программировании приложений

В современной многозадачной среде процессы приложений обычно имеют в своем адресном пространстве (или пространствах) куски памяти следующих типов:

  • Машинный код, в том числе:
    • Собственный код программы;
    • Совместно используемые библиотеки.
    • Инициализированные данные;
    • Неинициализированные (но выделенные) переменные;
    • Стек для переменных исполняемой программы;
    • Куча;
    • Совместно используемая память и отображенные в память файлы.

    Некоторые части адресного пространства могут вообще не отображаться.

    Схемы адресации

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

    Модели памяти

    Многие программисты предпочитают адресовать память таким образом, чтобы не было различий между пространством кода и пространством данных, а также физической и виртуальной памятью, другими словами, численно идентичные указатели относятся к точно одному и тому же байту ОЗУ.

    Однако многие старые компьютеры не поддерживали плоскую модель памяти - в частности, аппараты архитектуры Harvard вынуждали память с командами полностью отделяться от памяти с данными. Многие современные DSP(digital signal processor) (такие как Motorola 56000) имеют три отдельные области хранения - хранение программ, хранение коэффициентов и хранение данных. Некоторые часто используемые команды извлекаются из всех трех областей одновременно - меньшее количество областей хранения (даже если бы были одинаковые общие байты памяти) приводило бы к замедлению выполнения этих команд.

    Модели памяти в х86 архитектуре

    Старые компьютеры x86 использовали сегментированные адреса модели памяти на основе комбинации двух чисел: сегмента памяти и смещения внутри этого сегмента. Некоторые сегменты неявно трактовались как сегменты кода, предназначенные для команд, сегментов стека или обычных сегментов данных. Хотя использование было разным, сегменты не имели какой-либо защиты памяти. В плоской модели памяти все сегменты (сегментные регистры) обычно устанавливаются в ноль, и только смещения являются переменными.

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