Jump to content

Адрес Word

(Перенаправлено с толстым адресом )

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

Таблицы, показывающие те же данные, организованные по адресу байта и слов

Рассмотрим компьютер, который предоставляет 524 288 (2 19 ) кусочки памяти. Если эта память расположена в байтовом сплоченном пространстве с плоским адресом с использованием 8-битных байтов, то их 65 536 (2 16 ) Допустимые адреса, от 0 до 65 535, каждый обозначает независимые 8 бит памяти. Если вместо этого он расположен в пространстве с плоским адресом с добавлением слов с использованием 32-разрядных слов, то есть 16 384 (2 14 ) Допустимые адреса, от 0 до 16 383, каждый обозначает независимые 32 бита.

В более общем плане, минимально адресуемой единицы (MAU) является свойством конкретной абстракции памяти. Различные абстракции в компьютере могут использовать разные маус, даже если они представляют одну и ту же базовую память. Например, компьютер может использовать 32-разрядные адреса с байтовой адресацией в своем наборе инструкций ЦП , но система когерентности кэша может работать только с памятью только при гранулярности 64-байтовых линий кэша , что позволяя определить какую-либо конкретную линию кэша. 26-битный адрес и уменьшение накладных расходов кеша.

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

Компромиссы разных минимальных адресуемых подразделений

[ редактировать ]

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

Предположим, что программа хочет хранить один из 12 традиционных признаков западной астрологии . Один знак можно хранить в 4 битах. Если знак хранится в его собственном MAU, то 4 бита будут потрачены впустую с помощью адресации байта (эффективность 50%), в то время как 28 бит будут потрачены впустую с 32-битной обработкой слов (эффективность 12,5%). Если знак «упакована» в MAU с другими данными, то может быть относительно дороже читать и писать. Например, чтобы написать новый знак в MAU, в который были упакованы другие данные, компьютер должен прочитать текущее значение MAU, перезаписать только соответствующие биты, а затем сохранить новое значение обратно. Это будет особенно дорого, если программа необходимо позволить другим потокам одновременно изменять другие данные в MAU.

Более распространенным примером является строка текста . Общие форматы строк, такие как строки UTF-8 и ASCII хранители в качестве последовательности из 8-битных кодовых точек. При обращении к байту каждая кодовая точка может быть помещена в свою собственную независимо поддающуюся мау без накладных расходов. С 32-разрядной адресацией Word, размещение каждой кодовой точки в отдельную MAU увеличит использование памяти на 300%, что не является жизнеспособным для программ, которые работают с большими объемами текста. Упаковка соседних кодовых точек в одно слово избегает этой стоимости. Тем не менее, многие алгоритмы для работы с текстом предпочитают иметь возможность самостоятельно обращаться к коду; Чтобы сделать это с помощью упакованных кодовых точек, алгоритм должен использовать «широкий» адрес, который также хранит смещение символа внутри слова. Если этот широкий адрес должен храниться в другом месте в памяти программы, он может потребовать большего памяти, чем обычный адрес.

Чтобы оценить эти эффекты на полную программу, рассмотрим веб -браузер, отображающий большую и сложную страницу. Некоторые из памяти браузера будут использоваться для хранения простых данных, таких как изображения и текст; Браузер, скорее всего, решит сохранить эти данные максимально эффективно, и он будет занимать примерно такое же объем памяти независимо от размера MAU. Другая память будет представлять модель браузера различных объектов на странице, и эти объекты будут включать много ссылок: друг для друга, на изображение и текстовые данные и так далее. Количество памяти, необходимое для хранения этих объектов, будет во многом зависеть от ширины адреса компьютера.

