На доступ Оперативной памяти байтов

У меня есть просто простой вопрос. Сегодня память, микросхемы DDR 64 бита шириной, и шина данных ЦП, также 64 бита шириной. Но память все еще организована в единственных байтах. Так, что я хочу спросить, когда ЦП выбирает некоторый адрес памяти, это должен быть один байт, правильно? Поскольку самая низкая часть памяти, к которой можно получить доступ, составляет 1 байт. Но, если Вы получаете 1 байт на 1 адрес, почему шина памяти 8 байтов шириной?

3
задан 20.02.2011, 00:57

5 ответов

Мы обращаемся к нашим архитектурам ЭВМ как byte-addressable - значение, память обращена как байты. Это помогает нам вытянуть 8 битов данных за один раз. Но, который является не всегда нормой, и другие ширины используются.

На самом деле, как раз когда Вы используете базирующийся адресный байтом компьютер Intel, к памяти, которую Вы используете, обычно получают доступ с другой шириной (64 бита как в Вашем примере).

Это помогает в обращении к большему объему данных с меньшим адресным пространством.

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


Если бы Вы видели, что DDR-RAM придерживается, Вы вспомнили бы наблюдение нескольких микросхем на зеленом PCB. Они чередуются вместе для параллельного доступа. Это делает Ваши доступы RAM быстрее.

Перед RAM модулем является Контроллер памяти. Это разработано для доступа к данным в более широкой разрядной ширине (32, 64, 128 битов - в зависимости от дизайна).

При доступе к байту от этого пространства памяти контроллер памяти на самом деле получает полное "слово памяти"; здесь, слово является на самом деле шириной этого доступа от контроллера памяти.

Что означает, выбираете ли его 128 битов шириной, Вы всегда 16 байтов от адресов, которые являются кратными числами 16.

Так, теперь что происходит, когда Вы хотите байт в адресе 18 (= 16+2)?
Ну, Вы получаете 16 байтов от адреса 16 и выбрасываете 15 из них!

Более интересно, что происходит, когда Вы хотите записать байт в адресе 19?
Вы выбираете 16 байтов от адреса 16, изменяетесь 3'rd (19-й адрес) байт и затем записываете все эти 16 байтов обратно (забава ха?).

Все это - настоящее усилие. Контроллер памяти разработан, чтобы управлять этим и заразить работы над несколькими запросами параллельно.

Мы еще даже не говорим о 'двухканальном' :-)


Вот ссылка из Википедии на организации SDRAM DDR

PC3200 является SDRAM DDR, разработанный для работы на уровне 200 МГц с помощью микросхем DDR-400
с пропускной способностью 3 200 МБ/с. Поскольку память дважды накачана,
это означает, что эффективная тактовая частота памяти PC3200 составляет 400 МГц.

PC3200 на 1 ГБ модули не-ECC обычно делаются с шестнадцатью микросхемами на 512 Мбит,
8 вниз каждых сторон (микросхемы 512 мегабит × 16) / (8 битов (на байт)) = 1 024 МБ.
Отдельные микросхемы, составляющие модуль памяти на 1 ГБ, обычно
организованный с 64 мегабитами и ширина данных 8 битов для каждой микросхемы,
обычно выражаемый как 64M×8.

Память, произведенная таким образом, является низкой RAM плотности и обычно будет
совместимый с любой материнской платой, указывающей память PC3200 DDR-400.

От страницы Memory Controller

Ширина шины является количеством параллельных строк, доступных для общения с элементом памяти.
Ширины шины контроллеров памяти располагаются от 8-разрядного в более ранних системах к 512-разрядному в более сложных системах и видеокартах (обычно реализованный как четыре 64-разрядных одновременных контроллера памяти, работающие параллельно, хотя некоторые разработаны для работы в "режиме банды", где два 64-разрядных контроллера памяти могут использоваться для доступа к 128-разрядному запоминающему устройству).

3
ответ дан 07.12.2019, 23:45

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

2
ответ дан 07.12.2019, 23:45

Я говорю без больших экспертных знаний, но примерно...

Процессоры получают одно слово за один раз (т.е. процессор на 64 бита получает 8 байтов за один раз). Однако при получении единственного байта они эффективно выбрасывают другие 7 байтов. Схема адресации памяти все еще обычно считается байтами, но если Вы вытягиваете данные максимально быстро, Вы используете выровненные адреса слова, который является адресами, которые являются делимыми длиной слова в байтах. В системе на 64 бита Вы будете использовать адреса 0, 8, 16, 24, и т.д.

Если Вы вытягиваете слово от выровненного адреса неслова, скажите 5, процессор должен будет сделать две выборки, один для байтов 5, 6, 7 и вторые 8, 9, 10, 11, 12, таким образом, он будет брать вдвое более долго.

Обращение к байтам индивидуально полезно для всех видов причин, но можно было легко вообразить дизайн процессора, который обратился к слову, обращающемуся вместо этого. Если бы Вы хотели байт, то Вы получили бы слово, заменили бы пустым местом байты, которые Вы не хотите и переставляете байт к нижней части слова. В некотором роде это - то, что происходит, получение байта получает слово и затем выбирает байт от него, просто легче думать об этом как байт в адресе 10, а не Word 1, байт 3.

Вне ЦП RAM никогда не добирается для наблюдения более низких адресных битов, RAM организована как слова, это - модель CPU/Programmers, которую это обеспечивает иллюзии обращения байта.

1
ответ дан 07.12.2019, 23:45

В Вашем примере, пишущий один байт, с точки зрения слова памяти, изменилось слово. Вы и я, оба знают, что только несколько битов его отличаются, но независимо, память теперь должна быть обновлена. Так, чтобы слово было записано обратно к памяти - все 64 бита. Это было бы верно, каков минимальный адресуемый размер памяти. Когда память была 8 битов шириной, все 8 битов будут записаны даже при том, что, возможно, только 1 бит изменился.

0
ответ дан 07.12.2019, 23:45

Из того, что я вспоминаю со своих дней Ассемблерной и аппаратной работы низкого уровня, к памяти на самом деле получают доступ на страницах. Вы никогда действительно получаете доступ к единственному байту или даже ширине шины RAM, а скорее в блоках (я не могу дать Вам точное число — особенно, так как она варьируется — но числа, 4 КБ звучат очень знакомыми [возможно, я думаю о сегментах, хотя это составляет 64 КБ]).

Дело в том, что это ужасно неэффективно для обращения к единственному байту, тем более, что следующий адрес памяти, к которому получат доступ, вероятно, будет прямо рядом с ним. По сути, при доступе к байту система кэширует блок RAM (что Вы думаете, что различные кэши ЦП для?) Любые изменения, которые Вы вносите, сделаны к той кэшируемой RAM, так, чтобы при обратной записи ее она могла записать хороший блок и быстро. К байту получают доступ отдельно, но от кэшируемого блока; то есть, ЦП не выбирает единственный байт, но он действительно возвращается всего один.

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

0
ответ дан 07.12.2019, 23:45

Теги

Похожие вопросы