Jaka jest historia, dlaczego bajty mają osiem bitów?

86

Co tam, gdzie działają historyczne siły, kompromisy, decydując się na użycie grup ośmiu bitów jako podstawowej jednostki?

Dawno, dawno temu istniały maszyny używające innych rozmiarów słów, ale dziś dla bitów nieprzekraczających 8 bitów należy szukać muzeów, specjalistycznych układów dla aplikacji osadzonych i procesorów DSP. Jak bajt wyewoluował z chaosu i kreatywności na początku projektowania komputerów?

Mogę sobie wyobrazić, że mniej bitów byłoby nieefektywnych w przetwarzaniu wystarczającej ilości danych, aby przetwarzanie było wykonalne, podczas gdy zbyt wiele doprowadziłoby do kosztownego sprzętu. Czy w grę wpłynęły inne wpływy? Dlaczego siły te wyrównały się do ośmiu bitów?

(BTW, gdybym mógł podróżować w czasie, powróciłbym do momentu, w którym „bajt” został ogłoszony jako 8 bitów, i przekonałem wszystkich, aby zrobili to 12 bitów, przekupując je bibelotami z początku XXI wieku).

DarenW
źródło
7
To może być jedno z tych pytań, na które nie możemy odpowiedzieć lepiej niż stara, dobra Wikipedia .
Scott Whitlock,
10
Dlaczego więc wolisz 12 bitów od 8?
FrustratedWithFormsDesigner
8
Czy ostatnie zdanie jest żartem? 12-bitowy bajt byłby niewygodny, ponieważ nie jest potęgą 2.
Rob
19
Pamięć i rejestry nie były wtedy tak tanie, więc 8 bitów było dobrym kompromisem w porównaniu do 6 lub 9 (ułamki 36-bitowego słowa). Ponadto obliczenia adresów są o wiele prostsze z mocami 2, i to się liczy, gdy logujesz się z surowych tranzystorów w małych puszkach.
Mike Dunlavey,
9
Używanie rozmiarów słów, które były potęgami 2, nie były tak ważne w „pierwszych dniach”. DEC-10 miał 36-bitowe słowo, a seria CDC 6000 miała 60-bitowe słowa i rejestry indeksowe z 18 bitami.
Jay Elston,

Odpowiedzi:

75

Wiele naprawdę wczesnych prac wykonano przy użyciu 5-bitowych kodów baudot, ale te szybko stały się dość ograniczające (tylko 32 możliwe znaki, więc w zasadzie tylko wielkie litery i kilka znaków interpunkcyjnych, ale za mało „miejsca” na cyfry) .

Stamtąd sporo maszyn trafiło do postaci 6-bitowych. To wciąż było dość nieodpowiednie - jeśli chciałeś wielkich i małych (angielskich) liter i cyfr, pozostały tylko dwa znaki do interpunkcji, więc większość wciąż miała tylko jedną literę w zestawie znaków.

ASCII zdefiniował 7-bitowy zestaw znaków. Przez długi czas był on „wystarczająco dobry” do wielu zastosowań i stał się podstawą większości nowszych zestawów znaków (ISO 646, ISO 8859, Unicode, ISO 10646 itp.)

Komputery binarne motywują projektantów do tworzenia rozmiarów potęgi dwóch. Ponieważ „standardowy” zestaw znaków i tak wymagał 7 bitów, dodanie kolejnego bitu nie wymagało większego wysiłku, aby uzyskać moc 2 (i do tego czasu pamięć masowa stawała się na tyle tańsza, że ​​„marnowała” trochę dla większości postaci był również bardziej do przyjęcia).

Od tego czasu zestawy znaków zostały przeniesione do 16 i 32 bitów, ale większość komputerów głównego nurtu jest w dużej mierze oparta na oryginalnym komputerze IBM. Z drugiej strony, wystarczająca część rynku jest wystarczająco zadowolona z 8-bitowych postaci, że nawet jeśli komputer nie osiągnąłby obecnego poziomu dominacji, nie jestem pewien, czy wszyscy i tak zrobiliby wszystko z większymi postaciami.

Powinienem również dodać, że rynek dość się zmienił. Na obecnym rynku rozmiar znaków jest mniej definiowany przez sprzęt niż oprogramowanie. Windows, Java itp. Już dawno przeniesiono do 16-bitowych znaków.