Предположим, что если бы все адреса в программе были 32-битными, эта веб-страница займет около 10 гигабайт памяти.

  • Если веб-браузер работает на компьютере с 32-разрядными адресами и байтовой памятью, адресное пространство будет охватывать 4 гигабайта памяти, что недостаточно. Браузер либо не сможет отобразить эту страницу, либо он должен быть в состоянии оппортунистически перемещать некоторые данные в более медленное хранилище, что существенно повредит его производительности.
  • Если веб-браузер работает на компьютере с 64-битными адресами и байтовой памятью, он потребует значительно большей памяти для хранения больших адресов. Точные накладные расходы будут зависеть от того, сколько из 10 гигабайтов-это простые данные и сколько объектных и плотных с ссылками, но показатель 40% не является неправдоподобным, в общей сложности 14 гигабайт. Это, конечно, в пределах возможностей 64-разрядного адресного пространства. Тем не менее, браузер, как правило, будет демонстрировать худшую локальность и хуже использовать кэши памяти компьютера на компьютере, предполагая равные ресурсы с альтернативами.
  • Если веб-браузер работает на компьютере с 32-разрядными адресами и 32-разрядной памятью, которая, вероятно, потребует дополнительной памяти из-за неоптимальной упаковки и необходимости для нескольких широких адресов. Это воздействие, вероятно, будет относительно небольшим, так как браузер будет использовать упаковочные и не широкие адреса для наиболее важных целей, а браузер будет удобно вписаться в максимально адресуемый диапазон 16 гигабайтов. Тем не менее, могут быть значительные накладные расходы во время выполнения из -за широкого использования упакованных данных для изображений и текста. Что еще более важно, 16 гигабайтов являются относительно низким пределом, и если веб-страница значительно растет, этот компьютер исчерпает его адресное пространство и начнет испытывать некоторые из тех же трудностей, что и компьютер с адресом байта.
  • Если веб-браузер работает на компьютере с 64-битными адресами и 32-разрядным словом, подлежащей образованию, он будет страдать от обоих вышеупомянутых накладных расходов во время выполнения: он требует значительно большей памяти для размещения более крупных 64-битных адресов, причинения боль Локальность, а также наносят накладные расходы во время работы с обширной упаковкой данных текста и изображений. Адресация слов означает, что программа может теоретически учитывать до 64 экзабит памяти, а не только 16 экзабайт, но, поскольку программа почти не нуждается в такой много памяти (и на практике ни один реальный компьютер не способен предоставить его), это не дает пользы. Полем

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

Доступ к слову и широкие адреса

[ редактировать ]

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

Предположим, что четыре последовательных кодовых точка из строки UTF-8 должны быть упакованы в 32-битное слово. Первая точка кода может занять биты 0–7, второй 8–15, третий 16–23 и четвертый 24–31. (Если бы память была поддана байт-адресу, это был бы небольшой орден эндсианского байта.)

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

Предположим, что программа хочет прочитать третий кодовой точку в регистр r1 Из слова по адресу в регистре r2Полем В отсутствие любой другой поддержки из набора инструкций программа должна загрузить полное слово, смену правого на 16, чтобы отбросить первые две кодовые точки, а затем замаскировать четвертую точку кода:

  ldw  $r1, 0($r2)        # Load the full word
  srl  $r1, $r1, 16       # Shift right by 16
  andi $r1, $r1, 0xFF     # Mask off other code points

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

  ldw  $r1, 0($r2)        # Load the full word
  srlv $r1, $r1, $r3      # Shift right by the bit offset
  andi $r1, $r1, 0xFF     # Mask off other code points

Предположим, что программа хочет назначить кодовую точку в регистрации r1 к третьему кодовому точке в словом на адресе в r2Полем В отсутствие любой другой поддержки из набора инструкций программа должна загрузить полное слово, маскировать старую ценность этой кодовой точки, перенести новое значение на место, объединить значения и сохранить полное слово:

  sll  $r1, $r1, 16       # Shift the new value left by 16
  lhi  $r5, 0x00FF        # Construct a constant mask to select the third byte
  nor  $r5, $r5, $zero    # Flip the mask so that it clears the third byte
  ldw  $r4, 0($r2)        # Load the full word
  and  $r4, $r5, $r4      # Clear the third byte from the word
  or   $r4, $r4, $r1      # Merge the new value into the word
  stw  $r4, 0($r2)        # Store the result as the full word

Опять же, если смещение хранится в r3, требуется более сложный подход:

  sllv $r1, $r1, $r3      # Shift the new value left by the bit offset
  llo  $r5, 0x00FF        # Construct a constant mask to select a byte
  sllv $r5, $r5, $r3      # Shift the mask left by the bit offset
  nor  $r5, $r5, $zero    # Flip the mask so that it clears the selected byte
  ldw  $r4, 0($r2)        # Load the full word
  and  $r4, $r5, $r4      # Clear the selected byte from the word
  or   $r4, $r4, $r1      # Merge the new value into the word
  stw  $r4, 0($r2)        # Store the result as the full word

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

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

