Защо един байт има точно 8 бита?

Оригиналът е на Julia Evans и за няколко дни събра огромен брой коментари. Въпреки лекия наивитет статията повдига редица интересни въпроси

Най-четени

Даниел Десподов
Даниел Десподов
Новинар. Увличам се от съвременни технологии, информационна безопасност, спорт, наука и изкуствен интелект.

Публикувах статия в едно онлайн списание по темата за двоичното представяне на информацията от компютрите и, наред с другото, многократно ме питаха: „Защо архитектурата x86 използва байтове, които имат точно 8 бита, а не друг брой битове?

Считам, че има два основни отговора на всеки подобен въпрос, както и комбинация от двата:

  • Исторически това е така, но и друг размер (напр. 4, 6 или 16 бита) би бил подходящ.
  • По някаква причина осемте бита са най-добрият вариант и дори ако Историята бе друга, пак щяхме да използваме 8-битови байтове.
  • Някаква комбинация от двете версии.

Не съм голям специалист по компютърна история (много повече ми харесва да използвам компютрите, отколкото да чета за тях), но винаги съм се чудил дали има някаква основателна причина компютърният свят да изглежда по този начин днес, или това е просто историческа случайност. Затова тази статия е за историята на компютрите.

Ето един пример за историческа случайност: DNS има поле class, което може да съдържа една от петте стойности – internet, chaos, hesiod, none и any. За мен това е ясен пример за историческа случайност – не мога да си представя, че ако пресъздадем това поле днес – в наши дни, ще го дефинираме по същия начин, без да се притесняваме за обратната съвместимост. Не съм сигурен, че изобщо бихме използвали полето class.

Тази статия не дава категорично обяснение, но аз зададох въпрос на Mastodon и от получените отговори събрах няколко възможни причини за 8-битовия размер на байтовете. Мисля, че отговорът представлява някаква комбинация от посочените по-долу причини.

Каква е разликата между байта и думата?

Защо един байт има точно 8 бита?

Ще започна с това, че в тази статия активно ще се обсъждат байтове и думи. Каква е разликата между тях? Ето моето разбиране на въпроса:

Размерът на байта представлява минималната единица данни, която може да бъде адресирана. Например в програмата на моята машина 0x20aa87c68 може да бъде адресът на един байт, което означава, че 0x20aa87c69 ще бъде адресът на следващия байт.

Размерът на думата е кратен на размера на байта. В Уикипедия определението е доста неясно („думата е естествена единица данни, използвана в определена процесорна архитектура“). Първоначално мислех, че размерът на думата е равен на размера на регистъра (64 бита при x86-64). Но според раздел 4.1 („Основни типове данни“) от Ръководството за архитектура на Intel, при системите x86 размерът на думата е 16 бита, докато размерът на регистъра е 64 бита. Това е объркващо. Но какъв е размерът на думата в системите x86 – 16 или 64 бита? Възможно ли е това да зависи от контекста?

Сега нека поговорим за възможните причини за използване на 8-битови байтове.

Причина 1: за да може всеки символ от английската азбука да се побере в 1 байт

В статия в Уикипедия се посочва, че 8-битовият байт е използван за първи път в IBM System/360 през 1964 г.

Има и видеоинтервю с Фред Брукс (ръководител на проекта), в което се обсъжда причината за това. Ето и част от съдържанието му:

„… Всъщност 6-битовите байтове са по-подходящи за научни изчисления, а 8-битовите – за търговски изчисления. Въпреки това всеки вариант може да бъде адаптиран, за да работи в ролята на другия. Така че се стигна до отговорно решение и аз склоних към 8-битовия вариант, който предложи Джери…“.

Защо един байт има точно 8 бита?

„Най-важното ми техническо решение през цялата ми кариера в IBM бе да премина към използването на 8-битови байтове в модела 360. Това решение бе подсилено и от убеждението ми, че обработката на символите ще стане по-важна от обработката на десетичните цифри“.

Идеята, че 8-битовият байт е по-подходящ за обработка на текст, е логична: 2^6 е равно на 64, така че 6 бита не са достатъчни за малки/големи букви и символи.

За преминаване към 8-битови байтове в System/360 е въведено и 8-битовото кодиране на символи EBCDIC.

