Оригиналът е на Julia Evans и за няколко дни събра

...
Оригиналът е на Julia Evans и за няколко дни събра
Коментари Харесай

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

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

Даниел Десподов преди 56 секунди 2 Сподели

Най-четени

IT НовиниЕмил Василев - 18:00 | 02.07.2023

Революционното носимо устройство, което „ ще размени смарт телефоните “ скоро излиза на пазара

IT НовиниДаниел Маринов - 20:29 | 01.07.2023

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

IT НовиниДаниел Маринов - 19:26 | 01.07.2023

Причините, заради които Съединени американски щати не строи повече атомни електроцентрали

Даниел Десподовhttps://www.kaldata.com/Новинар. Увличам се от модерни технологии, осведомителна сигурност, спорт, просвета и изкуствен интелект.

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

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

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

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

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

Тази публикация не дава изрично пояснение, само че аз зададох въпрос на Mastodon и от получените отговори събрах няколко вероятни аргументи за 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-битовия вид, който предложи Джери… “.

„ Най-важното ми техническо решение през цялата ми кариера в 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 бита?

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

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

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

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

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

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

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

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

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

0001 0010 0011 0100

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

Защо BCD кодирането е било толкоз известно?

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

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

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

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

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

„ Терминът “ полубайт “ се използваше за изложение на количеството памет, употребявано в мейнфреймовете на 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 ще докара до забележителна загуба наизуст. Ако размерът на байта се усили, процесорната система също би трябвало да стане по-сложна. Така да вземем за пример за всеки обичай е нужна една линия на шината. Затова мисля, че колкото е по-просто, толкоз по-добре.

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

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

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

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

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


СПОДЕЛИ СТАТИЯТА


КОМЕНТАРИ
НАПИШИ КОМЕНТАР