MicrosoftがWindows 10 Linuxサブシステムの仕組みを明らかに

ビデオ: ˙ˆ¬∂˚∂˚¬¨˙∂˚߈¬∆∂ß˚∂¬ˆ˜∫∞ • •  ˚ ˚ ˚   ˚    ˚ 2024

ビデオ: ˙ˆ¬∂˚∂˚¬¨˙∂˚߈¬∆∂ß˚∂¬ˆ˜∫∞ • •  ˚ ˚ ˚   ˚    ˚ 2024
Anonim

Windows上のUbuntuのBashを使用すると、ネイティブLinux ELF64バイナリをWindowsサブシステムfor Linux(WSL)を介してWindowsで実行できます。 多くの人がUbuntuでのBashの発表にショックを受けましたが、異なるオペレーティングシステム間の互換性に新たな扉を開いたことに言及する価値があります。 マイクロソフトはさらに一歩前進し、WSLがどのように機能するかを明らかにし、2つのシステムが相互に通信する方法をよりよく理解できるようにします。

WSLはMicrosoft Windowsカーネルチームによって作成され、ユーザーモードとカーネルモードの両方のコンポーネントが含まれています。 具体的には、システムは以下で構成されています。

  • Linuxインスタンスのライフサイクルを処理するユーザーモードセッションマネージャーサービス
  • Linuxシステムコールを変換してLinuxカーネルをエミュレートする役割を持つPicoプロバイダードライバー(lxss.sys、lxcore.sys)
  • 変更されていないユーザーモードLinux(たとえば、/ bin / bash)をホストするPicoプロセス。

3つのコンポーネント間の接続は次のとおりです。

これは、ユーザーモードのLinuxバイナリとWindowsカーネルコンポーネントの間のスペースであり、魔法が発生します。 変更されていないLinuxバイナリをPicoプロセスに配置することにより、LinuxシステムコールをWindowsカーネルに転送できるようにします。 lxss.sysおよびlxcore.sysドライバーは、LinuxシステムコールをNT APIに変換し、Linuxカーネルをエミュレートします。

このプロセスの主な課題は、2つのシステムを連携させることです。

WSLは、Windows NTカーネル上でLinuxカーネルインターフェイスを仮想化することにより、変更されていないLinux ELF64バイナリを実行します。 公開するカーネルインターフェイスの1つは、システムコール(syscalls)です。 syscallは、ユーザーモードから呼び出すことができるカーネルによって提供されるサービスです。 LinuxカーネルとWindows NTカーネルはどちらも、数百のシステムコールをユーザーモードに公開しますが、セマンティクスが異なり、一般に直接互換性がありません。 たとえば、Linuxカーネルにはfork、open、killなどが含まれていますが、Windows NTカーネルには同等のNtCreateProcess、NtOpenFile、NtTerminateProcessがあります。

Linux用Windowsサブシステムには、Windows NTカーネルと連携してLinuxシステムコール要求を処理するカーネルモードドライバー(lxss.sysおよびlxcore.sys)が含まれています。 ドライバーにはLinuxカーネルからのコードは含まれていませんが、代わりにLinux互換カーネルインターフェイスのクリーンルーム実装です。 ネイティブLinuxでは、ユーザーモードの実行可能ファイルからsyscallが作成されると、Linuxカーネルによって処理されます。 WSLでは、同じ実行可能ファイルからsyscallが作成されると、Windows NTカーネルは要求をlxcore.sysに転送します。 可能な場合、lxcore.sysはLinuxのシステムコールを同等のWindows NTコールに変換し、これにより重い作業が行われます。

オープンソースプラットフォームに対するMicrosoftの関心を考慮して、多くの人々は、Ubuntuオペレーティングシステムの背後にあるCanonicalなど、Linuxに特化した大手企業を買収すべきかどうか疑問に思いました。 MicrosoftとCanonicalはオープンソースソフトウェアで協力しましたが、どちらもこの可能性についてコメントしていません。

LinuxとWindowsの相互作用の進化に興味がある場合は、Microsoftのブログにアクセスしてください。 チームは、このトピックに関するより多くのブログ投稿が続くことを約束しました。

MicrosoftがWindows 10 Linuxサブシステムの仕組みを明らかに