Может ли 32-битная ОС работать на 64-битном процессоре?

25

В чем разница между 32-битной и 64-битной ОС? Может ли 32-битная ОС работать на 64-битном процессоре?

случайный
источник
Если вы говорите о Windows (и тег Win32, кажется, указывает на это), то да, безусловно, - 64-битные Vista и Win7 поддерживают почти все 32-битные приложения на уровне совместимости - я еще не нашел ничего, что бы не очень хорошо работает на 64-битной Vista (кроме драйверов системного уровня)
marc_s
5
Похоже, вопрос заключается в том, можно ли установить Win Vista x86 на коробку с 64-разрядным процессором, а не в том, работают ли приложения x86 на Win Vista x64.
KTC

Ответы:

34

Ваш вопрос зависит от архитектуры. x64 по сути является расширением архитектуры x86. Он поддерживает 64-битное адресное пространство. Он предоставляет некоторые новые инструкции и новые регистры.

Вы можете запустить 32-разрядную Windows x86 на компьютере x64. Обратите внимание, что вы не можете сделать это на 64-битных системах Itanium.

Мехрдад Афшари
источник
16

64-битный процессор может работать как на 32, так и на 64 ОС (по крайней мере, на x64). 32-битный процессор может работать только 32-х.

Разница в основном в размере указателя / ссылки. На 64-битных машинах вы можете ссылаться на адрес в 64-битном диапазоне адресов (что дает вам 2 ^ 64 байта памяти). В 32-разрядной версии вы можете адресовать только 2 ^ 32 байта (= 4 ГБ). Теперь, если вы посмотрите на современные компьютеры, становится очевидным, почему мир движется к 64-битным: 32-битные не могут легко обращаться ко всей оперативной памяти.

На x64 (AMD / Intel) у вас есть дополнительные преимущества 64 бит. Процессор имеет больше регистров и, следовательно, позволяет более эффективный код.

На других архитектурах различия между 64 и 32 битами менее очевидны. Например, Nintendo 64 (помните, что?) Была 64-битной машиной, но большая часть ее кода была 32-битной. Таким образом, в этом случае 64-битная игра стала маркетинговым ходом.

terdon
источник
3

В настоящее время принятый ответ, как правило, правильный, но не совсем так. На самом деле не существует ни одной вещи, называемой «32-разрядный ЦП» или «64-разрядный ЦП» - это описание, которое относится только к одной небольшой части архитектуры ЦП. В частности, оно ссылается на число линий выбора адреса между процессором и памятью, то есть так называемое адресное пространство, доступное для операций памяти.

В былые времена, когда процессор, когда люди привыкли сидеть и плести (обматывать) провода между процессором и памятью, вам пришлось бы использовать либо 32, либо (теоретически, потому что его не было в то время) 64 провода между процессором и контроллером памяти, которые будут использоваться для указания того, к какому адресу памяти вы хотите обратиться. Например, скажем, у нас есть 2-битная архитектура памяти: отправка 00 выберет адрес 0, 01 выберет адрес 1, 10 выберет адрес 2, а 11 выберет адрес 3. Этот 2-бит дает нам 2 ^ 2 байта оперативной памяти (4 байта).

Если вы берете 32-разрядный процессор и добавляете еще 32 провода между процессором и контроллером памяти, чтобы волшебным образом поддерживать больше памяти, у вас теперь есть «64-разрядный процессор», который может работать 32-разрядный код или 64-битный код. Что это значит и как это происходит? Что ж, давайте возьмем наш 2-битный ЦП из предыдущей части этого ответа и добавим еще один провод, превратив его в 3-битный ЦП, перенеся нас с 4 байтов на 2 ^ 3 или 8 байтов оперативной памяти.

Будет запущен существующий «2-байтовый» код, который установит значения последних двух проводов, как указано выше (00-11). По умолчанию мы подключим дополнительное соединение к нулю, поэтому фактически, когда запускается 2-байтовый код, когда он выбирает 00, он фактически выбирает 000, а когда он выбирает 11, он фактически выбирает 011. Легко.

Теперь программист хочет написать «родной» 3-байтовый код и пишет свое программное обеспечение, чтобы воспользоваться дополнительным адресным пространством. Она сообщает процессору, что знает, что делает, и что она возьмет на себя ручное управление новыми, дополнительными проводами. Ее программное обеспечение знает о дополнительных проводах и правильно отправляет 000-111, предоставляя ей полный доступ к диапазону памяти, поддерживаемому этой новой архитектурой процессора.