Изглежда, че следващата важна стъпка в историята на 8-битовия байт е процесорът Intel 8008, създаден за използване в терминала Datapoint 2200. Терминалите се нуждаят от възможността да представят букви, както и контролни кодове, така че е логично да използват 8-битови байтове. В ръководството за работа с Datapoint 2200 от Музея за компютърна история на страница 7 се посочва, че този модел поддържа ASCII (7 бита) и EBCDIC (8 бита) кодиране.

Защо 6-битовият байт е по-добър за научни изчисления?

Заинтересувах се от коментара, че 6-битовият байт би се оказал по-подходящ за научни изчисления. Ето един цитат от интервю с Джийн Амдал:

„Исках да го направя 24 и 48 битов, а не 32 и 64, защото така щях да имам по-рационална система с плаваща запетая. Проблемът на системата с плаваща запетая е, че при 32-битова дума сте ограничени само до 8 бита за знака и повдигането на степен, а за да е практично от гледна точка на обхванатия цифров диапазон, трябва да правите 4 битови корекции вместо една. В резултат на това част от информацията се губи по-бързо, отколкото при двоично изместване“.

Изобщо не разбирам тази аргументация – защо, когато се използва 32-битова дума, повдигането на числото в степен трябва да бъде 8-битово? Защо не може да се използват 9 или 10 бита? Но това е всичко, което успях да намеря при едно кратко търсене.

Защо мейнфреймовете използват 36 бита?

Защо един байт има точно 8 бита?

Това също е свързано с 6-битовия байт: много мейнфреймове използваха 36-битови думи. Защо? Има едно отлично обяснение в статия в Уикипедия за 36-битовите компютри:

Преди появата на компютрите еталонът за прецизни научни и инженерни изчисления беше 10-цифровият електромеханичен калкулатор… Тези калкулатори имаха по един ред клавиши за всяка цифра и операторите бяха обучени да използват всичките си десет пръста за въвеждане на числата, така че въпреки че някои специализирани калкулатори имаха повече редове, десетте бяха практическо ограничение„.

Затова първите двоични компютри, предназначени за същия пазар, използват 36-битови думи. Тази дължина е достатъчна за представяне на цели положителни и отрицателни числа с точност до десет десетични знака (35 бита се оказаха минимумът)“.

Оказва се, че причината за използването на 36 бита е фактът, че log_2(20000000000) е равен на 34,2.

Предполагам, че причината за това се крие някъде в 50-те години на миналия век – тогава компютрите са били невероятен лукс. Така че, ако ви е било необходимо устройство, което да поддържа десет цифри, то е трябвало да бъде проектирано така, че да поддържа точно толкова бита и не повече.

Компютрите днес са по-бързи и по-евтини, така че ако по някаква причина трябва да представите десет цифри, можете просто да използвате 64 бита – загубата на малко място в паметта едва ли е проблем.

Интересно е, че някои от тези машини с 36-битови думи са позволявали да се избира размерът на байта – в зависимост от контекста е можело да се използват 5, 6, 7 или 8-битови байтове.

Причина 2: За ефективна обработка на десетичните числа в двоичното кодиране

Защо един байт има точно 8 бита?

През 60-те години на миналия век е било популярно кодирането на цели числа, наречено BCD (binary-coded decimal), при което всяка цифра е кодирана в 4 бита. Така например, ако трябва да кодирате 1234, BCD ще изглежда по следния начин:

0001 0010 0011 0100

Ето защо, за да се улесни обработката на двоично кодирана десетична стойност, размерът на байта трябва да бъде кратен на 4 бита – например 8 бита.

Защо BCD кодирането е било толкова популярно?

Това представяне на целите числа ми се стори наистина странно – защо да не се използва двоичната форма, която дава възможност за съхраняване на целите числа много по-ефективно? В края на краищата ефективността е била изключително важна при първите компютри.

Лично аз съм склонен да мисля, че причината е в спецификата на дисплеите на първите компютри, при които съдържанието на байта се е показвало директно в зависимост от състоянието на включените/изключените лампички.

Ето една снимка на IBM 650 със светлини на дисплея (CC BY-SA 3.0):

Защо един байт има точно 8 бита?

Затова, ако искаме да направим така, че човек да може сравнително лесно да прочете десетично число от двоичното му представяне, тази опция би имала много по-голям смисъл. Мисля, че BCD кодирането вече не е актуално днес, защото имаме монитори и нашите компютри умеят автоматично да преобразуват числата от двоична в десетична форма, като показват крайния резултат.

