궁금해. 64비트 프로세서가 탑재된 32비트 운영 체제에 64비트 프로그램을 설치할 수 있습니까?
저는 Raspberry Pi 3에서 Linux를 실행하고 있으며 최신 버전의 MongoDB를 설치하려고 합니다.
armv7l GNU/Linux
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
답변1
64비트 프로세서가 탑재된 32비트 운영 체제에 64비트 프로그램을 설치할 수 있습니까?
원칙적으로는 가능하지만 프로세서와 운영 체제가 이를 지원해야 합니다.
ARMv8에서 32비트(Aarch32) 커널은 64비트(Aarch64) 프로세스를 실행할 수 없습니다. 이는 프로세서 제한 사항입니다.
이러한 제한이 없는 다른 프로세서도 있습니다. 예를 들어 x86_64 프로세서의 x86_32 코어 위에서 x86_64 프로세스를 실행할 수 있지만 이를 지원하는 코어는 거의 없습니다. 아마도 제한된 유용성 때문일 것입니다(대부분 RAM 비트를 절약할 수 있습니다). 하나의 커널에서(32비트로 만들기) Linux에서는 지원되지 않지만 Solaris에서는 지원됩니다.
64비트 운영 체제를 실행하는 경우 기존 32비트 운영 체제를 유지할 수 있습니다.핵심. Aarch64 Linux 커널은 Aarch32 프로세스를 실행할 수 있습니다. Raspbian은 기본적으로 지원되지 않으므로 32비트 운영 체제와 64비트 운영 체제를 모두 유지해야 합니다. 이들 중 하나를 기본 운영 체제로 사용할 수 있습니다(예:내부에및 시스템 서비스), 다른 하나는 chroot를 사용하여 특정 프로그램을 실행합니다. 바라보다64비트 Debian/Ubuntu에서 32비트 프로그램을 어떻게 실행하나요?실용적인 접근 방식.
64비트 프로그램에 필요한 모든 라이브러리를 설치해야 합니다. 특정 프로세스는 완전히 32비트이거나 완전히 64비트여야 하므로 64비트 실행 파일에서 32비트 라이브러리를 사용할 수 없습니다.
32비트 시스템을 유지해야 할 타당한 이유가 없는 한, 64비트 실행 파일을 실행해야 하는 경우 64비트 시스템을 설치하는 것이 더 쉽습니다.
32비트 프로그램이 할 수 없지만 64비트 프로그램이 할 수 있는 유일한 작업은 3GB 이상의 가상 메모리를 처리하는 것인데, 이는 1GB RAM이 있는 시스템에서는 유용성이 제한됩니다. 추가로 더 큰 레지스터를 사용하면 성능상의 이점을 얻을 수 있지만 추가 메모리 액세스로 인해 성능이 저하될 수도 있습니다.
답변2
일부 아키텍처에서는 그렇습니다. 그러나 ARM이나 x86에는 해당되지 않습니다.
QEMU를 사용하여 64비트 시스템을 에뮬레이트할 수 있지만 그렇게 하고 싶지는 않습니다.
답변3
64비트 바이너리를 실행할 수 있도록 커널을 64비트 커널로만 업그레이드하세요. 기본적으로 전체 배포판은 32비트 호환 모드에서 실행되는 반면 유일한 64비트 mongodb는 일반 모드로 실행됩니다.
그러나 그 가격만큼 가치가 없습니다. mongodb를 32비트로 전환하는 것이 좋습니다. 그러나 이 경우 전체 콘텐츠를 가상 메모리에 직접 매핑하므로 데이터베이스가 2GB보다 클 수 없다는 제한이 있습니다. 데이터베이스가 더 큰 경우 커널 업그레이드만 남습니다. (확장을 도와주신 @duskwuff에게 감사드립니다!)
그런데 데이터베이스에 큰 로드가 필요하지 않거나 그 전에 일부 캐싱 솔루션(예: 다른 32비트 mongo)을 사용할 수 있는 경우 CPU 에뮬레이션이 작동할 수 있습니다. 이렇게 하려면 "qemu qemu-system-x86_64" 인터넷 검색을 시작하세요. 이러한 솔루션은 실행 불가능한 작업 요구 사항을 가질 수 있으며 프로덕션 환경에서는 이상하게 간주될 수 있습니다.
귀하의 입장에서는 내 데이터베이스에 충분하다면 32비트 mongo를 사용하고, 그렇지 않다면 64비트 커널을 사용할 것입니다.
답변4
나는 한동안 32비트 시스템에서 64비트 커널을 사용해 왔습니다(64비트 실행 파일과 필요한 모든 64비트 라이브러리를 기본적으로 실행하기 위한 최소 전제 조건입니다). 나는 그것을 추천하지 않을 것이다. 마침내 나를 64비트 시스템으로 업그레이드하게 된 이유는 ALSA 헤더(특히 Midi ioctl 호출)가 크기에 독립적이라는 사실을 깨달았기 때문입니다. 이는 32비트 모드에서 컴파일된 내용이 64비트 커널과 제대로 상호 운용되지 않는다는 것을 의미합니다.
물론 이것은 고칠 가치가 있는 버그로 간주될 수 있지만 ALSA 개발 속도는 거의 정체되어 있으며 혼합 플랫폼 지원이 수정될 때까지(그리고 비바이너리 호환 방식으로 수정될 때까지) 몇 년을 더 기다릴 수 없습니다. 비하이브리드 플랫폼) 실행 문서), 어쨌든 하이브리드 플랫폼에 대한 관심은 급격히 줄어들고 있습니다.
일부 응용 프로그램의 경우 혼합 모드에서 작동하지만(놀랍게도 실제로) 커널과 인터페이스하는 기본 부분 이상을 수행하는 경우 외부 라이브러리를 통해서도 지나치게 낙관적입니다.