В этих последовательностях кода дополнительное смещение должно быть сохранено вместе с базовым адресом, эффективно удваив общие требования к хранению адреса. Это не всегда верно для словных машин, в первую очередь потому, что сами адреса часто не заполняются другими данными, чтобы сделать доступ более эффективными. Например, Cray X1 использует 64-разрядные слова, но адреса составляют всего 32 бита; Когда адрес хранится в памяти, он хранится в своем собственном слове, и поэтому смещение байта может быть помещено в верхние 32 бит слова. Неэффективность использования широких адресов в этой системе - это лишь дополнительная логика для манипулирования этим смещением и извлечением и вставкой байтов в словах; У него нет влияния использования памяти.

[ редактировать ]

Минимально адресуемое устройство компьютера не обязательно совпадает с минимальным размером доступа к памяти на наборе инструкций компьютера. Например, компьютер может использовать байтовую адресацию без предоставления каких -либо инструкций для непосредственного чтения или записи одного байта. Ожидается, что программы будут эмулировать эти операции в программном обеспечении с битовыми манипуляциями, как и приведенные выше последовательности кодов. Это относительно распространено в 64-битных компьютерных архитектурах, разработанных в качестве преемников 32-битных суперкомпьютеров или мини-компьютеров, таких как Dec Alpha и Cray X1 .

Стандарт C утверждает, что указатель, как ожидается, будет иметь обычное представление адреса. C также позволяет сформировать указатель в любой объект, кроме битного поля; Это включает в себя каждый отдельный элемент массива байтов. C Компиляторы для компьютеров, которые используют адресацию Word, часто используют разные представления для указателей на разные типы в зависимости от их размера. Указатель на тип, который достаточно большой, чтобы заполнить слово, будет простым адресом, в то время как указатель, такой как char* или void* будет широким указателем: пара адреса слова и смещение байта в этом слове. Поэтому преобразование между типами указателей не обязательно является тривиальной операцией и может потерять информацию, если это сделано неправильно.

Потому что размер struct не всегда известно при принятии решения о представлении указателя на это struct, невозможно надежно применить правило выше. Компиляторам может потребоваться выравнивать начало struct так что он может использовать более эффективное представление указателя.

  • ERA 1103 использует адреса Word с 36-битными словами. Только адреса 0-1023 см. В памяти случайного доступа; Другие либо не нанесены, либо относятся к драм -памяти.
  • PDP -10 использует адреса Word с 36-битными словами и 18-битными адресами.
  • Большинство суперкомпьютеров Cray 1980-х и 1990-х годов используют адресацию слов с 64-битными словами. Cray -1 и Cray X-MP используют 24-разрядные адреса, в то время как большинство других используют 32-разрядные адреса.
  • Cray X1 использует байтовую адресацию с 64-битными адресами. Он напрямую не поддерживает доступ к памяти меньше 64 бит, и такие доступ должны быть инициированы в программном обеспечении. Компилятор C для X1 был первым Cray Compiler, поддерживающим эмуляцию 16-битных доступа. [ 1 ]
  • Dec Alpha использует байтовую адресацию с 64-битными адресами. Ранние альфа-процессоры не обеспечивают прямой поддержки 8-битных и 16-битных доступа к памяти, и программы необходимы, например, загружать байт путем загрузки содержащего 64-битное слово, а затем отдельно извлечение байта. Поскольку альфа использует байтовую адресацию, это смещение по -прежнему представлено в наименьших значительных битах адреса (а не отдельно в виде широкого адреса), а альфа удобно обеспечивает нагрузку и сохраняется невыполненные инструкции ( ldq_u и stq_u), которые игнорируют эти биты и просто загружают и сохраняют содержащее выровненное слово. [ 2 ] Более поздние расширения слов в архитектуре (BWX) добавили 8-битные и 16-битные нагрузки и магазины, начиная с Alpha 21164A. [ 3 ] Опять же, это расширение было возможным без серьезных несовместимости программного обеспечения, потому что альфа всегда использовала байтовую адресацию.

Смотрите также

[ редактировать ]
  1. ^ Terry Greyzck, Cray Inc. Cray x1 Компиляторные проблемы (и как мы их решили)
  2. ^ «Alpha Axp, часть 8: доступ к памяти, хранение байтов и слов и невыполненные данные» . 16 августа 2017 года.
  3. ^ «Альфа: история в фактах и ​​комментариях - Альфа 21164 (EV5, EV56) и 21164PC (PCA56, PCA57)» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fd5d19197b11f302c9b66c5bd5b66ffa__1693192260
URL1:https://arc.ask3.ru/arc/aa/fd/fa/fd5d19197b11f302c9b66c5bd5b66ffa.html
Заголовок, (Title) документа по адресу, URL1:
Word addressing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)