Solaris 32bit / 64bit 混淆

gol*_*ean 3 64-bit 32-bit solaris

我在 AMD 上有一个 Solaris-

uname -a

OS Solaris 10 x86_64 (SunOS goldtpus34 5.10 Generic_144489-11
Run Code Online (Sandbox Code Playgroud)

我想知道它是 32 位还是 64 位内核,所以我做了

/usr/bin/isainfo -k
Run Code Online (Sandbox Code Playgroud)

它说

amd64
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

file /sbin/init 
Run Code Online (Sandbox Code Playgroud)

它说

ELF 32-bit LSB executable 80386 Version 1, dynamically linked, stripped
Run Code Online (Sandbox Code Playgroud)

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

ELF 64-bit LSB executable AMD64 Version 1 [SSE2 SSE FXSR FPU], dynamically linked, not stripped 
Run Code Online (Sandbox Code Playgroud)

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

我很迷惑。

如何在 Solaris 和 Linux 上准确获取操作系统内核是否处于 64/32 位模式?

mgh*_*cke 6

isainfo -k的输出显示内核正在运行的模式。在您的情况下,您运行的是 64 位内核。一切内部内核在64位模式(设备驱动程序,系统调用,等等,等等)上运行

Solaris(以及许多其他操作系统,我认为)的美妙之处在于它也可以本机执行 32 位二进制文​​件。Solaris OS 附带的大多数程序、工具和实用程序都是 32 位工具。唯一的例外是您可以在/usr/bin/amd64 中找到的那些。这些通常是必须直接使用内核结构或想要利用更大的直接可寻址内存空间的那些。它们是通过/usr/lib/isaexec自动选择的(它们的 32 位对应项可以在/usr/bin/i86 中找到),这些工具被硬链接到(例如,/usr/bin/ps是到/usr/lib/isaexec的硬链接)。

init仅以 32 位二进制的形式出现,这是可以的。它没有说明您正在运行的内核。我很确定来自 Solaris 2.3 映像的相同init仍然可以在 Solaris 11 下(即在 SPARC 下)完美运行。它并没有真正做任何令人兴奋的事情。