하드웨어와 운영 체제의 비트수를 어떻게 확인합니까?

하드웨어와 운영 체제의 비트수를 어떻게 확인합니까?

uname내 RHEL 5.4 시스템에서 -a의 출력은 다음과 같습니다.

Linux <machine name> 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

이는 하드웨어가 64비트(아마도 첫 번째 x86_64)이고 OS도 64비트(마지막 x86_64)라는 의미입니까?

또한 이 모든 x86_64 인스턴스는 무엇을 위한 것입니까?
32비트 운영 체제에 64비트 가상 머신을 설치할 수 있습니까? 아니면 그 반대로도 가능합니까?

답변1

하드웨어, 커널 및 사용자 공간 프로그램은 단어 크기가 다를 수 있습니다.

  • 다음과 같은 경우 확인할 수 있습니다.CPUflags파일의 행을 검사하여 64비트, 32비트 또는 둘 다 지원되는지 여부를 확인할 수 있습니다 /proc/cpuinfo. 아키텍처 제품군에서 가능한 징후를 이해해야 합니다. 예를 들어, i386/amd64 플랫폼에서 이 lm플래그는 amd64를 지원하는 CPU를 식별합니다(이 플래그가 없는 CPU는 i386 전용입니다).

      grep -q '^flags *:.*\blm\b' /proc/cpuinfo    # Assuming a PC
    
  • 아키텍처를 쿼리하여 커널이 32비트인지 64비트인지 확인할 수 있습니다 uname -m. 예를 들어 i[3456]8632비트인데 64비트 x86_64입니다 . 일부 아키텍처에서는 64비트 커널이 32비트 사용자 모드 프로그램을 실행할 수 있으므로 uname -m64비트 커널이 표시되더라도 64비트 라이브러리를 사용할 수 있다는 보장은 없습니다.

      [ "$(uname -m)" = "x86_64" ]    # Assuming a PC
    
  • 쿼리를 통해 사용자 공간에서 사용 가능한 항목을 확인할 수 있습니다.최하위 비트지원과lsb_release주문하다. 보다 정확하게는 지원되는 LSB 기능의 구분된 목록을 lsb_release -s인쇄합니다 . :모든 특징에는 형태가 있습니다. 예를 들어, ix86 C 라이브러리의 가용성은 으로 표시되지만 amd64용 에뮬레이션 라이브러리는 로 표시됩니다. 그러나 모든 배포판이 사용 가능한 모든 LSB 모듈을 선언하는 것은 아니므로 이 방법으로 감지할 수 있는 것보다 더 많은 LSB 모듈이 있을 수 있습니다.module-version-architecturecore-2.0-ia32core-2.0-amd64

  • 와 같은 명령을 사용하기 위해 시스템의 아키텍처 프로그램이 어떤 아키텍처로 구축되었는지 확인할 수 있습니다 file /bin/ls. 혼합 시스템도 가능합니다. ls시스템에 64비트 프로그램이더라도 32비트 프로그램을 실행하기 위한 라이브러리가 설치되어 있을 수 있으며 그 반대의 경우도 있습니다(덜 일반적임).

  • sizeof(void*)또는 (C 컴파일러를 사용할 수 있다고 가정)을 인쇄하는 5줄 C 프로그램을 컴파일하여 개발에 선호되는 단어 크기를 확인할 수 있습니다 sizeof(size_t). 명령을 실행하면 약간 덜 안정적인 방법으로 동일한 정보를 얻을 수 있습니다 getconf LONG_BIT.

      #include <stdio.h>
      int main() {
          printf("%d\n", (int)sizeof(void*));
          return 0;
      }
    

가상 머신의 경우 32비트 시스템에서 64비트 가상 머신을 실행할 수 있는지 또는 그 반대로 실행할 수 있는지 여부는 가상 머신 기술에 따라 다릅니다. 특히 참조 32비트 Linux에 64비트 Linux 가상 머신을 설치하는 방법은 무엇입니까?

1 "워드 길이"는 "비트 수"의 일반적인 이름입니다. ² 누군가가 다른 대상 아키텍처를 사용하여 대체 C 컴파일러를 설치했지만 시스템 기본값을 그대로 두는 경우에는 신뢰할 수 없을 수
있습니다 .getconf

답변2

알고 싶은 uname여러 x86_64 발생 :

x86_64 x86_64 x86_64

다음은 세 가지 값입니다."알 수 없는 경우 -p 및 -i를 생략합니다.")

    -m, --machine 
          print the machine hardware name
    -p, --processor
          print the processor type or "unknown"
    -i, --hardware-platform
          print the hardware platform or "unknown"

에 속하지 않으므로 -p주의 해 주십시오-iPOSIX 표준. 이 값은 unknown데비안에 있으므로 uname은 x86_64를 한 번만 인쇄합니다. Red Hat/CentOS는 이 값을 정의합니다.

또한 읽어보세요:Linux는 어떻게 uname -m정보를 얻나요?그리고uname -p와 uname -m 및 Arch 출력이 서로 다른 아키텍처를 출력하는 이유는 무엇입니까?.

답변3

구경하다man uname.

64비트 시스템에서 32비트 프로그램을 컴파일하고 실행할 수 있지만(특별한 설정이 필요함) 32비트 시스템에서 64비트 바이너리를 실행할 수는 없습니다. 많은 가상 머신에도 동일하게 적용됩니다.하지만 전부는 아니다* . 따라서 64비트 커널이 있는 경우 하드웨어는 32비트일 수 없습니다.

바이너리의 비트수를 테스트하려면 를 실행하세요 file /path/to/the/program.

* 이는 특정 가상 머신이 실행되는 수준에 따라 다릅니다. 호스트 CPU에서 바이너리 코드를 (거의) 직접 실행하는 가상 머신은 32비트 호스트에서 64비트 코드를 실행할 수 없습니다. 그것들시뮬레이션일부 CPU는 이를 수행할 수 있지만 에뮬레이션 수준으로 인해 효율성이 떨어집니다.

관련 정보