3

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

win32,os/2,posix,etc..

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

4

3 回答 3

4

我觉得“子系统”的概念有些不明确,或者至少在不同的上下文中具有不同的含义。

根据MSDN 文档

环境子系统是模拟不同操作系统环境的 Windows NT 进程。Windows NT 执行程序提供所有环境子系统都可以调用以执行基本操作系统功能的通用服务。

Windows Internals 书中讨论了以下两个子系统:

  • 它说的Windows 子系统- “这个 [子系统] 的特殊之处在于 Windows 没有它就无法运行。(它拥有键盘、鼠标和显示器,即使在没有交互式用户登录的服务器系统上也必须存在. 事实上,其他两个(哪两个?)子系统配置为按需启动,而 Windows 子系统必须始终运行。
  • 基于 Unix 的应用程序的子系统,也称为 SUA[ POSIX ]子系统

现在,可以在 文档中发送到 Microsoft VS C++ 链接器的 /SUBSYSTEM 选项说,我引用

您可以指定以下任何子系统:

BOOT_APPLICATION 在 Windows 引导环境中运行的应用程序。有关启动应用程序的详细信息,请参阅关于 BCD WMI 提供程序。

CONSOLE Windows 字符模式应用程序。操作系统为控制台应用程序提供了一个控制台。

可扩展固件接口 (EFI) 映像 EFI 子系统选项描述在可扩展固件接口环境中运行的可执行映像。该环境通常由硬件提供,并在加载操作系统之前执行。EFI 图像类型之间的主要区别在于图像加载到的内存位置以及对图像的调用返回时执行的操作。控制权返回时会卸载 EFI_APPLICATION 图像。仅当控制返回错误代码时,才会卸载 EFI_BOOT_SERVICE_DRIVER 或 EFI_RUNTIME_DRIVER。从 ROM 执行 EFI_ROM 映像。有关详细信息,请参阅统一 EFI 论坛网站上的规范。

NATIVE 在没有子系统环境的情况下运行的代码——例如,内核模式设备驱动程序和本机系统进程。此选项通常保留用于 Windows 系统功能。

POSIX 在 Windows 的 POSIX 子系统中运行的应用程序。

WINDOWS 在 Windows 图形环境中运行的应用程序。这包括桌面应用程序和 Windows 应用商店应用程序。

WINDOWSCE WINDOWSCE 子系统表明该应用程序旨在在具有 Windows CE 内核版本的设备上运行。内核版本包括 PocketPC、Windows Mobile、Windows Phone 7、Windows CE V1.0-6.0R3 和 Windows Embedded Compact 7。

所以你去。最后,人们有时会谈论“Win32”子系统,我不知道我应该将其理解为链接器选项意义上的“windows”子系统还是“console”子系统。

回到 Windows Internals 这本书,它进一步说“每个可执行映像 (.exe) 都绑定到一个且只有一个子系统”,这将解释需要在链接时指定您的应用程序所使用的子系统。

于 2013-11-21T14:20:09.700 回答
1

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

当链接到一个子系统时,它决定了你的语义将如何。例如,对于 Win32 子系统,文件名不区分大小写(foo.txt并且fOo.Txt引用同一个文件),并且设备文件(如conor nul)存在于每个目录中。对于 POSIX 子系统,文件名区分大小写,并且设备文件仅存在于一处。通过将现有(遗留)应用程序与不同于Win32.

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

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

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

于 2016-12-31T15:08:50.213 回答
0

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

More generally, Win32 (which is 32-bit Windows, i.e. Windows NT 3.5 or later), OS/2 and the POSIX family are all operating systems. (POSIX is a standard family of APIs into the UNIX-like operating systems - see here for more.)

It sounds like what you describe is a program that can run on many different operating systems and which has operating-system specific components -- these would be the "subsystems".

However, creating an application in this way does sound like the kind of thing that was done fifteen or twenty years ago. That's about the time that people used to refer to those three families of operating systems, too...

于 2011-04-26T15:27:13.837 回答