Какова история того, почему байты восемь бит?

86

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

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

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

(Кстати, если бы я мог путешествовать во времени, я бы вернулся к тому моменту, когда «байт» был объявлен как 8-битный, и убедил всех сделать его 12-битным, подкупив их некоторыми безделушками 21-го века ».)

DarenW
источник
7
Это может быть один из тех вопросов, на которые мы не можем ответить лучше, чем старая добрая Википедия .
Скотт Уитлок
10
Так почему бы вы предпочли 12 бит 8?
FrustratedWithFormsDesigner
8
Последнее предложение в шутку? 12-битный байт был бы неудобен, потому что это не степень 2.
Роб
19
Память и регистры были тогда не такими дешевыми, поэтому 8 бит были хорошим компромиссом по сравнению с 6 или 9 (дробными частями 36-битного слова). Кроме того, вычисления адресов намного проще с степенями 2, и это имеет значение, когда вы делаете логику из необработанных транзисторов в маленьких банках.
Майк Данлавей
9
Использование размеров слова, которые были степенями 2, не было так важно в «первые дни». DEC-10 имел 36-битное слово, а серия CDC 6000 имела 60-битные слова и регистры индекса с 18-битными.
Джей Элстон

Ответы:

75

Большая часть действительно ранней работы была проделана с 5-битными кодами бодо, но они быстро стали весьма ограничивающими (всего 32 возможных символа, поэтому в основном только заглавные буквы и несколько знаков препинания, но недостаточно «пробела» для цифр) ,

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

ASCII определил 7-битный набор символов. Это было «достаточно хорошо» для многих применений в течение долгого времени и послужило основой для большинства новых наборов символов (ISO 646, ISO 8859, Unicode, ISO 10646 и т. Д.)

Бинарные компьютеры побуждают дизайнеров делать размеры в два раза больше. Так как «стандартный» набор символов в любом случае требовал 7 бит, добавить еще один бит, чтобы получить степень 2, было не так уж и сложно (к тому времени хранилище стало достаточно дешевым, чтобы «тратить» немного на большинство символов) было также более приемлемым).

С тех пор наборы символов перешли на 16 и 32 бита, но большинство обычных компьютеров в значительной степени основаны на оригинальном IBM PC. Опять же, достаточно рынка достаточно удовлетворено 8-битными символами, и даже если бы компьютер не достиг нынешнего уровня доминирования, я не уверен, что все все равно сделают все с более крупными символами.

Я также должен добавить, что рынок сильно изменился. На текущем рынке размер символов меньше определяется аппаратным обеспечением, чем программным обеспечением. Windows, Java и т. Д. Давно перешли на 16-битные символы.

Теперь помеха в поддержке 16- или 32-разрядных символов лишь минимальна из-за трудностей, присущих самим 16- или 32-разрядным символам, и в значительной степени из-за сложности поддержки i18n в целом. В ASCII (например) определение того, является ли буква заглавной или строчной, или преобразование между ними, является невероятно тривиальным. В полном Unicode / ISO 10646 это в основном неописуемо сложно (до такой степени, что стандарты даже не пытаются - они дают таблицы, а не описания). Затем вы добавляете тот факт, что для некоторых языков / наборов символов даже основная идея верхнего / нижнего регистра не применима. Затем вы добавляете тот факт, что даже отображение символов в некоторых из них намного сложнее.

Это все достаточно сложно, что подавляющее большинство программного обеспечения даже не пытается. Ситуация медленно улучшается, но медленно это оперативное слово.

Джерри Гроб
источник
9
Я думал, что прочитал somwehere 8 от 7-битного ASCII плюс бит проверки, который был необходим, потому что почти протоколы передачи были не так без потерь, как этого хотели дизайнеры :-).
Мартин Йорк,
3
@LokiAstari, да, он называется битом четности и может использоваться для грубых форм обнаружения или восстановления ошибок. Википедия: Бит четности
CVN
2
Не уверен, что IBM PC имеет отношение к этому. «8 бит на байт» уже был стандартом в эпоху CP / M (<1980), которая началась на процессоре 8080 (предшественник 8086/8 эпохи IBM PC)
MSalters
1
@MSalters: В первую очередь, это (возможно) "задержало" развитие аппаратного обеспечения. Нет, 8 бит / байт не были новыми для ПК, но до тех пор большинство архитектур заменялось каждые несколько лет. ПК в значительной степени остановил это и взял архитектуру, которая даже не была особенно прогрессивной, когда она была новой, и сохраняла ее в течение десятилетий .
Джерри Гроб
2
Текущие наборы символов не являются 16- или 32-битными, и Java и Windows не используют их. Текущий набор символов - Unicode, которому для сопоставления требуется 21 бит. Современное программное обеспечение использует кодировки, основанные на 8 (UTF-8), 16 (UTF-16) или 32 (UTF-32) битовых кодовых единицах, объединяя несколько кодовых единиц, чтобы сформировать единую кодовую точку, где это необходимо, но эти размеры битов являются следствием аппаратного обеспечения, а не набора символов.
Себастьян Редл
10

