Answers:
是否可以在具有64位处理器的32位OS上安装64位程序?
原则上可以,但是处理器和操作系统必须支持它。
在ARMv8上,32位(Aarch32)内核不能运行64位(Aarch64)进程。这是处理器的局限性。
还有其他处理器没有此限制,例如,可以在x86_64处理器上的x86_32内核上运行x86_64进程,但是很少有内核支持它,大概是因为它的实用程序有限(大多数情况下,您保存了一个内核中的32位RAM)。Linux不支持它,但是Solaris支持。
如果运行64位内核,则可以保留现有的32位OS 。Aarch64 Linux内核可以运行Aarch32进程。Raspbian不支持此功能,因此您需要同时维护32位OS和64位OS。您可以将其中一个用作主操作系统(即一个运行init和系统服务的操作系统),另一个可以使用chroot运行特定的程序。请参阅如何在64位Debian / Ubuntu上运行32位程序?一个实用的方法。
请注意,您将需要安装64位程序所需的所有库。任何给定的进程都必须完全是32位或完全是64位,因此您不能在64位可执行文件中使用32位库。
除非有充分的理由要保留32位系统,否则如果需要运行64位可执行文件,则安装64位系统会更容易。
请注意,64位程序可以执行但32位程序不能执行的唯一操作是寻址大约3GB以上的虚拟内存,这在具有1GB RAM的系统上的实用性有限。额外的更大的寄存器可能会带来性能优势,但是额外的内存访问也会降低性能。
inc
/ dec
寄存器操作码(0x40 .. 0x4F
)。在长模式(64位模式),默认的操作数大小是32,但默认地址大小是64
xsave
/ xrstor
在兼容模式下也可以保存完整的向量状态。因此,它肯定没有得到很好的支持或明确满足。内核入口点可能在64位(长)模式下运行,并在跳转到内核的其余部分之前切换到32位(兼容)模式。(x86模式切换仅需a far jmp
且不影响注册。)
在某些体系结构上,是的。但不是在ARM或x86上。
您可以使用QEMU来仿真64位系统,但是您不想这样做。
仅将内核升级到64位内核,因此您将能够运行64位二进制文件。本质上,它将以32位兼容模式运行您的整个发行版,而您的唯一64位mongodb将是其正常模式。
但是,它不值得它的价格。最好将mongodb切换为32位。但是,在这种情况下,存在一个限制,即您的数据库不能最大为2GB,因为它直接将整个内容映射到虚拟内存中。如果您的数据库更大,则仅保留内核升级。(感谢@duskwuff扩展名!)
顺便说一句,如果您的数据库不需要很大的负载,或者您可以在它之前使用一些缓存解决方案(例如:另一个但32位的mongo),则可以使用cpu仿真。为此,请开始搜索“ qemu qemu-system-x86_64”。尽管这样的解决方案可能需要不可行的工作,并且在生产环境中可能被认为很奇怪。
在您的地方,如果足够用于我的数据库,我将使用32位mongo,否则,将使用64位内核。
apt-get install mongodb:i386
或类似的东西?
我想说这不是不可能,但确实很难管理。由于这样的32位操作系统通常仅打包(并接受)32位二进制文件和库,因此您需要进行大量调整才能使其与64位操作系统兼容。
RPI3面临的主要问题是缺少64位内核(至少对于raspbian)。
长话短说:使用32位二进制文件,就可以了。
编辑:
如果要使用64位内核,则需要安装支持ARM64体系结构的发行版。您应该看一下ArchLinux ARM(在此处),但是它并不完全受支持。
您要查找的信息位于安装选项卡的底部。
您也可以看一下官方的debian端口,但是RPI3端口仍然存在很大的问题,因此由您自己决定是否值得这样做
i386
变体,其中包括一个64位内核,该内核也允许安装64位库和二进制文件。尽管Debian中的ARM支持不允许在ARM系统上使用(但是,如果以开头,则可以安装Combine arm64
和)。armhf
arm64
我已经在64位内核和32位系统上使用了相当长的时间(这是本地运行64位可执行文件以及所有必需的64位库的最低前提条件)。我不推荐它。最终让我升级到64位系统的最终原因是,意识到ALSA标头(尤其是与Midi ioctl调用有关的标头)与大小无关,这意味着以32位模式编译的内容无法与64位内核很好地互操作。
当然,可以认为这是一个值得修复的错误,但是ALSA的开发步伐几乎停滞了,我迫不及待地想了几年来修复混合平台支持(对于非混合平台,则采用非二进制兼容的方式)无论如何,当人们对混合平台的兴趣正在迅速减少时。
对于某些应用程序,东西在混合模式下工作(实际上令人惊讶的是,很多),但是如果您所做的工作超出了与内核接口的基本份额,即使是通过外部库,也太乐观了。