Obecnie przeszkodą we wspieraniu znaków 16- lub 32-bitowych są tylko minimalne trudności związane z samą postacią 16- lub 32-bitową, a przede wszystkim trudności z obsługą i18n w ogóle. W ASCII (na przykład) wykrycie, czy litera jest wielka czy mała, lub konwersja między nimi, jest niezwykle trywialne. W pełnej wersji Unicode / ISO 10646 jest on zasadniczo nie do opisania złożony (do tego stopnia, że ​​standardy nawet nie próbują - podają tabele, a nie opisy). Następnie dodajesz fakt, że w przypadku niektórych języków / zestawów znaków nawet podstawowa koncepcja wielkich / małych liter nie ma zastosowania. Następnie dodajesz fakt, że nawet wyświetlanie znaków w niektórych z nich jest o wiele bardziej złożone.

To wszystko jest wystarczająco złożone, że zdecydowana większość oprogramowania nawet nie próbuje. Sytuacja powoli się poprawia, ale powoli pojawia się słowo operacyjne.

Jerry Coffin
źródło
9
Myślałem, że przeczytałem gdzieś 8 pochodzi z 7-bitowego ASCII plus bit weryfikacyjny, który był potrzebny, ponieważ protokoły prawie transmisji nie były tak bezstratne, jak chcieli projektanci :-).
Martin York,
3
@LokiAstari, Tak, nazywa się to bitem parzystości i może być używany do prymitywnych form wykrywania błędów lub odzyskiwania. Wikipedia: Bit parzystości
CVn
2
Nie jestem pewien, co ma z tym wspólnego komputer IBM. „8 bitów na bajt” było już standardem w erze CP / M (<1980), która rozpoczęła się na procesorze 8080 (poprzednik 8086/8 ery IBM PC)
MSalters
1
@MSalters: Przede wszystkim, że (prawdopodobnie) „zahamował” ewolucję sprzętu. Nie, 8-bitów / bajtów nie było nowością na PC, ale do tego czasu większość architektur była wymieniana co kilka lat. Komputer w dużej mierze to powstrzymał i przyjął architekturę, która nie była nawet szczególnie postępowa, gdy była nowa, i zachował ją przez dziesięciolecia .
Jerry Coffin,
2
Obecne zestawy znaków nie mają 16 lub 32 bitów, podobnie jak Java i Windows. Obecny zestaw znaków to Unicode, który wymaga 21 bitów do bezpośredniego mapowania. Obecne oprogramowanie wykorzystuje kodowanie oparte na 8-bitowych jednostkach kodowych (UTF-8), 16 (UTF-16) lub 32 (UTF-32), łącząc wiele jednostek kodowych w celu utworzenia pojedynczego punktu kodowego w razie potrzeby, ale te rozmiary bitów są konsekwencją sprzętu, a nie zestawu znaków.
Sebastian Redl,
10

Siedem bitów dla informacji ASCII i jeden dla parzystości wykrywającej błędy.

DeadMG
źródło
27
7 bitów dla ASCII i jeden dodatkowy bit, który został wykorzystany do różnych rzeczy
Martin Beckett,
1
Parzystość była bardzo ważna w przypadku wczesnej pamięci. Nawet po przejściu do 8-bitowych bajtów danych istniały układy pamięci z 9 bitami, aby umożliwić kontrolę parzystości.
Jim C
1
To interesujące stwierdzenie. Czy są jakieś dane historyczne na poparcie tego pomysłu?
David
6

Zajrzyj na stronę Wikipedii dotyczącą architektury 8-bitowej . Chociaż zestawy znaków mogły być 5-, 6-, to 7-bitowe, podstawowa architektura procesora / magistrali pamięci zawsze używała mocy 2. Bardzo pierwszy mikroprocesor (około lat 70.) miał 4-bitową magistralę, co oznacza, że ​​jedna instrukcja mogła się poruszać 4 bity danych między pamięcią zewnętrzną a procesorem.

Następnie, wraz z wydaniem procesora 8080, 8-bitowa architektura stała się popularna i to dało początek zestawowi instrukcji montażu x86, który jest używany nawet do dziś. Gdybym musiał zgadywać, bajt pochodził z tych wczesnych procesorów, w których publiczność z głównego nurtu zaczęła akceptować i grać na komputerach PC, a 8-bitów uznano za standardowy rozmiar pojedynczej jednostki danych.

