2013-12-02 1 views
-2

может кто-нибудь объяснить мне, почему мы представляем, адрес памяти, например, таким образом: «Word on adress = 0x00»: 0x04030201, Я знаю, что каждый из 01, 02, 03, 04 - один байт, но может кто-нибудь объяснить мне, где этот байт, что он представляет? ячейка памяти в регистре? Я полностью смущен ...ARM: адрес памяти ... почему это 0x04030201 ...?

ответ

1

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

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

Вы не можете просто спросить, что такое адрес 0x04030201 без какого-либо контекста. Схемы адресов довольно специфичны, их система состоит из сотен или тысяч или десятков тысяч систем на основе рук, все из которых имеют разные схемы адресов, и этот адрес может указывать на ничего, и никто не отвечает на этот запрос, и, возможно, зависает процессор или он может будь то какой-либо плунжер, или это может быть регистр в контроллере usb или видеоконтроллере или контроллере диска.

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

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

затем вы получаете перевод адресов. Используя аналогию с почтой, это похоже на то, что ваша почта перенаправлена ​​на другой адрес.Вы пишете один адрес в письме, почтовое отделение имеет запрос на пересылку для этого адреса, поэтому они меняют ваш адрес на новый адрес и завершают доставку письма. Когда вы слышите об устройстве управления памятью, MMU и в некоторых случаях использования слова виртуальной памяти, это то, что происходит. Допустим, что мы хотим сделать жизнь программистов простой, и мы расскажем каждому, что барабан начинается с адреса 0x00000000. что значительно упрощает выбор компилятором мест памяти, где живут наши переменные, массивы и программы, он может скомпилировать каждую программу таким же образом на основе этого адреса. Но как я могу запустить сразу несколько программ, если все они имеют одну и ту же память. хорошо, они не делают. Одна программа думает, что она пишет адрес 0x00000000, но на самом деле есть какой-то уникальный адрес, который может быть совершенно другим, который относится только к той программе, где можно сказать адрес 0x10000000, mmu - это как почтовый оператор в почтовом отделении, который меняет адрес, процессор знает из информации о том, какая задача выполняется, что ему нужно преобразовать 0x00000000 в 0x10000000. Когда другая программа обращается к тому, что, по ее мнению, равна 0x00000000, ее адрес может быть изменен на 0x11000000, а другой 0x00000000 может отображаться на физический адрес 0x12000000. Адрес, который фактически попадает в память, называется физическим адресом, адрес, который использует программа, называется виртуальным адресом, он не является реальным, он предназначен для изменения.

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

Схемы адресов для компьютеров, как правило, гораздо более продуманны, чем разработчики, которые строят дома в новых районах, но не всегда, но это далеко не так далеко от адреса на конверте. Вы выделяете биты в адресе, и эти куски бит означают что-то и доставляют этот запрос процессору индивидууму по этому адресу. То, как анализируются биты, очень специфично для процессора и платформы, а в некоторых случаях динамически или программируется «на лету», поэтому, если ваш следующий вопрос - то, что 0xabcd в моей системе, мы все равно не сможем вам помочь. Вам может потребоваться больше исследований или дать много информации ...

1

Думайте о памяти как о массиве байтов. «Word on address» может означать разные вещи, в зависимости от того, что дизайнеры CPU считают Word. В вашем случае кажется, что слово имеет длину 32 бита.

Так 'Word on address=0x00: 0x04030201' означает:

«Начало в ячейке памяти 0x00 (включительно), 'следующий' четыре байта 0x04 0x03 0x02 0x01.

Кроме того, в зависимости от континентности вашего ЦП изменяется значение «следующего». Может быть, 0x04 хранится в ячейке 0x00 или там хранится 0x01.

+0

спасибо, но почему ячейка памяти? Является ли каждая ячейка памяти 1 байтом длинной или она выбрана произвольно как 1 байт? и память в этом случае - это память RAM или может быть какой-то памятью, например, какой-то памятью на жестком диске ...? Кроме того, адрес 0x04030201 ... это POINTER для физической памяти или это память, содержащая информацию, чтобы получить сам? – user2774480

Смежные вопросы