Solaris 10 发行说明

常规信息

本节提供 Solaris 10 OS 的常规信息(如行为更改)。

单一 UNIX 规范版本 3 引入更改

单一 UNIX 规范版本 3 (Single UNIX Specification, Version 3, SUSv3) 提供对下列 POSIX 操作系统接口的更新:

更新包括下列更改:

Korn Shell 中的 ENV 变量

非交互 Korn shell 中不再扩展环境变量 ENV。此更改同时适用于 /bin/ksh/usr/xpg4/bin/sh

编译器和 SUSv3 应用程序

应使用正确的功能测试宏、编译器和选项生成符合 SUSv3 和其他标准的应用程序。请参见 standards(5) 手册页。

file 命令

在与 -m 选项一起使用时,file 命令对用户定义的 magic 文件执行带符号比较。另外,在 x86 环境中,该命令在比较 magic 值之前不再将多字节整数切换为大尾数法 (SPARC) 顺序。请参见 file(1)magic(4) 手册页。

打印函数

snprintf()vsnprintf() 现在返回在输入值 n=0 时将被格式化的字节数。请参见 snprintf(3C) 和 vsnprintf(3C) 手册页。

文本编辑器

在启动时,编辑器在读取 $HOME 或当前目录中的 .exrc 文件前检查其他条件。请参见 ex(1)vi(1) 手册页。

64-bit SPARC: 时间函数

如果输入 time_t 太大,无法以 tm struct 表示,则下列函数会返回空指针并将 errno 设置为 EOVERFLOW

请参见 gmtime(3C)gmtime_r(3C)localtime(3C)localtime_r(3C) 手册页。

结尾斜杠

仅在路径指定现有路径或要创建的路径时,SUSv3 才允许在路径名中使用结尾斜杠字符 (/)。

/usr/xpg6/bin/usr/xpg4/bin 中的实用程序

/usr/xpg6/bin/usr/xpg4/bin 中的实用程序具有与缺省 Solaris 行为冲突,但符合 SUSv3 或 XPG4 的行为。对于使用符合 SUSv3 的命令行环境的用户,必须正确配置 PATH。有关更多信息,请参见特定实用程序的手册页。

对 TCP 包装的支持在 sendmail 中启用

实用程序 sendmail 已添加到支持 TCP 包装的服务列表中。该实用程序增加的这一功能可能导致 sendmail 拒绝 Solaris 10 系统中的某些连接,这些连接以前被配置为使用有很大限制性的服务。使用守护进程名称 sendmail 启用 TCP 包装的使用。有关 TCP 包装支持的信息,请参见《Solaris 10 ????》中的“sendmail 版本 8.12 使用 TCP 包装”。有关配置 TCP 包装的信息,请参阅 SUNWtcpd 中包含的 tcpd(1M) 和 hosts_access(4) 手册页。

x86: 对 Solaris fdisk 标识符的更改

在 Solaris 10 发行版中,Solaris fdisk 标识符设置为 0xbf,以便于配置包含 Linux 操作系统的多引导环境。在 Solaris 早期版本中,Solaris fdisk 标识符被设置为 0x82,即与 Linux 交换分区的标识符相同。通过更改标识符,无需修改 Linux 交换分区或重新安装 Linux OS 即可安装 Solaris 10 OS 和 Linux 操作系统。

Solaris OS 继续识别和支持标识符为 0x82 的 Solaris fdisk。可使用 fdisk 命令切换 0x82 标识符和 0xbf 标识符。如果正在使用 Solaris Live Upgrade 且需要使用 0x82 标识符,则使用 luactivate 命令可以将 0xbf 标识符切换为 0x82 标识符。

有关更多信息,请参见 fdisk(1M) 手册页。

x86: x86 系统上的应用程序内存分配限制

Solaris 应用程序使用 malloc()brk()mmap() 等函数分配内存。应用程序可分配的最大内存量受用户虚拟地址空间大小的限制。用户虚拟地址空间中包含的程序文本、堆栈、数据和库会进一步减小最大内存分配大小。

32 位计算环境

在 32 位计算环境中,用户与内核共享 32 位虚拟地址空间。因此,用户虚拟地址空间的大小为 4 GB 减去内核虚拟地址空间的大小。内核虚拟地址空间大小的配置取决于物理内存的大小。随着物理内存大小的增加,用户地址空间的大小会减小。对于具有 8 GB 内存的系统,用户地址空间的大小约为 3 GB。

如果内存分配限制对于应用程序不足,则存在两种选择:

64 位计算环境

在 64 位计算环境中,32 位应用程序的虚拟地址空间完全用于用户。所以,32 位应用程序可分配的内存为全部 4 GB 减去文本、堆栈和库所需的用户地址空间。

在某些早期 64 位 AMD 处理器上,可以进一步将内存分配限制减少 1 GB。要确定您的处理器是否受影响,请执行以下步骤:

  1. 从任何 32 位 shell 运行命令 pmap $$

  2. 在处理器图上,检查是否已列出大于或等于 0xC0000000 的地址。如果这些地址不存在,则 Solaris OS 已将 32 位应用程序限制为最少为 4 GB 虚拟地址范围的 3 GB。

取决于应用程序已在使用的内存,64 位应用程序可分配 250 TB 内存。

x86: Solaris 支持 no execute

x86 上的 Solaris 10 在 32 位和 64 位模式下支持 no execute (NX) 位。使用 NX 位,可通过在 mmap() 函数等各种内存系统调用中不使用 PROT_EXEC 来实现必需的保护。 以前在 x86 上,所有隐含映射的内存都设置 PROT_EXEC。由于 Solaris 支持 NX 位,增强了病毒保护。

在支持 NX 的硬件上,只要未指定 PROT_EXEC,Solaris OS 就会缺省使用 NX 位。不过,堆栈段在缺省情况下使用 PROT_EXEC 而非 NX 位。可通过执行下列操作之一,更改堆栈段的缺省设置:

系统管理员可通过使用 eeprom 命令将 enforce-prot-exec 设置为 "off" 来禁用所有 NX 位。对于包含缺少 PROT_EXEC 的传统应用程序的任何系统,都提供此变量作为转换解决方法。