3

私はこれらのサブシステムがあると言っている本を読んでいます:

win32,os/2,posix,etc..

しかし、私はこれらの表記法についての知覚的な知識を持っていません、あなたはそれを短い言葉で説明できますか?

4

3 に答える 3

4

「サブシステム」の概念は、いくぶん明確に定義されていないか、少なくともさまざまなコンテキストでさまざまな意味で使用されているように感じます。

MSDNのドキュメントによると:

環境サブシステムは、さまざまなオペレーティングシステム環境をエミュレートするWindowsNTプロセスです。Windows NT Executiveは、すべての環境サブシステムが基本的なオペレーティングシステム機能を実行するために呼び出すことができる汎用サービスを提供します。

Windows Internals の本では、次の2つのサブシステムについて説明しています。

  • Windowsサブシステム-「この[サブシステム]は、Windowsがないと実行できないという点で特別です(キーボード、マウス、ディスプレイを所有しており、インタラクティブユーザーがログインしていないサーバーシステムでも存在する必要があります)。 。実際、他の2つ(どの2つ?)のサブシステムはオンデマンドで起動するように構成されていますが、Windowsサブシステムは常に実行されている必要があります。」
  • Unixベースのアプリケーション用のサブシステム。SUA[ POSIX ]サブシステムとも呼ばれます。

さて、 ドキュメントでMicrosoft VS C++リンカーに送信できる/SUBSYSTEMオプションは、次のように述べています。

次のサブシステムのいずれかを指定できます。

BOOT_APPLICATIONWindowsブート環境で実行されるアプリケーション。ブートアプリケーションの詳細については、「BCDWMIプロバイダーについて」を参照してください。

コンソールWindowsの文字モードアプリケーション。オペレーティングシステムは、コンソールアプリケーション用のコンソールを提供します。

Extensible Firmware Interface(EFI)イメージEFIサブシステムオプションは、ExtensibleFirmwareInterface環境で実行される実行可能イメージを記述します。この環境は通常、ハードウェアを備えており、オペレーティングシステムがロードされる前に実行されます。EFIイメージタイプの主な違いは、イメージがロードされるメモリの場所と、イメージの呼び出しが戻ったときに実行されるアクションです。制御が戻ると、EFI_APPLICATIONイメージがアンロードされます。EFI_BOOT_SERVICE_DRIVERまたはEFI_RUNTIME_DRIVERは、コントロールがエラーコードで戻った場合にのみアンロードされます。EFI_ROMイメージはROMから実行されます。詳細については、Unified EFIForumWebサイトの仕様を参照してください。

サブシステム環境なしで実行されるネイティブコード(カーネルモードのデバイスドライバーやネイティブシステムプロセスなど)。このオプションは通常、Windowsシステム機能用に予約されています。

POSIXWindowsのPOSIXサブシステムで実行されるアプリ。

WINDOWSWindowsグラフィカル環境で実行されるアプリ。これには、デスクトップアプリとWindowsストアアプリの両方が含まれます。

WINDOWSCE WINDOWSCEサブシステムは、アプリがWindowsCEカーネルのバージョンを備えたデバイスで実行されることを目的としていることを示します。カーネルのバージョンには、PocketPC、Windows Mobile、Windows Phone 7、Windows CE V1.0-6.0R3、およびWindows EmbeddedCompact7が含まれます。

さあ、行きます。最後に、人々は時々「Win32」サブシステムについて話しますが、リンカーオプションの意味で「Windows」サブシステムと「コンソール」サブシステムのどちらを意味するのかわかりません。

Windows Internalsの本に戻ると、「各実行可能イメージ(.exe)は1つのサブシステムにバインドされている」と書かれており、リンク時にアプリのサブシステムを指定する必要があることを説明しています。

于 2013-11-21T14:20:09.700 に答える
1

NT(NT 3.1)以降のWindowsは、当時(1993)に存在していたさまざまなオペレーティングシステム(またはOSファミリ)のセマンティクスをサポートできます。Microsoftはそれらをサブシステムと呼んでいました(今日、彼らはおそらくそれらをエミュレーションレイヤーと呼んでいます)。

サブシステムに対してリンクする場合、セマンティクスがどのようになるかを決定します。たとえば、Win32サブシステムの場合、ファイル名では大文字と小文字が区別されず(同じファイルfoo.txtfOo.Txt参照)、デバイスファイル(conまたはなどnul)はすべてのディレクトリに存在します。POSIXサブシステムの場合、ファイル名では大文字と小文字が区別され、デバイスファイルは1か所にのみ存在します。既存の(レガシー)アプリケーションをとは異なるサブシステムに対してリンクすることによりWin32、これらのアプリはそれぞれのOSのように「感じ」、移植作業が軽減されます。

EXE / DLLのサブシステムを知りたい場合は、DependencyWalkerで開くことができます-それが(直接的または間接的に)KERNEL32.DLLに依存している場合は、Win32サブシステムであり、(直接)NTDLL.DLLに依存している場合はネイティブですサブシステム(KERNEL32.DLL自体がNTDLL.DLLに依存し、Win32サブシステムの互換性レイヤーを提供することに注意してください)。

これは今日ほとんど時代遅れです。私は主に、MicrosoftがWindows 10 Anniversaryアップデート(Native、Win32、POSIXなどのサブシステム)に新しい「Linuxサブシステム」を組み込んだことを言います。これはLinuxと同等のバイナリで動作し、Windowsで実行するLinuxアプリケーションを簡単にコンパイルできるようにします(より正確には、そのLinuxサブシステム)。

リンカスイッチは最初/SUBSYSTEMはまったく同じように動作しましたが、後でさらに多くのオプションが追加されました(/SUBSYSTEM:CONSOLEWin32サブシステム用にコンパイルされますが、アプリケーションは、親プロセスからコンソールウィンドウを継承しなかった場合、コンソールウィンドウを割り当て、/SUBSYSTEM:EFI_APPLICATION実行可能ファイルをコンパイルします。 Windowsで実行されますが、Exensible Firmware Interface(EFI / UEFI)ブート環境などで実行されます。

于 2016-12-31T15:08:50.213 に答える
0

あなたがどの本を参照しているのかを知っていれば役立つかもしれません!

より一般的には、Win32(32ビットWindows、つまりWindows NT 3.5以降)、OS / 2、およびPOSIXファミリはすべてオペレーティングシステムです。(POSIXは、UNIXライクなオペレーティングシステムへのAPIの標準ファミリです。詳細については、こちらを参照してください。)

あなたが説明しているのは、多くの異なるオペレーティングシステムで実行でき、オペレーティングシステム固有のコンポーネントを備えたプログラムのようです。これらは「サブシステム」になります。

ただし、この方法でアプリケーションを作成することは、15年または20年前に行われたようなもののように聞こえます。それは、人々がオペレーティングシステムのこれらの3つのファミリについても言及していた頃です...

于 2011-04-26T15:27:13.837 に答える