Семь битов для информации ASCII и один для четности с обнаружением ошибок.

DeadMG
источник
27
7 битов для ASCII и один дополнительный бит, который был использован для всех видов вещей
Мартин Беккет
1
Паритет был очень важен при ранней памяти. Даже после перехода к 8-битным байтам данных были предусмотрены микросхемы памяти с 9-битными данными для проверки на четность.
Джим С
1
Это интересное утверждение. Есть ли какие-либо исторические данные, подтверждающие эту идею?
Дэвид
6

Взгляните на страницу Википедии о 8-битной архитектуре . Хотя наборы символов могли быть 5-, 6-, а затем 7-разрядными, базовая архитектура процессора / шины памяти всегда использовала степени 2. Самый первый микропроцессор (около 1970-х годов) имел 4-разрядную шину, что означает, что одна инструкция могла переместиться на 4- биты данных между внешней памятью и процессором.

Затем, с выпуском процессора 8080, 8-битная архитектура стала популярной, и именно это положило начало набору инструкций по сборке x86, который используется и по сей день. Если я должен был предположить, байт пришел от этих ранних процессоров, где основная публика начала принимать и играть с ПК, а 8-битный считался стандартным размером одной единицы данных.

С тех пор размер шины удваивался, но всегда оставался на уровне 2 (т.е. 16-, 32- и теперь 64-разрядных). На самом деле, я уверен, что внутренняя часть современной шины намного сложнее, чем просто 64 параллельных провода, но текущая основная архитектура ЦП является 64-битной.

Я бы предположил, что всегда удваивая (а не увеличивая на 50%), было проще создавать новое оборудование, которое сосуществует с существующими приложениями и другими устаревшими компонентами. Так, например, когда они перешли с 8 битов на 16, каждая команда теперь может перемещать 2 байта вместо 1, поэтому вы сохраняете себе один такт, но затем конечный результат остается тем же. Однако, если вы перейдете с 8 на 12-битную архитектуру, вы закончите разбивать исходные данные на две части и управлять ими, что может стать раздражающим. Это всего лишь догадки, я не специалист по аппаратному обеспечению.

DXM
источник
5
Msgstr "Самый первый процессор (около 1970-х годов) ..." . Вам нужно немного почитать историю вычислений! Самый первый ЦП для компьютера с архитектурой фон Неймана был построен во время Второй мировой войны ... или раньше (в зависимости от того, в какую версию истории вы верите).
Стивен С.
и в 19 веке были вычислительные устройства, и я уверен, что у египтян был какой-то калькулятор. Эта информация пришла со страницы Википедии, на которую я ссылался. Как я уже сказал, я не специалист по аппаратному обеспечению и, конечно, я не историк, но если вы чувствуете, что я так далеко, вы можете обновить эту страницу википедии.
ДХМ
Я думаю, это помогло бы, если бы я не испортил ссылку при входе. Я также прошу прощения за то, что сказал «первый процессор». Поскольку я цитировал вики-страницу, я должен был сказать «первый микропроцессор». Это то, что я имел в виду. Прости за это.
ДХМ
Решение «доэлектронного» компьютера - это современный компьютер или, я полагаю, электронный компьютер. Даже сегодня вы могли бы построить механический компьютер. Только когда мы начали использовать электронные поля в наших интересах, мы создали микропроцессор.
Ramhound
8-битный байт и 16-битный размер слова, используемые сериями PDP, могли также играть роль в популярности 8-битных байтов.
Джей Элстон
4

Байт по-разному (как минимум) 1, 4, 6, 7, 8, 9, 12, 18, 20 и, возможно, 36 бит, в зависимости от того, на каком компьютере вы смотрите. Я беру здесь «байт», чтобы обозначить «наименьшую адресуемую единицу памяти», а не какую-либо тексто-ориентированную интерпретацию. (Например, процессор Saturn, 64-разрядный процессор, используемый в популярной линейке калькуляторов HP48SX / GX, адресует память в полубайтах - 4 бита.)

