ザ・ Windows上のUbuntuでBash ネイティブLinuxELF64バイナリをWindowsSubsystem for Linux(WSL)経由でWindows上で実行できるようにします。 多くの人がBashon Ubuntuの発表にショックを受けましたが、異なるオペレーティングシステム間の互換性への新しい扉を開くことは言及する価値があります。 Microsoftはさらに一歩前進し、WSLがどのように機能するかを明らかにして、2つのシステムが互いにどのように通信するかをよりよく理解できるようにします。
WSLはMicrosoftWindowsカーネルチームによって作成され、ユーザーモードとカーネルモードの両方のコンポーネントが含まれています。 より具体的には、システムは以下で構成されています。
- 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カーネルインターフェイスを仮想化することにより、変更されていないLinuxELF64バイナリを実行します。 それが公開するカーネルインターフェースの1つは、システムコール(syscalls)です。 システムコールは、ユーザーモードから呼び出すことができるカーネルによって提供されるサービスです。 LinuxカーネルとWindowsNTカーネルはどちらも、数百のsyscallをユーザーモードに公開しますが、セマンティクスが異なり、通常は直接互換性がありません。 たとえば、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が行われると、WindowsNTカーネルが要求をlxcore.sysに転送します。 可能な場合、lxcore.sysはLinuxのsyscallを同等のWindows NT呼び出しに変換します。これにより、手間のかかる作業が行われます。
オープンソースプラットフォームに対するMicrosoftの関心を考慮に入れると、多くの人が疑問に思いました。 技術の巨人は、CanonicalなどのLinuxに焦点を当てた主要企業を買収する必要があります、Ubuntuオペレーティングシステムの背後にある会社。 MicrosoftとCanonicalはオープンソースソフトウェアで協力しましたが、どちらもこの可能性についてコメントを出しませんでした。
LinuxとWindowsの相互作用がどのように進化するかに興味がある場合は、 Microsoftのブログにアクセスする. チームは、このトピックに関するブログ投稿がさらに続くことを約束しました。
チェックアウトする必要のある関連記事:
- Linuxユーザーが「ヘッドフォンがWindows8.1で動作を停止した」問題を報告する
- MicrosoftとCanonicalは、Build2016でBashをWindows10に導入します
- ミュンヘンがWindowsXPユーザーへの無料UbuntuCDの配布を開始