Dlaczego systemy x86-64 mają tylko 48-bitową wirtualną przestrzeń adresową?

W książce przeczytałem:

32-bitowe procesory mają 2^32 możliwe adresy, podczas gdy obecne 64-bitowe procesory mają 48-bitową przestrzeń adresową

Oczekiwałem, że jeśli jest to PROCESOR 64-bitowy, przestrzeń adresowa powinna również wynosić 2^64.

Więc zastanawiałem się, jaki jest powód tego ograniczenia?

Author: Peter Cordes, 2011-07-16

9 answers

Bo tylko to jest potrzebne. 48 bitów daje przestrzeń adresową 256 terabajtów. To dużo. Nie zobaczysz systemu, który potrzebuje więcej niż to w najbliższym czasie.

Więc producenci CPU poszli na skróty. Używają zestawu instrukcji, który pozwala na pełną 64-bitową przestrzeń adresową, ale obecne procesory używają tylko niższych 48 bitów. Alternatywą było marnowanie tranzystorów na obsługę większej przestrzeni adresowej, która nie miała być potrzebna przez wiele lat.

Więc gdy już dostaniemy w pobliżu limitu 48-bitowego jest to tylko kwestia zwolnienia procesorów, które obsługują pełną przestrzeń adresową, ale nie będzie to wymagało żadnych zmian w zestawie instrukcji i nie złamie kompatybilności.

 95
Author: jalf,
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-07-16 11:16:42

Każda odpowiedź odnosząca się do rozmiaru magistrali i fizycznej pamięci jest nieco błędna, ponieważ pytanie OP dotyczyło wirtualnej przestrzeni adresowej, a nie fizycznej przestrzeni adresowej. Dla przykładu, rzekomo analogiczne ograniczenie dla niektórych 386 było ograniczeniem fizycznej pamięci, której mogli używać, a nie wirtualnej przestrzeni adresowej, która zawsze była pełnym 32 bitami. W zasadzie można było użyć pełnych 64 bitów wirtualnej przestrzeni adresowej nawet przy zaledwie kilku MB fizycznej pamięci; oczywiście można to zrobić poprzez zamiana, lub dla wyspecjalizowanych zadań, w których chcesz odwzorować tę samą stronę pod większością adresów (np. niektóre operacje oszczędne danych).

Myślę, że prawdziwa odpowiedź jest taka, że AMD był po prostu tani i miał nadzieję, że nikogo to teraz nie obchodzi, ale nie mam odniesień do cite.

 15
Author: R..,
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-07-16 12:34:20

Przeczytaj sekcję ograniczenia artykułu Wikipedii :

Komputer nie może zawierać 4 petabajtów pamięci (ze względu na rozmiar obecnych układów pamięci, jeśli nic innego), ale firma AMD przewidywała Duże Serwery, Klastry pamięci współdzielonej i inne zastosowania fizycznej przestrzeni adresowej, które mogą się do tego zbliżyć w dającej się przewidzieć przyszłości, a 52-bitowy adres fizyczny zapewnia wystarczającą przestrzeń do rozbudowy, nie ponosząc kosztów implementacji 64-bitowego adresu fizycznego adresy

Oznacza to, że nie ma sensu implementować pełnego 64-bitowego adresowania w tym momencie, ponieważ nie możemy zbudować systemu, który mógłby w pełni wykorzystać taką przestrzeń adresową - wybieramy więc coś, co jest praktyczne dla dzisiejszych (i przyszłych) systemów.

 9
Author: Damien_The_Unbeliever,
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-07-16 11:16:29

Wewnętrzna natywna szerokość rejestru/operacji nie musi być odzwierciedlona w zewnętrznej szerokości magistrali adresowej.

Powiedzmy, że masz 64-bitowy procesor, który potrzebuje tylko dostępu do 1 megabajta pamięci RAM. 20-bitowa magistrala adresowa to wszystko, co jest wymagane. Po co przejmować się kosztami i złożonością sprzętową wszystkich dodatkowych pinów, których nie użyjesz?

Motorola 68000 była taka; 32-bitowa wewnętrznie, ale z 23-bitową magistralą adresową (i 16-bitową magistralą danych). Procesor mógł uzyskać dostęp do 16 megabajtów pamięci RAM, a do załadowania natywnego typu danych (32 bity) miały dwa dostępy do pamięci (każdy z 16 bitami danych).

 9
Author: ,
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-07-16 11:18:17

Z mojego punktu widzenia wynika to z rozmiaru strony.Każda strona zawiera co najwyżej 4096/8 =512 wpisów tabeli stron. I 2^9 =512. Więc 9 * 4 + 12=48.

 6
Author: linzuojian,
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-01-14 12:08:45

Istnieje poważniejszy powód niż tylko zapisywanie tranzystorów w ścieżce adresowej procesora: jeśli zwiększysz rozmiar przestrzeni adresowej, musisz zwiększyć rozmiar strony, zwiększyć rozmiar tabel stron lub mieć głębszą strukturę tabeli stron (czyli więcej poziomów tabel tłumaczeń). Wszystkie te rzeczy zwiększają koszt miss TLB, co szkodzi wydajności.

 5
Author: Brendan,
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
2015-10-30 17:25:16

[[0]} nie jest prawdą, że używane są tylko 48 bitów z 64-bitowego VA o niskim zamówieniu, przynajmniej z Intelem 64. Używa się górnych 16 bitów.

Sekcja 3.3.7.1 kanoniczne adresowanie w podręczniku programisty Architektur Intel® 64 i IA-32 mówi:

Adres kanoniczny musi mieć bity od 63 do 48 ustawione na zera lub Jedynki (w zależności od tego, czy bit 47 jest zerem czy jedynką)

Więc bity 47-63 tworzą super-bit, albo wszystkie 1 albo wszystkie 0. Jeśli adres nie jest w formie kanonicznej, implementacja powinna być błędna.

Na AArch64 to co innego. Zgodnie z zestawem instrukcji ARMv8 przegląd, jest to 49-bitowy VA.

System tłumaczeń pamięci AArch64 obsługuje 49-bitowy adres wirtualny (48 bitów na tabelę tłumaczeń). Adresy wirtualne są rozszerzane z 49 bitów i przechowywane w 64-bitowym wskaźniku. Opcjonalnie, pod kontrolą rejestru systemowego, najważniejsze 8 bitów wskaźnika 64-bitowego może zawierać "tag", który będzie ignorowany, gdy zostanie użyty jako adres load/store lub cel pośredniej gałęzi

 1
Author: Olsonist,
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-05 18:21:53

Procesor jest uważany za "n-bity" głównie ze względu na rozmiar magistrali danych i dużą część jego jednostek (Architektura wewnętrzna): rejestry, akumulatory, Jednostka arytmetyczno-logiczna (ALU), zestaw instrukcji itp. Na przykład: stary, dobry procesor Motorola 6800 (lub Intel 8050) to 8-bitowy procesor. Ma 8-bitową magistralę danych, 8-bitową architekturę wewnętrzną i 16-bitową magistralę adresową.


  • chociaż N-bitowy procesor może mieć inne jednostki niż n-size. Na przykład impovments w 6809 6800 (oba są 8-bitowym procesorem z 8-bitową magistralą danych). Wśród istotnych ulepszeń wprowadzonych w 6809 było użycie dwóch 8-bitowych akumulatorów (A i B, które można było połączyć w jeden 16-bitowy rejestr, D), dwóch 16-bitowych rejestrów indeksowych (X, Y) i dwóch 16-bitowych wskaźników stosu.
 0
Author: Amit G.,
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
2018-07-22 18:15:01

Wiele osób ma takie błędne przekonanie. Ale obiecuję ci, jeśli przeczytasz to uważnie, po przeczytaniu tego wszystkie Twoje błędne przekonania będą cleart.

Powiedzieć, że procesor 32-bitowy lub 64-bitowy nie oznacza, że powinien mieć odpowiednio 32-bitową magistralę adresową lub 64-bitową magistralę adresową!...Powtarzam, że nie!!

32-bitowy procesor oznacza, że ma 32-bitowe ALU (Jednostka arytmetyczno-logiczna)...oznacza to, że może działać na 32-bitowym operandie binarnym (lub po prostu mówiąc liczbę binarną o 32 cyfrach) podobnie 64-bitowy procesor może działać na 64-bitowym operandie binarnym. Więc pogoda procesor 32 bit lub 64 bit nie oznacza maksymalną ilość pamięci można zainstalować. Po prostu pokazują, jak duży może być operand...(dla analogii można myśleć o 10-cyfrowy kalkulator może obliczyć wyniki do 10 digits...it nie możemy podać 11 cyfr ani żadnych innych większych wyników... chociaż jest w dziesiętnym, ale mówię tę analogię dla prostoty)...ale to, co mówisz, to przestrzeń adresowa, która jest maksymalna bezpośrednio dostępna wielkość pamięci (RAM). Maksymalny możliwy rozmiar pamięci RAM jest określony przez rozmiar magistrali adresowej i nie jest to Rozmiar magistrali danych ani nawet ALU, na którym jest zdefiniowany rozmiar procesora (32/64 bit). Tak Jeśli procesor ma 32 bitową "magistralę adresową", to jest w stanie zaadresować 2^32 bajty=4GB PAMIĘCI RAM (lub dla 64 bitów będzie to 2^64)...ale powiedzenie procesora 32 bit lub 64 bit nie ma znaczenia dla tej przestrzeni adresowej (przestrzeń adresowa=jak daleko może uzyskać dostęp do pamięci lub maksymalny rozmiar pamięci RAM) i zależy tylko od wielkości jego ALU. Oczywiście szyna danych i szyna Adresowa mogą być tej samej wielkości i wtedy może się wydawać, że procesor 32 bitowy oznacza, że będzie miał dostęp do 2^32 bajtów lub 4 GB pamięci...ale to tylko przypadek i nie będzie to samo dla wszystkich....na przykład intel 8086 jest 16-bitowym procesorem (ponieważ ma 16-bitowy ALU), więc jak mówisz, powinien mieć dostęp do 2^16 bajtów=64 KB pamięci, ale to nieprawda. Może uzyskać dostęp do 1 MB pamięci dla 20 bitów autobus adresowy....Możesz googlować, jeśli masz jakiekolwiek wątpliwości:)

Myślę, że wyraziłem się jasno.Teraz przychodzi do twojego question...as 64-bitowy procesor nie oznacza, że musi mieć 64-bitową magistralę adresową, więc nie ma nic złego w posiadaniu 48-bitowej magistrali adresowej w 64-bitowym procesorze...zmniejszyli przestrzeń adresową, aby projekt i produkcja cheap....as nikt nie użyje tak dużej pamięci (2^64 bajtów)...gdzie 2^48 bajtów jest więcej niż wystarczająco w dzisiejszych czasach.

 0
Author: hafiz031,
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
2018-07-23 04:26:06