Od tego czasu rozmiar magistrali podwajał się, ale zawsze pozostawał potęgą 2 (tj. 16-, 32-, a teraz 64-bitowy) Właściwie jestem pewien, że wewnętrzne elementy dzisiejszej magistrali są znacznie bardziej skomplikowane niż po prostu 64 równoległe przewody, ale obecna architektura głównego nurtu procesora ma 64 bity.

Zakładałbym, że zawsze podwajając (zamiast rosnąć o 50%) łatwiej było stworzyć nowy sprzęt, który współistnieje z istniejącymi aplikacjami i innymi starszymi komponentami. Na przykład, kiedy przeszły z 8 bitów na 16, każda instrukcja może teraz przesunąć 2 bajty zamiast 1, więc oszczędzasz sobie jeden cykl zegara, ale wynik końcowy jest taki sam. Jeśli jednak przejdziesz od architektury 8-bitowej do 12-bitowej, przestaniesz dzielić oryginalne dane na pół i zarządzanie nimi może stać się denerwujące. To tylko domysły, tak naprawdę nie jestem ekspertem od sprzętu.

DXM
źródło
5
„Bardzo pierwszy procesor (około 1970 roku) ...” . Musisz przeczytać trochę historii komputerów !! Pierwszy procesor dla komputera z architekturą von Neumann został zbudowany podczas II wojny światowej ... lub wcześniej (w zależności od tego, w którą wersję historii wierzysz)
Stephen C,
w XIX wieku istniały urządzenia komputerowe i jestem pewien, że Egipcjanie mieli jakąś pulę kalkulatorów. Te informacje pochodzą ze strony Wikipedii, którą podlinkowałem. Tak jak powiedziałem, nie jestem ekspertem od sprzętu i na pewno nie jestem historykiem, ale jeśli uważasz, że jestem tak daleko, możesz zaktualizować tę stronę wikipedii.
DXM,
Myślę, że to pomogłoby, gdybym nie zepsuł łącza podczas wchodzenia. Przepraszam również za powiedzenie „pierwszy procesor”. Ponieważ cytowałem stronę wiki, powinienem powiedzieć „pierwszy mikroprocesor”. O to mi chodziło. Przepraszam za to.
DXM,
Rozwiązaniem dla komputera „przedelektronowego” jest powiedzenie nowoczesnego komputera lub, jak sądzę, komputera elektronowego. Nawet dzisiaj możesz zbudować komputer mechaniczny. Dopiero kiedy zaczęliśmy wykorzystywać pola elektronów na naszą korzyść, zbudowaliśmy mikroprocesor.
Ramhound,
8-bitowy bajt i 16-bitowy rozmiar słowa używane przez serię PDP mogły również mieć wpływ na popularność 8-bitowych bajtów.
Jay Elston,
4

Bajt ma różne (przynajmniej) 1, 4, 6, 7, 8, 9, 12, 18, 20 i być może 36 bitów, w zależności od komputera, na którym patrzysz. Rozumiem, że „bajt” oznacza tutaj „najmniejszą adresowalną jednostkę pamięci”, zamiast używać jakiejkolwiek interpretacji tekstowej. (Na przykład procesor Saturn, 64-bitowy procesor używany w popularnej linii kalkulatora HP48SX / GX, adresuje pamięć w skubkach - 4 bity.)

20-bitowe bajty były niezwykle popularne w „maszynach IAS” w latach 50-tych. 6, 12, 18 (a może 36) były dość popularne w różnych architekturach w latach 60., 70. i do pewnego stopnia 80.

W końcu wygrała ładna korespondencja między „potęgami 2” i „bitami w jednostce adresowalnej”.

Vatine
źródło
I nigdy 10 bitów? Wszystko, co mogłem znaleźć w Google, to niektóre najnowsze procesory wideo, które mają 10 bitów.
rslnx
@khrf Jest to możliwe, po prostu nie mogę sobie przypomnieć architektury, która ją posiadała (głównie rozważałem komputery ogólnego przeznaczenia).
Vatine
Tak, uważam też komputery ogólnego zastosowania. To dziwne, bo wyobrażam sobie, jak fajnie byłoby z 10-bitowym bajtem wiedzieć, że możesz adresować 1 kilobajt za pomocą 1 bajtu, 1 megabajt z 2 bajtami itp. Oczywiście, to tylko kaprys wygody :)
rslnx
2

