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

Выход из uname :

 root@debian:~ # uname -a Linux 5asnb 2.6.32-5-amd64 #1 SMP Mon Jun 13 05:49:32 UTC 2011 x86_64 GNU/Linux 

Однако исполняемый файл /sbin/init отображается как 32-разрядный:

 root@debian:~ # file /sbin/init /sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped 

Другие аспекты системы, похоже, тоже противоречат:

 root@debian:~ # echo $HOSTTYPE i486 root@debian:~ # getconf LONG_BIT 32 

  • Можно ли покрасить STDIN перед тем, как записать его в файл?
  • Есть ли способ раскрасить вывод на поток из программы
  • Изменение цветового баланса на графике Intel
  • есть ли способ установить раскраску для вкладки cd?
  • Калибр в Debian 7.3 В KDE нет браузера обложек?
  • Настройка цвета tmux hightlight
  • Никакой синтаксической раскраски в vim для меня, но нормально для моих учеников
  • цветной bash не работает как пользователь root
  • 2 Solutions collect form web for “64-битное ядро, но все 32-разрядные исполняемые процессы ELF, как это?”

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

    Все процессоры, которые поддерживают набор инструкций 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 может установить «личность» системного вызова процесса (с personality ). Вы можете запустить подпроцесс в другой личности с setarch команды 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-разрядных программ. Более точный тест состоит в том, чтобы скомпилировать a и запустить программу, которая печатает sizeof(void*) или sizeof(size_t) – вызов getconf может дать только информацию о том, что getconf считает компилятором по умолчанию.

    Interesting Posts

    Двойные мониторы на двух видеокартах на Ubuntu

    Как использовать «tar -c» без каких-либо дополнительных аргументов?

    Миграция неисправного жесткого диска – предотвращение fsck

    Может ли кто-нибудь объяснить вывод mount?

    Странные ошибки при использовании ffmpeg в цикле

    doublecmd, начинающийся очень медленно

    Как создать моментальный снимок в btrfs, а затем откат к нему после некоторой работы?

    Доступ к корневой файловой системе и подкаталогам из U-boot?

    Как я могу войти в визуальный режим * после * (или: справа от) курсора

    Возможно ли «частично» подключиться к VPN

    В чем смысл использования нечислового компонента пакета для версии?

    Как изменить текущую позицию копии или пропустить область в ddrescue

    Firefox заменяет неправильный запасной шрифт с нормальным весом

    Как отключить «Не указан?» На экране входа в систему?

    eCryptFS проблема автомонтирования

    Linux и Unix - лучшая ОС в мире.