Solaris 32位/ 64位混淆


3

我在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位模式工作,而系统utils / process spawner(init)以32位模式工作。

我很困惑。

在Solaris和Linux上,如何正确获取OS内核处于64/32位模式?


Solaris的64位安装中的大多数二进制文件都是32位二进制文​​件。有一个历史原因与SPARC芯片和x86芯片之间的差异有关。这与Linux使用的方法不同。因此,即使内核以64位模式启动,您也会看到init是32位二进制文​​件。正如Bon Gart所说,“ isainfo”命令是专门设计用来显示内核可以运行的程序类型。
克里斯·奎内尔

Answers:


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)下仍然可以正常运行。它实际上并没有做任何令人兴奋的事情。


1

Oracle论坛上的该主题很好地解释了您的情况,因为它与其他与您有困惑的人打交道。我会引用一些相关的要点,但是您应该通读该线程。

Solaris 10在相同的介质中以32位和64位两种体系结构提供。安装后,首次启动时会自动选择正确的模式。

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

该命令的输出是什么:

# isainfo -kv

# psrinfo -pv

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


谢谢。在oracle论坛上阅读该主题。但是我仍然想知道为什么在引导64位Solaris 10内核时/ sbin / init显示为32位(在我的情况下)。init是内核在启动后启动的第一个主要进程,因此对我来说仍然很奇怪。
goldenmean 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.