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).
Odpowiedzi:
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.
źródło
Siedem bitów dla informacji ASCII i jeden dla parzystości wykrywającej błędy.
źródło
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.
źródło
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”.
źródło
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:
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.
źródło
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
źródło
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.
źródło
CHAR_BITS
makro)