Может ли 32-битная ОС работать в 64-битном процессоре?
В чем разница между 32-битной и 64-битной ОС? Может ли 32-битная ОС работать в 64-битном процессоре?
В чем разница между 32-битной и 64-битной ОС? Может ли 32-битная ОС работать в 64-битном процессоре?
Ваш вопрос касается архитектуры. x64 по сути является расширением архитектуры x86. Она поддерживает 64-битное адресное пространство. Оно предоставляет некоторые новые инструкции и новые регистры.
Вы можете запускать 32-битные x86 Windows на x64 машине. Обратите внимание, что на 64-битных системах Itanium это невозможно.
Принятый в настоящее время ответ, как правило, верен, но не совсем верен. На самом деле нет ни одной вещи, которая бы называлась “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-байтовый”, устанавливающий значения последних 2-х проводов, как указано выше (00-11). По умолчанию мы установим дополнительное соединение на ноль, так что фактически при запуске 2-байтового кода, когда он выберет 00, он фактически выберет 000, а когда он выберет 11, он фактически выберет 011. Легко.
Теперь программист хочет написать “родной” 3-байтовый код и пишет свое программное обеспечение, чтобы воспользоваться дополнительным адресным пространством. Она говорит процессору, что знает, что делает, и что она возьмет на себя ручное управление новыми, дополнительными проводами. Ее программное обеспечение знает о дополнительных проводах и правильно посылает 000-111, давая ей полный доступ к диапазону памяти, поддерживаемому этой новой архитектурой ЦП.
Но все должно быть не так. На самом деле, обычно not так и происходит. Когда 64-битные процессоры были впервые представлены (а их было много), все они ушли с совершенно новыми архитектурами/дизайнами. Они не просто взялись за дополнительные 32 провода и сказали: “Вот, это 64-битный процессор, который можно использовать в 32-битном или 64-битном режиме”, а скорее сказали: “Это наш новый процессор, и он требует программирования только на этом совершенно новом машинном языке, ведет себя совершенно по-новому, решает миллиард различных проблем гораздо элегантнее, чем старые 32-битные процессоры x86/i386, и это - родная 64-битная архитектура”. Развлекайтесь".
Такова была история Intel Itanium, теперь известного как “Itanic” из-за того, как он массово затонул. Это должно было стать предвестником новой 64-битной эры, и это было нечто, на что стоит обратить внимание. Инструкции переменной длины, огромные кэши, 64-битное адресное пространство, тонны регистров, супер захватывающий, супер крутой, и супер трудно убедить всех перекомпилировать или переписать 20 лет старого кода. Это было в то время, когда AMD и Intel действительно соперничали, и у AMD возникла блестящая идея: “Давайте забудем обо всем этом бизнесе ‘решать все мировые проблемы’ и просто добавим еще 32 провода к i386 и сделаем 32-битный совместимый 64-битный процессор”, и родилась архитектура процессора 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-битных ЦПУ однозначно not обратно совместимы. 32-битный процессор может получить доступ максимум к 4Гб памяти, в то время как 64-битный процессор может получить доступ к потрясающим 16 EiB (16 × 1024^6 байт, или 4 billion раз больше памяти, чем 4Гб).
На 64-битном процессоре может работать как 32-, так и 64-битная ОС, но 64-битная ОС может использовать всю мощь 64-битного процессора (большие регистры, больше инструкций) - короче говоря, она может выполнять больше работы за одно и то же время. 32-битный процессор поддерживает только 32-битную Windows OS.