到底什么是子系统?

com*_*fan 6 terminology subsystem

我正在读一本书,书中说有这些子系统:

win32,os/2,posix,etc..
Run Code Online (Sandbox Code Playgroud)

但我对这些符号没有任何感性认识,你能用简短的话解释一下吗?

mih*_*ihi 6

从NT(NT 3.1)开始的Windows能够支持当时(1993年)存在的不同操作系统(或OS系列)的语义。微软称它们为子系统(今天他们可能称它们为仿真层)。

当链接到子系统时,它决定了您的语义。例如,对于 Win32 子系统,文件名不区分大小写(foo.txtfOo.Txt引用同一个文件),并且设备文件(如connul)存在于每个目录中。对于 POSIX 子系统,文件名区分大小写,并且设备文件仅存在于一处。通过将现有(遗留)应用程序链接到不同于 的子系统Win32,这些应用程序“感觉”更像各自的操作系统,并且减少了移植工作。

如果您想了解 EXE/DLL 的子系统,可以在 DependencyWalker 中打开它 - 如果它(直接或间接)依赖于 KERNEL32.DLL,则它是 Win32 子系统,如果它(直接)依赖于 NTDLL.DLL,则它是本机子系统子系统(请注意,KERNEL32.DLL 本身将依赖于 NTDLL.DLL,为 Win32 子系统提供兼容层)。

今天这基本上已经过时了。我这么说主要是因为微软在 Windows 10 周年更新中包含了一个新的“Linux 子系统”(这是一个类似于 Native、Win32 或 POSIX 的子系统),它的二进制行为相当于 Linux,可以轻松编译在 Windows 上运行的 Linux 应用程序(或者更准确地说,它的 Linux 子系统)。

链接/SUBSYSTEM器开关开始执行完全相同的操作,但后来增加了更多选项(/SUBSYSTEM:CONSOLE也为 Win32 子系统进行编译,但应用程序将分配一个控制台窗口,如果它没有从其父进程继承一个控制台窗口,/SUBSYSTEM:EFI_APPLICATION将编译一个无法执行的可执行文件完全在 Windows 上运行,但将在可扩展固件接口 (EFI/UEFI) 引导环境等中运行。


Jer*_*Gee 0

如果我们知道您指的是哪本书,可能会有帮助!

更一般地说,Win32(即32位Windows,即Windows NT 3.5或更高版本)、OS/2和POSIX家族都是操作系统。(POSIX 是类 UNIX 操作系统的 API 标准系列 - 请参阅此处了解更多信息。)

听起来您所描述的是一个可以在许多不同操作系统上运行并且具有特定于操作系统的组件的程序 - 这些将是“子系统”。

然而,以这种方式创建应用程序听起来确实像是十五或二十年前所做的事情。大约在那个时候,人们也常常提到这三个操作系统系列......