В 50-х годах 20-разрядные байты были чрезвычайно распространены в «машинах IAS». 6, 12, 18 (и, возможно, 36) были довольно популярны в различных архитектурах в 60-х, 70-х и в некоторой степени 80-х годов.

В конце концов, хорошее соответствие между «степенями 2» и «битами в адресуемой единице», похоже, победило.

Vatine
источник
И никогда не 10 бит? Все, что я мог найти в Google, - это последние 10-битные видеопроцессоры.
rslnx
@khrf Возможно, я просто не могу вспомнить архитектуру, в которой она была (я в основном считал компьютеры общего назначения).
Vatine
Да, я тоже считаю компьютеры общего назначения. Это странно, потому что я представляю, как хорошо было бы с 10-битным байтом знать, что вы можете адресовать 1 килобайт с 1 байтом, 1 мегабайт с 2 байтами и т. Д. Конечно, это просто каприз по комфорту :)
rslnx
2

Сначала немного пояснения: октеты (8-битные блоки) на самом деле не являются фундаментальной единицей в современных компьютерных архитектурах. По крайней мере, не более фундаментально, чем другие степени двух - 2, 4, 16, 32, 64, 128 и т. Д. Октеты были фундаментальной единицей для 8-битных процессоров (отсюда и название!), Но современные архитектуры обычно работают с большими битами -находит внутри. Например, x86_64 имеет 64-битные целочисленные регистры и 80-битные регистры с плавающей запятой. ОЗУ читается и записывается в 64-битных блоках, а процессор просто использует немного магии, чтобы создать впечатление, что вы можете обращаться к отдельным 8-битным байтам.

Для более старых архитектур «байт» указывал размер шины данных, и, как говорится в первоначальном вопросе, существовало много разных размеров шины (4, 5, 6, 8, 12 и т. Д.). Но с 1993 года байт был определен как 8 битов, чтобы иметь стандартизированную единицу СИ для размеров данных. Следовательно, значение «байт» изменилось с архитектурно-зависимой единицы на независимую от архитектуры стандартизированную единицу.

Таким образом, в наши дни байты являются стандартной единицей для адресации и количественной оценки данных, но в действительности они не являются принципиальными.

Блок октетов стал стандартом де-факто для хранения данных, главным образом из-за опасений по поводу хранения текста. Для хранения текста вы в идеале хотите, чтобы один байт сохранял один символ. Важными были два фактора:

  • Наличие единиц, которые имеют степень двойки (2, 4, 8, 16, 32 и т. Д.), Более удобно при проектировании цифровых систем.
  • 8-разрядного достаточно для сохранения одного символа в наборе символов ASCII (с запасом места для расширения набора символов для поддержки, скажем, кириллицы).

Конечно, 8-битных данных недостаточно для поддержки всех сценариев - для чего-то вроде японского языка требуется как минимум 16-битный код (и для чего стоит Unicode - 21-битный), но на тот момент биты были дорогими, и большая часть цифрового текста находилась в диапазон ASCII в любом случае.

В наши дни текст, как правило, хранится в кодировках переменной ширины, таких как UTF-8, и с такими вещами, как Unicode, объединяющий символы, «один байт равен одному символу» давно ушел в прошлое. Сегодня байт действительно является стандартом по историческим причинам.

JacquesB
источник
1

Согласно моей информации, само слово «байт» было получено из фразы «восемь», которая состояла из восьми (8) битовых слов. удобство, которое мы находим в 8-битных словах, - это преобразование в шестнадцатеричные значения, так как со значением 00000000 = 00 и 11111111 = FF (25 декабря для без знака и -127 для со знаком) легко выполнять все арифметические операции с такой структурой, включая побитовое операции.

Я вижу байты (8-битные слова) как естественную эволюцию размеров слов от катастрофически маленьких 3-битных до смешно больших 60-битных слов

A.Rashad
источник
Я хотел бы увидеть ссылку на это. Я серьезно сомневаюсь в этом. Тем более что слово «байт», используемое в стандарте C и включенное в стандарт C ++, не означает «8 бит». 8-битное количество - это октет.
gnasher729
0

Байт не должен быть 8 битами , но кажется, что C и C ++ определяют байт как минимум 8 бит (хотя это может быть больше). В этом вопросе о переполнении стека упоминается несколько систем, в которых 1 байт не равен 8 битам.

Томас Оуэнс
источник
C ++ или компилятор ?
Бабикер
@Babiker: C ++. Компилятор будет иметь точное определение. ( CHAR_BITSмакро)
MSalters