Solaris 32 位 / 64 位混淆

Solaris 32 位 / 64 位混淆

我有一个 AMD 上的 Solaris-

uname -a给出

OS Solaris 10 x86_64 (SunOS goldtpus34 5.10 Generic_144489-11

我想知道它是否有 32 位或 64 位内核,所以我就这么做了

/usr/bin/isainfo -k

它说

amd64

但当我这样做

file /sbin/init 

它说

ELF 32-bit LSB executable 80386 Version 1, dynamically linked, stripped

另外,如果我确实提交了文件,它会说

ELF 64-bit LSB executable AMD64 Version 1 [SSE2 SSE FXSR FPU], dynamically linked, not stripped 

那么,是否有可能让内核在 64 位模式下工作,但系统实用程序/进程生成器(init)在 32 位模式下工作。

我很困惑。

如何准确获取 Solaris 和 Linux 上的 OS 内核是否处于 64/32 位模式?

答案1

输出isainfo-k显示内核正在以何种模式运行。你正在运行 64 位内核。一切里面内核以 64 位模式运行(设备驱动程序、系统调用等等)

Solaris(以及许多其他操作系统,我想)的优点在于它也可以本地执行 32 位二进制文​​件。Solaris 操作系统附带的大多数程序、工具、实用程序都是 32 位工具。唯一的例外是您可以在/usr/bin/amd64。这些通常是必须直接与内核结构打交道或想要利用更大的直接可寻址内存空间的。它们是自动选择的(它们的 32 位对应项可以在/usr/bin/i86) 通过/usr/lib/isaexec相关工具与之硬链接(/usr/bin/ps例如,是指向/usr/lib/isaexec)。

在里面只以 32 位二进制形式出现,这没问题。它没有说明你正在运行什么内核。我很确定在里面来自 Solaris 2.3 映像的版本仍可在 Solaris 11(即 SPARC)下完美运行。它实际上并没有做任何令人兴奋的事情。

答案2

Oracle 论坛上的此主题很好地解释了你的情况,因为它与和你一样困惑的人有关。我会引用一些相关的观点,但你应该通读一下这个帖子。

Solaris 10 以同一介质提供 32 位和 64 位两种架构。安装后,首次启动时将自动选择正确的模式。

如果系统以 32 位启动,则 Solaris 已检测到 32 位 CPU。

此命令的输出是什么:

# isainfo -kv

# psrinfo -pv

因此,如果操作系统报告它已检测到 64 位处理器,那么它将以 64 位模式工作。

相关内容