Dlaczego liczba bitów jest zawsze(? moc dwojga?

Mamy 8-bitowe, 16-bitowe, 32-bitowe i 64-bitowe architektury sprzętowe i systemy operacyjne. Ale nie 42-bitowe czy 69-bitowe.

Dlaczego? Czy jest to coś fundamentalnego, co sprawia, że 2^N bitów jest lepszym wyborem, czy chodzi tylko o kompatybilność z istniejącymi systemami? (Jest to oczywiście wygodne, że 64-bitowy rejestr może pomieścić dwa 32-bitowe wskaźniki, lub że 32-bitowa Jednostka danych może pomieścić 4 bajty.)

Author: Flimzy, 2009-10-22

18 answers

To głównie kwestia tradycji. To nie zawsze jest prawdą. Na przykład jednostki zmiennoprzecinkowe w procesorach (nawet współczesnych) mają 80-bitowe rejestry. I nie ma nic, co zmusiłoby nas do posiadania 8-bitowych bajtów zamiast 13-bitowych bajtów.

Czasami ma to matematyczne rozumowanie. Na przykład, jeśli zdecydujesz się na bajt N bitów i chcesz mnożyć liczbę całkowitą, potrzebujesz dokładnie 2N bitów do przechowywania wyników. Następnie chcesz również dodać/odjąć/pomnożyć te 2N-bitowe liczby całkowite i teraz potrzebne są 2N-bitowe rejestry ogólnego przeznaczenia do przechowywania wyników dodawania/odejmowania oraz 4N-bitowe rejestry do przechowywania wyników mnożenia.

 30
Author: sharptooth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-28 06:17:10

Http://en.wikipedia.org/wiki/Word_%28computer_architecture%29#Word_size_choice

Różne ilości pamięci są używane do przechowywania wartości danych z różną dokładnością. Powszechnie stosowane rozmiary to zwykle moc 2 wielokrotności jednostki rozdzielczości adresu (bajtu lub słowa). Konwersja indeksu elementu w tablicy na adres elementu wymaga wtedy tylko operacji przesunięcia, a nie mnożenia. W niektórych przypadkach związek ten może również unikaj stosowania operacji podziału. W rezultacie większość nowoczesnych projektów komputerowych ma rozmiary słów (i innych rozmiarów operandów), które są mocą 2 razy większą od bajtu.

 25
Author: Voytek Jarnot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-29 05:39:18

Częściowo, to kwestia adresowania. Posiadanie N bitów adresu pozwala na adresowanie co najwyżej 2^N bitów pamięci, a projektanci sprzętu wolą wykorzystać większość tej możliwości. Możesz więc użyć 3 bitów do adresowania 8-bitowej magistrali itp...

 19
Author: DVK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 12:33:51

Czcigodny PDP-10 miał 36 bitów.

 8
Author: Otávio Décio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 12:23:39

Wiele (większość?) wczesne Procesory pre-mikroprocesorowe mają pewną liczbę bitów na słowo, które nie są potęgą dwóch.

W szczególności Seymour Cray i jego zespół zbudowali wiele bardzo wpływowych maszyn z rozmiarami słów i adresami nie będącymi potęgą-12 bitów , 48 bitów, 60 bitów itp.

Zaskakująco duża liczba wczesnych komputerów miała 36-bitowe słowa, całkowicie ze względu na fakt, że ludzie mają 10 palców. Artykuł Wikipedii "36-bit" zawiera więcej szczegółów na temat związku między 10 fingers i 36 bitów, oraz linki do artykułów na temat wielu innych historycznie ważnych, ale już nie popularnych rozmiarów bitów, większość z nich nie jest potęgą dwóch.

Spekuluję, że

(a) 8-bitowa pamięć adresowalna stała się popularna, ponieważ była nieco wygodniejsza do przechowywania 7-bitowych ASCII i 4-bitowych BCD, bez kłopotliwego pakowania lub marnowania wielu bitów na znak; i żadna inna szerokość pamięci nie miała żadnej wielkiej przewagi.

(b) jak podkreśla Stephen C. Steel, że niewielka przewaga jest mnożona przez ekonomię skali i siły rynkowe-więcej pamięci o szerokości 8 bitów jest używanych, a więc ekonomia skali czyni je nieco tańszymi, co prowadzi do jeszcze większej liczby pamięci o szerokości 8 bitów używanych w nowych projektach itp.

(C) szersze szerokości magistrali w teorii sprawiły, że procesor był szybszy, ale umieszczenie całego procesora na jednym chipie sprawiło, że był znacznie tańszy i być może nieco szybszy niż jakikolwiek poprzedni wieloczęściowy system CPU o dowolnej szerokości magistrali. Na początku było mało tranzystorów dla procesora 4-bitowego, a następnie 8-bitowego. Później było ledwie wystarczająco tranzystorów na 16-bitowy procesor, do ogromnej fanfary i kampanii marketingowej" 16-bitowej". Mniej więcej w tym czasie można się spodziewać 24-bitowego procesora ...

(d) rewolucja RISC uderzyła. Pierwsze dwa chipy RISC były 32-bitowe, z jakiegokolwiek powodu, a ludzie byli uwarunkowani, aby myśleć, że "więcej bitów jest lepszych", więc każdy producent skoczył na 32-bitowy pasmagon. Ponadto IEEE 754-1985 był standaryzowany z 32-bitowymi i 64-bitowymi liczby zmiennoprzecinkowe. Było kilka 24 bitowych procesorów, ale większość ludzi nigdy o nich nie słyszała.

(E) ze względu na kompatybilność oprogramowania producenci utrzymywali iluzję 32-bitowej bazy danych nawet na procesorach z 64-bitową magistralą przednią (np. Intel Pentium i AMD K5 itp.) lub na płytach głównych z magistralą 4-bitową (magistrala LPC).

 6
Author: David Cary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-10 06:03:50

Twój system pamięci chce być wielokrotnością bajtów, co sprawia, że pamięć podręczna chce być wielokrotnością bajtów, co sprawia, że cały system chce być wielokrotnością bajtów.

Mówiąc Jako projektant sprzętu komputerowego, generalnie chcesz zaprojektować CPU do granic bajtów jakiegoś rodzaju, tj. wielokrotności 8. W przeciwnym razie albo musisz dodać wiele niezręcznych obwodów do 49-bitowego systemu, aby wykorzystać bity mod-8, albo ignorujesz dodatkowe bity, w którym to przypadku było to stratą, chyba że potrzebujesz dodatkowy bit dla instrukcji, co nigdy nie ma miejsca w systemach 16-bitowych lub szerszych.

 4
Author: SDGator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 12:32:30

Jak zauważyli inni, na początku sprawy nie były tak jasne: słowa pojawiały się w różnych dziwnych rozmiarach.

Ale nacisk na standaryzację na 8-bitowych bajtach był również napędzany przez technologię chipów pamięci. Na początku wiele układów pamięci było zorganizowanych jako 1bit na adres. Pamięć dla słów n-bitowych została skonstruowana przez użycie układów pamięci w grupach n (z odpowiednimi liniami adresowymi związanymi ze sobą, a każdy z układów pojedynczy bit danych przyczyniający się do jednego bitu n-bitu word).

Ponieważ gęstość chipów pamięci wzrosła, producenci pakowali wiele chipów w jednym opakowaniu. Ponieważ najpopularniejsze rozmiary słów były wielokrotnościami 8 bitów, pamięć 8-bitowa była szczególnie popularna: oznaczało to, że była również najtańsza. W miarę jak coraz więcej architektur przeskakiwało na 8-bitowy bajt, premia cenowa dla układów pamięci, które nie używały 8-bitowych bajtów, stawała się coraz większa. Podobne argumenty dotyczą ruchów z 8->16, 16->32, 32->64.

Możesz nadal projektujemy system z pamięcią 24 bitową, ale ta pamięć będzie prawdopodobnie znacznie droższa niż podobna konstrukcja z pamięcią 32 bitową. O ile nie ma naprawdę dobrego powodu, aby trzymać się 24 bitów, większość projektantów zdecyduje się na 32 bity, gdy jego zarówno tańsze, jak i bardziej wydajne.

 3
Author: Stephen C. Steel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 19:23:03

W pewnym momencie długość słowa komputerowego zwykle była wielokrotnością 6 bitów, ponieważ komputery Zwykle używały 6-bitowych zestawów znaków, bez obsługi małych liter.

IBM stworzył dla Los Alamos wysokowydajny komputer, the STRETCH, który miał 64-bitowe słowo. Miał niezwykłą cechę, że poszczególne bity w pamięci komputera mogą być bezpośrednio adresowane, co wymusiło długość słowa, aby być potęgą dwóch. Posiadał też bardziej rozbudowany zestaw znaków, co pozwalało na Matematyczne symbole (oprócz małych liter) powinny być włączone; były one używane w specjalnym języku wyższego poziomu o nazwie COLASL.

Kiedy IBM wyszedł z bardzo popularnym System/360 mainframe, mimo że nie miał adresowania bitowego, zachował ośmiobitowy bajt, głównie po to, aby umożliwić efektywne przechowywanie spakowanych ilości dziesiętnych z czterech bitów do cyfry dziesiętnej. Ponieważ maszyna ta była tak popularna, była bardzo wpływowa, a komputer PDP - 11 z DEC został zaprojektowany z 16-bitowym słowem i 8-bitowym postaci. PDP-11 był również pierwszą prawdziwą maszyną little-endian, a także był bardzo popularny i wpływowy.

Ale to nie tylko z powodu podążania za modą. Znaki 8-bitowe pozwalają na pisanie małych liter, a ponieważ komputery stały się tańsze, ceniono możliwość łatwego użycia ich do przetwarzania tekstu. I tak jak STRETCH potrzebował słowa, które miało moc dwóch wielkości w bitach, aby umożliwić łatwe adresowanie bitów, dzisiejsze komputery musiały mieć słowo, które było mocą dwóch wielokrotność 8 (co zdarza się być dwoma do trzeciej mocy), aby umożliwić łatwe adresowanie znaków.

Gdybyśmy nadal używali znaków 6-bitowych, Komputery miałyby Zwykle 24, 48 lub 96-bitowych słów.

 2
Author: John Savard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-05 12:15:21

Powiązane, ale prawdopodobnie nie powód, słyszałem, że konwencja 8 bitów w bajcie jest dlatego, że IBM tak skonfigurował architekturę IBM System / 360.

 1
Author: Joel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 12:30:04

Powszechnym powodem jest to, że możesz numerować swoje bity w postaci binarnej. Przydaje się to w wielu sytuacjach. Na przykład w operacjach bitshift lub rotate. Wartość 16-bitową można obracać o od 0 do 15 bitów. Próba Obracania O 16 bitów jest również trywialna: jest to odpowiednik obrotu o 0 bitów. A obrót o 1027 bitów jest równy obrotowi o 3 bity. Ogólnie rzecz biorąc, obrót rejestru szerokości W nad N bitami równa się obrót nad N modulo w, a operacja " modulo W" jest trywialne, gdy W jest potęgą 2.

 1
Author: MSalters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 12:41:53

80186, 8086, 8088 i "tryb rzeczywisty" w procesorach 80286 i późniejszych używały 20-bitowego segmentowanego systemu adresowania pamięci. 80286 miał 24 natywne linie adresowe, a następnie 386, a później 32 lub 64.

 1
Author: Jesse C. Slicer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 15:04:38

Kolejny przykład licznika: mikrokontrolery serii PIC16C8X mają zestaw instrukcji o szerokości 14 bitów.

 1
Author: pjc50,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 15:19:01

Bajt jest związany z kodowaniem znaków głównie ze świata zachodniego, stąd 8 bitów. Word nie jest związany z kodowaniem związanym z szerokością adresu, stąd jest różny od 4 do 80 itd itp

 1
Author: user7178611,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-18 14:14:20

Mój wierny stary kalkulator HP 32S był 12-bitowy.

 0
Author: ndim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 12:56:56

Ponieważ przestrzeń zarezerwowana dla adresu jest zawsze stałą liczbą bitów. Po zdefiniowaniu rozmiaru stałego adresu (lub wskaźnika) chcesz go jak najlepiej wykorzystać, więc musisz użyć wszystkich jego wartości, aż do najwyższej liczby, którą może przechowywać. Najwyższa liczba, jaką można uzyskać z wielokrotności bitu (0 LUB 1), jest zawsze potęgą dwóch

 0
Author: Vincent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 14:05:17

Może znajdziesz coś tutaj: Binary_numeral_system

 0
Author: Shaoshing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 14:32:30

ICL 1900 były wszystkie 24 bitowe (słowa). Założę się, że niewiele osób je pamięta. Naprawdę ??

 0
Author: Frank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 15:07:25

Mamy, wystarczy spojrzeć na mikrokontrolery PIC.

 0
Author: Szundi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-20 19:45:41