Почему число бит всегда (?) Имеет степень два? - PullRequest
50 голосов
/ 22 октября 2009

У нас есть 8-битные, 16-битные, 32-битные и 64-битные аппаратные архитектуры и операционные системы. Но не, скажем, 42-битные или 69-битные.

Почему? Это что-то фундаментальное, что делает 2 ^ n бит лучшим выбором, или это просто совместимость с существующими системами? (Очевидно, удобно, что 64-битный регистр может содержать два 32-битных указателя или 32-битный блок данных может содержать 4 байта.)

Ответы [ 18 ]

24 голосов
/ 22 октября 2009

Это в основном вопрос традиции. Это даже не всегда правда. Например, модули с плавающей точкой в ​​процессорах (даже современных) имеют 80-битные регистры. И нет ничего, что заставило бы нас иметь 8-битные байты вместо 13-битных.

Иногда это имеет математическое обоснование. Например, если вы решили иметь N-битный байт и хотите сделать целочисленное умножение, вам нужно ровно 2N-бит для хранения результатов. Затем вы также хотите добавить / вычесть / умножить эти 2N-битные целые числа, и теперь вам нужны 2N-битные регистры общего назначения для хранения результатов сложения / вычитания и 4N-битные регистры для хранения результатов умножения.

22 голосов
/ 22 октября 2009

http://en.wikipedia.org/wiki/Word_%28computer_architecture%29#Word_size_choice

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

20 голосов
/ 22 октября 2009

Частично, это вопрос адресации. Наличие N битов адреса позволяет вам адресовать максимум 2 ^ N бит памяти, и разработчики аппаратного обеспечения предпочитают использовать большую часть этой возможности. Таким образом, вы можете использовать 3 бита для адресации 8-битной шины и т. Д. *

8 голосов
/ 22 октября 2009

Досточтимый PDP-10 составлял 36 бит.

6 голосов
/ 10 июня 2010

Многие (большинство?) Ранние предмикропроцессорные ЦП имеют некоторое количество бит в слове, которое не является степенью двойки.

В частности, Сеймур Крэй и его команда создали много очень влиятельных машин с размерами слов, не равными двум, и размерами адресов - 12 бит, 48 бит, 60 бит и т. Д.

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

Я полагаю, что

(a) 8-битная адресуемая память стала популярной, потому что она была несколько более удобной для хранения 7-битных ASCII и 4-битных BCD, без неудобной упаковки или потери нескольких битов на символ; и никакая другая ширина памяти не имела большого преимущества.

(b) Как отмечает Стивен С. Стил, это небольшое преимущество умножается на эффект масштаба и рыночные силы - используется больше 8-битных запоминающих устройств, поэтому экономия от масштаба делает их немного дешевле, что приводит к еще больше 8-битной памяти, используемой в новых проектах и ​​т. д.

(c) Более широкая ширина шины теоретически делала процессор быстрее, но размещение всего процессора в одном чипе значительно снизило его стоимость и, возможно, немного быстрее, чем у любой предыдущей многочастной системы ЦП любой ширины шины. Сначала было достаточно транзисторов для 4-битного процессора, затем 8-битный процессор. Позже было достаточно транзисторов для 16-битного процессора, для огромной фанфары и «16-битной» маркетинговой кампании. Примерно в то же время можно ожидать 24-битный процессор ...

(d) произошла революция RISC. Первые две микросхемы RISC были 32-битными по любой причине, и люди были склонны думать, что «чем больше бит, тем лучше», поэтому каждый производитель воспользовался 32-битной популярностью. Кроме того, IEEE 754-1985 был стандартизирован с 32-разрядными и 64-разрядными числами с плавающей запятой. Было около 24 битных процессоров, но большинство людей никогда о них не слышали.

(e) По соображениям совместимости программного обеспечения производители поддерживали иллюзию 32-разрядной шины данных даже на процессорах с 64-разрядной лицевой шиной (таких как Intel Pentium и AMD K5 и т. Д.) Или на материнских платах с Шина шириной 4 бита (шина LPC).

4 голосов
/ 22 октября 2009

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

Говоря как дизайнер HW, вы, как правило, хотите спроектировать процессорные границы для байтовых границ, например, кратных 8. В противном случае вам придется либо добавить много неудобных схем в 49-битную систему, чтобы заставить ее использовать мод. -8 битов, или вы в конечном итоге игнорируете дополнительные биты, в этом случае это была пустая трата времени, если только вам не требовался дополнительный бит для инструкций, чего никогда не бывает в 16-битных или более широких системах.

3 голосов
/ 22 октября 2009

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

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

В качестве памятиплотность чипов стала выше, производители упаковали несколько чипов в одну упаковку.Поскольку наиболее часто используемые размеры слов были кратны 8 битам, 8-битная память была особенно популярна: это означало, что она также была самой дешевой.По мере того, как все больше и больше архитектур переходило на 8-битный байт-фургон, ценовая премия за чипы памяти, которые не использовали 8-битные байты, становилась все больше и больше.Аналогичные аргументы объясняют ходы от 8-> 16, 16-> 32, 32-> 64.

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

2 голосов
/ 05 сентября 2014

Когда-то длина компьютерных слов была кратна 6 битам, потому что компьютеры обычно использовали 6-битные наборы символов без поддержки строчных букв.

IBM создала высокопроизводительный компьютер STRETCH для Лос-Аламоса, который имел 64-битное слово. У него была необычная особенность, заключающаяся в том, что отдельные биты в памяти компьютера можно было адресовать напрямую, что заставляло длину слова быть степенью двойки. У этого также был более расширенный набор символов, который позволял включать математические символы (в дополнение к нижнему регистру); они использовались на специальном языке высокого уровня, названном COLASL.

Когда IBM выпустила очень популярный мэйнфрейм System / 360, несмотря на то, что он не имел битовой адресации, он сохранил восьмибитный байт, в первую очередь, для эффективного хранения упакованных десятичных величин от четырех бит до десятичной цифры. Поскольку эта машина была настолько популярна, она была очень влиятельной, и компьютер PDP-11 от DEC был спроектирован с 16-битным словом и 8-битными символами. PDP-11 был также первой машиной с прямым порядком байтов, и она была также очень популярна и влиятельна.

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

Если бы мы по-прежнему использовали 6-битные символы, на компьютерах, как правило, было бы 24, 48 или 96-битные слова.

1 голос
/ 22 октября 2009

80186, 8086, 8088 и «Реальный режим» на 80286 и более поздних процессорах использовали 20-разрядную сегментированную систему адресации памяти. У 80286 было 24 собственных адресных строки, а затем у 386 и более поздних - 32 или 64.

1 голос
/ 22 октября 2009

Распространенной причиной является то, что вы можете нумеровать свои биты в двоичном виде. Это полезно в довольно многих ситуациях. Например, в операциях сдвига или поворота. Вы можете повернуть 16-битное значение от 0 до 15 бит. Попытка вращения более 16 битов также тривиальна: это эквивалентно повороту более 0 битов. И вращение более 1027 бит равно вращению более 3 бит. Как правило, вращение регистра ширины W по N битам равно вращению по N по модулю W, и операция "по модулю W" тривиальна, когда W является степенью 2.

...