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

25

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

losowy
źródło
Jeśli mówisz o systemie Windows (a znacznik Win32 wydaje się to wskazywać), to tak, absolutnie - Vista i Win7 64-bit obsługują prawie wszystkie 32-bitowe aplikacje za pośrednictwem warstwy zgodności - jeszcze nie znalazłem nic, co by nie nie działa dobrze na 64-bitowym systemie Vista (z wyjątkiem sterowników na poziomie systemu)
marc_s
5
Pytanie wydaje się bardziej, czy można zainstalować powiedzmy Windows Vista x86 na urządzeniu z 64-bitowym procesorem, niż czy aplikacje x86 działają na powiedzmy Windows Vista x64.
KTC

Odpowiedzi:

34

Twoje pytanie dotyczy konkretnej architektury. x64 jest zasadniczo rozszerzeniem architektury x86. Obsługuje 64-bitową przestrzeń adresową. Zawiera nowe instrukcje i nowe rejestry.

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

Mehrdad Afshari
źródło
16

64-bitowy procesor może obsługiwać zarówno system 32, jak i 64 (przynajmniej x64). Procesor 32-bitowy może działać tylko 32 natywnie.

Różnica dotyczy głównie wielkości wskaźnika / odniesienia. Na komputerach 64-bitowych można odwoływać się do adresu w 64-bitowym zakresie adresów (co daje 2 ^ 64 bajty pamięci). W wersji 32-bitowej można adresować tylko 2 ^ 32 bajty (= 4 GB). Teraz, gdy spojrzysz na obecne komputery, oczywiste jest, dlaczego świat przechodzi na wersję 64-bitową: wersja 32-bitowa nie może już łatwo zająć się całą pamięcią RAM.

Na x64 (AMD / Intel) masz dodatkowe zalety 64 bitów. Procesor ma więcej rejestrów, a zatem pozwala na bardziej wydajny kod.

W innych architekturach różnice między 64 a 32 bitami są mniej oczywiste. Na przykład Nintendo 64 (pamiętasz?) Była maszyną 64-bitową, ale większość jej kodu była 32-bitowa. Tak więc w tym przypadku 64-bit służył bardziej jako sztuczka marketingowa.

terdon
źródło
3

Akceptowana obecnie odpowiedź jest ogólnie poprawna, ale nie jest konkretna. 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ę do liczby linii wyboru adresu między CPU a pamięcią, tj. tak zwaną przestrzenią adresową dostępną dla operacji pamięci.

W dawnych czasach, kiedy procesor, kiedy ludzie siadali i tkali (owijali) przewody między procesorem a pamięcią, musiałbyś użyć albo 32, albo (teoretycznie, ponieważ wtedy nie istniał) 64 przewody między procesorem a kontrolerem pamięci, które zostaną użyte do określenia, do którego adresu pamięci chcesz uzyskać dostęp. 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. Ten 2-bit daje nam 2 ^ 2 bajty pamięci RAM (4 bajty).

Jeśli weźmiesz 32-bitowy procesor i dodasz 32 dodatkowe przewody między procesorem a kontrolerem pamięci, aby magicznie móc obsłużyć więcej pamięci, masz teraz „64-bitowy procesor”, który może działać w wersji 32-bitowej kod lub kod 64-bitowy. Co to znaczy i jak to się dzieje? Cóż, weźmy nasz 2-bitowy procesor z wcześniejszej części tej odpowiedzi i dodajmy kolejny drut, zamieniając go w 3-bitowy procesor, zabierając nas z 4 bajtów do 2 ^ 3 lub 8 bajtów pamięci RAM.

Uruchomiony zostanie istniejący kod „2-bajtowy”, ustawiając wartości ostatnich 2 przewodów, jak wskazano powyżej (00-11). Dodatkowe połączenie zostanie domyślnie ustawione na zero, więc w rzeczywistości, gdy uruchomi się 2-bajtowy kod, kiedy wybierze 00, faktycznie wybierze 000, a kiedy wybierze 11, faktycznie wybierze 011. Łatwo.

Teraz programista chce napisać „natywny” 3-bajtowy kod i pisze swoje oprogramowanie, aby skorzystać z dodatkowej przestrzeni adresowej. Mówi procesorowi, że wie, co robi i że przejmie kontrolę nad nowymi, dodatkowymi przewodami. Jej oprogramowanie wie o dodatkowych przewodach i prawidłowo wysyła numer 000-111, zapewniając pełny dostęp do zakresu pamięci obsługiwanej przez tę nową architekturę procesora.

