64-разрядное ядро, но весь 32-разрядный рабочий исполняемый файл ELF обрабатывает, как это?

Если Вы не должны использовать опцию цикла смонтировать регулярный файл, это потому что mount обнаруживает это и активирует его для Вас автоматически. Вы раньше указывали его вручную.

9
04.06.2014, 05:51
2 ответа

64-битное ядро ​​можно установить на 32-битный Debian. Вы можете увидеть, что ядро ​​amd64 доступно для 32-битного Debian на странице пакета . Это можно использовать в качестве альтернативы использованию ядра с поддержкой PAE для поддержки более 4G общей оперативной памяти. Обратите внимание, что 32-битные двоичные файлы по-прежнему не могут получить доступ к более чем примерно 3 Г ОЗУ на процесс.

13
27.01.2020, 20:04

Все процессоры, поддерживающие набор инструкций x64 (также известный как x86_64 или amd64), также поддерживают x86 набор команд (также известный как i386 или i686, которые, строго говоря, являются конкретными версиями x86). То же самое касается ARM A64 (новый 64-битный набор команд, появляющийся в ARMv8) и A32 (название «классического» 32-битного набора команд), для SPARC64 и SPARC , и я полагаю, для MIPS64 и MIPS . Таким образом, во всех этих архитектурных семействах, если процессор может выполнять 64-битный код, он также может выполнять 32-битный код.

Ядро Linux поддерживает выполнение 32-битного пользовательского кода с 64-битным ядром (я думаю, для всех архитектурных семейств, упомянутых выше). Ядро должно быть однородным (все 64-битное или все 32-битное), и каждый процесс должен быть однородным, но вы можете иметь смесь 32-битных и 64-битных процессов в 64-битном ядре. Обратное невозможно: с 32-битным ядром нельзя запускать 64-битные процессы.

Это выбор дизайна в Linux, мотивированный желанием запускать существующие 32-разрядные двоичные файлы на 64-разрядных установках.Другие варианты Unix сделали другой выбор: Solaris может запускать 64-битные программы на 32-битном ядре, а также наоборот, в то время как OpenBSD не может запускать 32-битные программы на 64-битном ядре.

Вы можете получить информацию о ЦП в / proc / cpuinfo . Если ваш процессор x86 имеет флаг lm , это 64-разрядный процессор.

По умолчанию uname -m или arch показывает архитектуру, для которой было скомпилировано ядро. Linux может установить «индивидуальность» процесса (с помощью системного вызова индивидуальность ). Вы можете запустить подпроцесс в другой личности с помощью команды setarch ; setarch i686 someprogram или linux32 someprogram запускает указанную программу в среде, где uname -m возвращает i686 , а setarch amd64 someprogram или linux64 someprogram запускает указанную программу в среде, где uname -m возвращает amd64 .

file / sbin / init сообщает вам, для какой архитектуры скомпилирована программа init . Хотя в установке можно смешивать 32-битные и 64-битные исполняемые файлы, обычно все основные программы ОС принадлежат одной и той же архитектуре, потому что ими намного проще управлять.

$ HOSTYPE - это переменная bash, которая сообщает вам, для какой архитектуры была скомпилирована программа bash .

getconf LONG_BIT позволяет узнать, установлен ли компилятор C по умолчанию для компиляции 32-битных или 64-битных программ.Более точный тест - это скомпилировать и запустить программу, которая печатает sizeof (void *) или sizeof (size_t) - вызов getconf может дать информацию только о что getconf считает компилятором по умолчанию.

15
27.01.2020, 20:04

Теги

Похожие вопросы