Чудех се също дали терминът „nibble“, означаващ 4 бита, не се е зародил от BCD – в контекста на BCD често се говори за половин байт (тъй като всяка цифра заема 4 бита), така че е логично да се използва думата за „4 бита“, която хората са нарекли „nibble“. Днес терминът вече ми изглежда архаичен – ако някога съм го използвал, то е било само за забавление (толкова е смешен). Тази теория се потвърждава от една статия в Уикипедия:

Защо един байт има точно 8 бита?

„Терминът “ полубайт“ се използваше за описание на количеството памет, използвано в мейнфреймовете на IBM за съхраняване на една цифра в пакетиран десетичен формат (BCD)“.

Друга причина за използването на BCD са финансовите изчисления. Днес при финансовите транзакции и при каквато и да е дейност свързана с долари или друга валута, масово се използват проценти с умножение и деление на 100. Това не е трудно, делението става бързо. Но през 70-те години на миналия век деленето на цяло число, представено в двоичен формат тоест, на 100 очевидно е било много бавно, така че е имало смисъл да се преработи системата за представяне на цели числа, за да се избегне подобно делене на 100.

Причина 3: Осмицата е степен на двойката

Много хора изтъкват важността на това размерът на байта да е равен на степен 2. Не мога да разбера дали това е вярно, или не, и не бях доволен от обяснението, че „компютрите използват двоичната бройна система, така че най-добре е да е степента на две. Това твърдение изглежда много правдоподобно, но аз исках да надникна по-дълбоко. Със сигурност в историята е имало много машини, които са използвали байтове с размер, различен от степента на 2. Ето няколко примера, взети от темата за ретрокомпютри в Stack Exchange:

  • В мейнфреймите Cyber 180 са се използвали 5-битови байтове
  • В сериите Univac 1100 / 2200 са се използвали 36-битови думи
  • PDP-8 е бил 12-битов компютър

Според мен основната причина е, че самите сигнали в компютрите са двоични и е логично байтът да бъде някаква степен на двойката, понеже по този начин значително се опростяват логическите операции и адресирането на паметта.

Но защо все пак 8 бита, а не повече?

Може да се запитате: „Ако 8-битовите байтове са по-добри от 4-битовите, защо да не продължим да увеличаваме размера им? Може да се използват 16-битови!“.

Ето две причини за избора на подобен малък размер на байта:

  • Това ще доведе до загуба на място – байтът е минималната адресируема единица и ако компютърът съхранява много ASCII текст (който се нуждае само от 7 бита), заделянето на 12 или 16 бита за всеки символ вместо 8 ще доведе до значителна загуба на памет.
  • Ако размерът на байта се увеличи, процесорната система също трябва да стане по-сложна. Така например за всеки бит е необходима една линия на шината. Затова мисля, че колкото е по-просто, толкова по-добре.

Съвместимостта

Защо един байт има точно 8 бита?

Intel 8008 (1972 г.) е предшественик на 8080 (1974 г.), който предшества 8086 (1976 г.) – първата фамилия x86 процесори. Явно е, че 8-битовите байтове работят перфектно и не се налага промяна в размера на байта. Използването на 8-битовия байт дава възможност за повторно използване на голяма част от набора на машинни инструкции, а това доста опростява асемблера.

Освен това през 80-те години на миналия век започнаха да се появяват мрежовите протоколи като TCP, които използват 8-битови байтове (обикновено наричани „октети“), и ако трябваше да реализирате мрежови протоколи, вероятно щяхте да изберете да използвате 8-битови байтове в тях.

Според мен основните причини, поради които байтът се състои от 8 бита, са следните:

  • Много от първите компютърни компании са базирани в САЩ, където английският е най-разпространеният език и неговата азбука се побира в 7 бита, а с 8 бита могат да се опишат и специалните знаци на английския език.
  • Съответно разработчиците са искали компютрите много добре да работят с текстове, които в началото са само на английски език
  • Неголемият размер на байтовете е по-ефикасен
  • Числото 8 е по-добре от 7, понеже е степен на двойката
  • След като 8-битовите компютри стават изключително популярни и перфектно работят, всички предпочитат да използват архитектури с 8-битови байтове за запазване на съвместимостта

АбонаментВсичко важно от света на технологиите, директно в пощата ти.

С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.


Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!

1 Коментар
стари
нови оценка

Нови ревюта

Подобни новини