Ale to nie tak musi się zdarzyć. W rzeczywistości zwykle tak się nie dzieje. Kiedy po raz pierwszy wprowadzono 64-bitowe procesory (a było ich wiele), wszystkie miały zupełnie nowe architektury / projekty. Nie tylko przyczepili się do dodatkowych 32 przewodów i powiedzieli „proszę bardzo, jest to 64-bitowy procesor, którego można używać w trybie 32-bitowym lub 64-bitowym”, ale powiedzieli „To jest nasz nowy procesor i wymaga programowania tylko w tym całkowicie nowym języku maszynowym, zachowuje się w zupełnie nowy sposób, rozwiązuje wiele różnych problemów znacznie bardziej elegancko niż stare 32-bitowe procesory x86 / i386, i jest to natywna architektura 64-bitowa. . ”

Taka była historia Intel Itanium, obecnie znanego jako „Itanic” z powodu tego, jak masowo zatonął. Miał zwiastować nową erę 64-bitową i było to coś, co warto zobaczyć. Instrukcje o zmiennej długości, ogromne pamięci podręczne, 64-bitowa przestrzeń adresowa, mnóstwo rejestrów, super ekscytujące, super fajne i bardzo trudne, aby przekonać wszystkich do ponownej kompilacji lub przepisania 20 lat starszego kodu. To było w czasach, gdy AMD i Intel faktycznie konkurowały, a AMD wpadło na genialny pomysł powiedzenia „zapomnijmy o tym wszystkim” rozwiązywaniu wszystkich problemów na świecie ”i po prostu dodajmy 32 dodatkowe przewody do i386 i stworzymy 32-bit kompatybilny 64- bit CPU ”i narodziła się architektura procesora x86_64.

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. Firma AMD opracowała zwycięską strategię, aby umożliwić wszystkim przejście do 64-bitowego świata przy jednoczesnym zachowaniu zgodności z aplikacjami 32-bitowymi, tak aby 32-bitowy system operacyjny mógł działać na 64-bitowym sprzęcie lub nawet aplikacjach 32-bitowych może działać w 64-bitowym systemie operacyjnym na 64-bitowym sprzęcie. Intel podążył za pakietem raczej wcześniej niż później dzięki swojej architekturze „Intel EM64T” (która była w zasadzie identyczna z AMD64) i x86_64 wygrał, podczas gdy Itanic i inni, tacy jak MIPS64 i ALPHA64, nie byli już widziani na rynku komputerów stacjonarnych / serwerów.

tl; dr amd64 aka x86_64 Procesory 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 zdecydowanie nie jest kompatybilna wstecz w ten sam sposób. 32-bitowy procesor może uzyskać dostęp do maksymalnie 4 Gb pamięci, a 64-bitowy procesor może uzyskać dostęp do oszałamiających 16 EiB (16 × 1024 ^ 6 bajtów lub 4 miliardów razy więcej pamięci niż 4 Gb).

Mahmoud Al-Qudsi
źródło
1
Wystąpiło kilka błędów rzeczowych: 1) itanium nie wprowadził instrukcji o zmiennej długości (każdy x86 miał je); dodano bardzo długie instrukcje słowne, które mogły jednocześnie działać na wielu 64-bitowych wielkościach. 2) x86_64 nie tylko uderzył w więcej linii adresowych; dodał także kilka dodatkowych rejestrów i rozszerzył wszystkie rejestry (i działające na nich ALU) z 32 do 64 bitów. Porównaj to z 8086/8088, który dodał 4 dodatkowe linie adresowe i rejestry selektora segmentów, ale zachował je wszystkie na 16 bitach, podobnie jak wcześniej 8080.
psusi
-1

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

CsTamas
źródło
3
Jest to ogólnie niepoprawne, ale poprawne w szczególności dla x64.
ChrisInEdmonton
1
32-bitowy procesor będzie działał na każdym systemie operacyjnym zaprojektowanym do działania na takiej architekturze procesora.
Waxhead
32-bitowy system operacyjny x86 oczywiście nie może działać na ARM64, więc 32 and 64 bit OS can run on a 64 bit processorogólnie nie jest poprawny
phuclv
@ Phúc Mogą istnieć 64-bitowe procesory, które nie obsługują ich 32-bitowego bliźniaka. Jednak używasz fałszywej logiki w swoim argumencie. SunOS 4.4.1 na 32-bitowym MicroSparc też nie będzie działał na ARM32. Używając logiki, generalnie nie jest poprawne, że 32-bitowy system operacyjny może działać na 32-bitowym procesorze. Jeśli zignoruję zdrowy rozsądek, tak jak ty, mogę argumentować, że 32-bitowy ARM OS działa na procesorach Intel i386 / x64, ponieważ programiści Androida uruchamiają obrazy Android ARM na swoich komputerach Wintel. Oczywiście system operacyjny jest dla właściwej rodziny procesorów i oczywiście system operacyjny działa na sprzęcie fizycznym, a nie na emulacji (wystarczy powiedzieć, nie ma)
Tino