2009-07-20 09:39:10 +0000 2009-07-20 09:39:10 +0000
26
26

Czy 32-bitowy system operacyjny może działać na 64-bitowym procesorze?

Jaka jest różnica między 32-bitowym systemem operacyjnym a 64-bitowym systemem operacyjnym? Czy 32-bitowy system operacyjny może działać na 64-bitowym procesorze?

Odpowiedzi (3)

35
35
35
2009-07-20 09:42:36 +0000

Twoje pytanie jest specyficzne dla architektury. x64 jest zasadniczo rozszerzeniem architektury x86. Obsługuje 64-bitową przestrzeń adresową. Zapewnia kilka nowych instrukcji i nowych rejestrów.

Możesz uruchomić 32-bitowy system Windows x86 na maszynie x64. Zauważ, że nie można tego zrobić na 64-bitowych systemach Itanium.

3
3
3
2015-10-03 02:08:32 +0000

Obecnie przyjęta odpowiedź jest ogólnie poprawna, ale nie do końca. Tak naprawdę nie ma jednej rzeczy zwanej “32-bitowym procesorem” lub “64-bitowym procesorem” - to opis, który odnosi się tylko do jednej małej części architektury procesora. W szczególności odnosi się on do liczby linii wyboru adresu pomiędzy CPU a pamięcią, czyli do tzw. przestrzeni adresowej dostępnej dla operacji w pamięci.

W dawnych czasach, gdy ludzie siedzieli i splatali (owijali) przewody między procesorem a pamięcią, trzeba było użyć albo 32, albo (teoretycznie, bo wtedy nie istniały) 64 przewodów między procesorem a kontrolerem pamięci, które byłyby używane do określenia, który adres pamięci chcemy uzyskać. Na przykład, powiedzmy, że mamy 2-bitową architekturę pamięci: wysłanie 00 wybrałoby adres 0, 01 wybrałoby adres 1, 10 wybrałoby adres 2, a 11 wybrałoby adres 3. Te 2 bity dają nam 2^2 bajtów pamięci RAM (4 bajty).

Jeśli weźmiesz 32-bitowy procesor i dodasz 32 dodatkowe przewody pomiędzy procesorem a kontrolerem pamięci, aby w magiczny sposób móc obsłużyć więcej pamięci, masz teraz “64-bitowy procesor”, który może wykonywać 32-bitowy lub 64-bitowy kod. Co to oznacza i jak to się dzieje? Cóż, weźmy nasz 2-bitowy procesor z wcześniejszej części tej odpowiedzi i dodajmy kolejny przewód, zamieniając go w 3-bitowy procesor, zabierając nam z 4 bajtów do 2^3 lub 8 bajtów pamięci RAM.

Istniejący “2-bajtowy” kod zostanie uruchomiony, ustawiając wartości ostatnich 2 przewodów tak, jak wskazano powyżej (00-11). Dodatkowe połączenie ustawimy domyślnie na zero, więc gdy kod 2-bajtowy będzie działał, to gdy wybierze 00, to faktycznie wybierze 000, a gdy wybierze 11, to faktycznie wybierze 011. Proste.

Teraz programista chce napisać “natywny” kod 3-bajtowy i pisze swój program tak, aby wykorzystać dodatkową przestrzeń adresową. Mówi procesorowi, że wie, co robi i że będzie ręcznie sterował nowymi, dodatkowymi przewodami. Jej oprogramowanie wie o dodatkowych przewodach i poprawnie wysyła 000-111, dając jej pełny dostęp do zakresu pamięci obsługiwanego przez nową architekturę procesora.

Ale to nie jest tak, że tak musi się stać. W rzeczywistości, zazwyczaj tak się nie dzieje. Kiedy 64-bitowe procesory zostały po raz pierwszy wprowadzone (a było ich wiele), wszystkie poszły z całkowicie nowymi architekturami / projektami. Nie dodawali po prostu dodatkowych 32 przewodów i nie mówili “proszę bardzo, to jest 64-bitowy procesor, którego można używać w trybie 32-bitowym lub 64-bitowym”, ale raczej mówili “to jest nasz nowy procesor i wymaga tylko programowania w tym zupełnie nowym języku maszynowym, zachowuje się w ten zupełnie nowy sposób, rozwiązuje mnóstwo różnych problemów o wiele bardziej elegancko niż stare 32-bitowe procesory x86/i386 i jest to natywna architektura 64-bitowa. Miłej zabawy.”

Taka była historia Intel Itanium, obecnie znanego jako “Itanic” z powodu tego, jak masowo zatonął. Miał być zwiastunem nowej 64-bitowej ery, i był czymś, co można było zobaczyć. Instrukcje o zmiennej długości, ogromne cache, 64-bitowa przestrzeń adresowa, tony rejestrów, super ekscytujące, super fajne i super trudne do przekonania wszystkich do przekompilowania lub przepisania 20 lat starszego kodu. Było to w czasach, gdy AMD i Intel faktycznie konkurowały, a AMD wpadło na genialny pomysł, by powiedzieć “zapomnijmy o tym całym ‘rozwiązywaniu wszystkich problemów świata’ i po prostu dodajmy 32 dodatkowe przewody do i386 i stwórzmy 32-bitowy, kompatybilny 64-bitowy procesor” i tak narodziła się architektura procesora x86.

W rzeczywistości, jeśli spojrzysz na nazwy jądra i źródła dla głównych systemów operacyjnych (Linux, Windows, BSD, itp.) znajdziesz je zaśmiecone odniesieniami do procesorów AMD64 i architektury AMD64. AMD wymyśliło zwycięską strategię, aby skłonić wszystkich do przejścia na świat 64-bitowy, zachowując jednocześnie kompatybilność z 32-bitowymi aplikacjami, w taki sposób, aby 32-bitowy system operacyjny mógł działać na 64-bitowym sprzęcie lub nawet 32-bitowe aplikacje mogły działać na 64-bitowym systemie operacyjnym na 64-bitowym sprzęcie. Intel podążył za tym szybko ze swoją architekturą “Intel EM64T” (która była w zasadzie identyczna z AMD64) i x86 wygrała, podczas gdy Itanic i inne jak MIPS64 i ALPHA64 nie były już widziane na rynku desktopów/serwerów.

tl;dr procesory amd64 aka x8664 są zaprojektowane tak, aby były kompatybilne zarówno z 32- jak i 64-bitowym jądrem i kodem, ale większość 64-bitowych procesorów jest zdecydowanie _nie kompatybilna wstecz w ten sam sposób. 32-bitowy procesor może uzyskać dostęp do co najwyżej 4GiB pamięci, podczas gdy 64-bitowy procesor może uzyskać dostęp do oszałamiającej 16 EiBs (16 × 1024^6 bajtów lub 4 billion razy tyle pamięci, co 4GiB).

-1
-1
-1
2009-07-20 09:45:06 +0000

Zarówno 32 jak i 64 bitowy system operacyjny może działać na 64 bitowym procesorze, ale 64 bitowy system operacyjny może wykorzystać pełną moc 64 bitowego procesora (większe rejestry, więcej instrukcji) - w skrócie może wykonać więcej pracy w tym samym czasie. Procesor 32-bitowy obsługuje tylko 32-bitowy system operacyjny Windows.