Но так не должно быть. На самом деле, обычно это не так. Когда впервые были представлены 64-битные процессоры (а их было много), все они использовали совершенно новые архитектуры / конструкции. Они не просто подключили дополнительные 32 провода и сказали: «Вот, пожалуйста, это 64-разрядный процессор, который вы можете использовать в 32-разрядном или 64-разрядном режиме», а скорее сказали: «Это наш новый процессор и он берет только программирование на этом совершенно новом машинном языке, ведет себя совершенно по-новому, решает множество других проблем гораздо более элегантно, чем старые 32-битные процессоры x86 / i386, и это родная 64-битная архитектура. «.

Это была история Intel Itanium, теперь известной как «Итаник» из-за того, как сильно она затонула. Он должен был предвещать в новую 64-битную эпоху, и это было что-то, чтобы созерцать. Инструкции с переменной длиной, огромные кеши, 64-битное адресное пространство, тонны регистров, супер захватывающие, супер крутые и супер трудные, чтобы убедить всех перекомпилировать или переписать 20-летний устаревший код. Это было еще тогда, когда AMD и Intel фактически конкурировали, и у AMD была блестящая идея сказать: «Давайте забудем все это, решим все мировые проблемы» и просто добавим еще 32 провода к i386 и сделаем 32-битную совместимую 64-разрядную. bit CPU "и родилась архитектура процессора x86_64.

Фактически, если вы посмотрите на имена и источники ядра для основных операционных систем (Linux, Windows, BSD и т. Д.), Вы обнаружите, что они завалены ссылками на процессоры AMD64 и архитектуру AMD64. AMD разработала выигрышную стратегию, позволяющую всем перейти на 64-битный мир, сохранив совместимость с 32-битными приложениями, таким образом, чтобы 32-битная ОС могла работать на 64-битном оборудовании или даже 32-битных приложениях. может работать на 64-битной ОС на 64-битном оборудовании. Intel последовала за пакетом раньше, чем позже, с архитектурой Intel EM64T (которая была в основном идентична AMD64), и x86_64 победил, в то время как Itanic и другие, такие как MIPS64 и ALPHA64, больше не были замечены на рынке настольных ПК / серверов.

tl; dr amd64 aka x86_64 Процессоры совместимы как с 32-, так и с 64-битным ядром и кодом, но большинство 64-битных процессоров явно не имеют обратной совместимости одинаково. 32-разрядный ЦП может получить доступ максимум к 4 ГБ памяти, а 64-разрядный ЦП может получить доступ к потрясающим 16 EiB (16 × 1024 ^ 6 байт, или в 4 миллиарда раз больше памяти, чем 4 ГБ).

Махмуд Аль-Кудси
источник
1
У вас есть несколько фактических ошибок: 1) Itanium не вводил инструкции переменной длины (они были у каждого x86); он добавил очень длинные слова, которые могли одновременно работать на нескольких 64-битных количествах. 2) x86_64 не просто шлепнул по нескольким адресным строкам; он также добавил кучу дополнительных регистров и расширил все регистры (и ALU, которые на них работают) с 32 до 64 бит. Сравните это с 8086/8088, который добавил еще 4 адресные строки и регистры селектора сегментов, но сохранил их все в 16 битах, как 8080 до него.
psusi
-1

И 32-, и 64-разрядная ОС могут работать на 64-разрядном процессоре, но 64-разрядная ОС может использовать полную мощность 64-разрядного процессора (большие регистры, больше инструкций) - короче говоря, она может выполнять больше работы за одно и то же время. 32-разрядный процессор поддерживает только 32-разрядную ОС Windows.

CsTamas
источник
3
Как правило, это неверно, хотя конкретно для x64.
ChrisInEdmonton
1
32-разрядный процессор будет работать под управлением любой операционной системы, предназначенной для работы на такой процессорной архитектуре.
Waxhead
32-битный x86 ОС , очевидно , не может работать на ARM64, поэтому , 32 and 64 bit OS can run on a 64 bit processorкак правило , не правильно
phuclv
@ Phúc Там могут быть 64-битные процессоры, которые не поддерживают их 32-битные близнецы. Однако вы используете ложную логику в своем аргументе. SunOS 4.4.1 на 32-битном MicroSparc также не будет работать на ARM32. Использование вашей логики означает, что 32-битная ОС может работать на 32-битном процессоре. Если я игнорирую здравый смысл, как вы, я могу утверждать, что 32-разрядная ОС ARM работает на Intel i386 / x64, поскольку разработчики Android запускают образы Android ARM на своих машинах Wintel. Конечно, ОС предназначена для правильного семейства процессоров, и, конечно, ОС работает на физическом оборудовании, а не на эмуляции (достаточно сказано)
Tino