x64 명령어 세트 (x86_64 또는 amd64라고도 함) 를 지원하는 모든 프로세서 는 x86 명령어 세트 (x386의 특정 버전을 엄격하게 말하고있는 i386 또는 i686이라고도 함 )도 지원합니다 . 동일은 간다 ARM 에 대한 A64 (새로운 64 비트 명령어 ARMv8에 나타나는 설정)과 A32 (이하 "고전"32 비트 명령어 세트의 이름) SPARC64 및 SPARC , 나는 믿지 MIPS64 과 MIPS . 따라서 이러한 모든 아키텍처 제품군에서 프로세서가 64 비트 코드를 실행할 수 있으면 32 비트 코드도 실행할 수 있습니다.
Linux 커널은 64 비트 커널로 32 비트 사용자 랜드 코드 실행을 지원합니다 (위에서 언급 한 모든 아키텍처 제품군에서 생각합니다). 커널은 동종 (모든 64 비트 또는 모든 32 비트)이어야하고 각 프로세스는 동종이어야하지만 64 비트 커널에서 32 비트와 64 비트 프로세스를 혼합하여 사용할 수 있습니다. 반대는 불가능합니다. 32 비트 커널에서는 64 비트 프로세스를 실행할 수 없습니다.
이는 64 비트 설치에서 기존 32 비트 바이너리를 실행하려는 동기로 인해 Linux에서 설계 선택 사항입니다. 다른 유닉스 변종들도 다른 선택을했다 : 솔라리스는 32 비트 커널에서 64 비트 프로그램을 실행할 수 있고 다른 방법으로는 OpenBSD가 64 비트 커널에서 32 비트 프로그램을 실행할 수 없다.
에서 CPU 에 대한 정보를 얻을 수 있습니다 /proc/cpuinfo
. x86 CPU에 lm
플래그 가 있으면 64 비트 CPU입니다.
기본적으로 uname -m
또는 arch
커널이 컴파일 된 아키텍처를 보여줍니다. Linux는 프로세스의 "성격"을 personality
시스템 호출로 설정할 수 있습니다 . setarch
명령을 사용하여 다른 성격으로 서브 프로세스를 실행할 수 있습니다 . setarch i686 someprogram
또는 linux32 someprogram
환경에서 지정된 프로그램을 실행하는 경우 uname -m
반환 i686
동안 setarch amd64 someprogram
이나 linux64 someprogram
하는 곳에서 특정 프로그램이 실행 uname -m
반환 amd64
.
file /sbin/init
init
프로그램이 컴파일 된 아키텍처를 알려줍니다 . 설치시 32 비트 및 64 비트 실행 파일을 혼합 할 수 있지만 일반적으로 모든 핵심 OS 프로그램은 관리하기가 훨씬 쉽기 때문에 동일한 아키텍처에서 제공됩니다.
$HOSTYPE
bash 변수이며 bash
프로그램이 컴파일 된 아키텍처를 알려줍니다 .
getconf LONG_BIT
기본 C 컴파일러가 32 비트 또는 64 비트 프로그램을 컴파일하도록 설정되어 있는지 알려줍니다. 보다 정확한 테스트는 a를 인쇄하고 인쇄하는 프로그램을 실행하는 것입니다. sizeof(void*)
또는 sizeof(size_t)
호출 getconf
은 getconf
기본 컴파일러라고 생각 하는 것에 대한 정보 만 제공 할 수 있습니다 .