Najpierw trochę wyjaśnienia: oktety (jednostki 8-bitowe) nie są tak naprawdę podstawową jednostką we współczesnych architekturach komputerowych. Przynajmniej nie bardziej fundamentalne niż inne potęgi dwóch - 2, 4, 16, 32, 64, 128 itd. Oktety były podstawową jednostką dla procesorów 8-bitowych (stąd nazwa!), Ale współczesne architektury zwykle pracują z większymi bitami ustawia wewnętrznie. Np. X86_64 ma 64-bitowe rejestry całkowite i 80-bitowe rejestry zmiennoprzecinkowe. Pamięć RAM jest odczytywana i zapisywana w 64-bitowych porcjach, a procesor po prostu używa odrobiny magii, aby wyglądać, jakbyś mógł adresować poszczególne 8-bitowe bajty.

W przypadku starszych architektur „bajt” wskazywał rozmiar magistrali danych, a jak stwierdzono w pierwotnym pytaniu, istniało wiele różnych rozmiarów magistrali (4, 5, 6, 8, 12 itd.). Ale od 1993 roku bajt został zdefiniowany jako 8 bitów, aby mieć znormalizowaną jednostkę SI dla wielkości danych. Dlatego znaczenie „bajtu” zmieniło się z bycia jednostką zależną od architektury na jednostkę znormalizowaną niezależną od architektury.

W dzisiejszych czasach bajty są standardową jednostką adresowania i kwantyfikacji danych, ale w rzeczywistości nie są tak naprawdę fundamentalne.

Jednostka oktetów stała się de facto standardem przechowywania, głównie z powodu obaw o przechowywanie tekstu. Do przechowywania tekstu najlepiej, aby jeden bajt zawierał jeden znak. Ważne były dwa czynniki:

  • Posiadanie jednostek o potęgach dwóch (2, 4, 8, 16, 32 itd.) Jest wygodniejsze przy projektowaniu systemów cyfrowych.
  • 8-bitowy wystarczy, aby zapisać pojedynczy znak w zestawie znaków ASCII (z miejscem na rezerwę na rozszerzenie zestawu znaków, aby obsługiwać powiedzmy cyrylicę).

Oczywiście 8-bitów nie wystarcza do obsługi wszystkich skryptów - coś w stylu japońskim wymaga co najmniej 16 bitów (i dla tego, co jest warte, Unicode ma 21 bitów), ale w tym momencie bity były drogie i większość tekstu cyfrowego była w w każdym razie zakres ASCII.

Obecnie tekst jest zwykle przechowywany w kodowaniach o zmiennej szerokości, takich jak UTF-8, a przy takich rzeczach, jak łączenie znaków w Unicode, „jeden bajt równa się jednemu znakowi” od dawna należy do przeszłości. Dzisiaj bajt jest tak naprawdę standardem ze względów historycznych.

JacquesB
źródło
1

Według moich informacji sam bajt pochodzi od wyrażenia by-eight, które zawierało osiem (8) bitów słów. wygoda, którą znajdujemy w 8-bitowych słowach, to konwersja na wartości szesnastkowe, ponieważ wartość 00000000 = 00 i 11111111 = FF (Dec 255 dla niepodpisanego i -127 dla podpisanego) łatwo jest wykonywać wszystkie operacje arytmetyczne na takiej strukturze, w tym bitowe operacje.

Widzę bajty (8-bitowe słowa) jako naturalną ewolucję rozmiarów słów od katastrofalnie małych 3-bitowych do absurdalnie dużych 60-bitowych słów

A.Rashad
źródło
Chciałbym zobaczyć referencje na ten temat. Poważnie w to wątpię. Zwłaszcza, że ​​słowo „bajt” użyte w standardzie C i włączone do standardu C ++ nie oznacza „8 bitów”. 8-bitowa ilość to oktet.
gnasher729,
0

Bajt nie musi mieć 8 bitów , ale wydaje się, że C i C ++ definiują bajt jako co najmniej 8 bitów (chociaż może być więcej). To pytanie dotyczące przepełnienia stosu wymienia kilka systemów, w których 1 bajt nie jest 8 bitami.

Thomas Owens
źródło
C ++, czy kompilator ?
Babiker
@Babiker: C ++. Kompilator będzie miał dokładną definicję. ( CHAR_BITSmakro)
MSalters