Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Inside wsl

Inside wsl

Introduce of the internal mechanism of Windows Subsystem for linux.

Satoshi MIMURA

October 09, 2019
Tweet

More Decks by Satoshi MIMURA

Other Decks in Technology

Transcript

  1. Who am I?  三村 聡志 a.k.a. 親方  Twitter

    : @mimura1133  Website : http://mimumimu.net/  最近アプリ診断してる  Windows + Visual Studio が いつものスタイル。
  2. Who am I? 三村 聡志 a.k.a. 親方 Twitter : @mimura1133

    Inside IT 主催 10月3日に仙台でも開催予定 IT初心者向けの勉強会
  3. WSL とは? Windows Subsystem for Linux の略 Windows 10 Fall

    Creators Update (1709) 以降で 利用可能
  4. WSL で出来ること WSL1, WSL2 Linux のユーザモード環境の提供 64bit ELF のネイティブ実行 WSL2

    Linux のカーネルモード環境 Linux カーネルを利用した高度な処理 iftop, mount などなど.
  5. WSL1 の仕組み Windows 10 の “Pico Process” という仕組みを利用して Windows 上で

    ELF を実行する Windows の1プロセスの扱いのため プロセスがタスクマネージャーから見える
  6. Pico Process? Windows のプロセスには下記3タイプがある Minimal Process プロセスID は付与されるが PEB,TEB, NTDLL

    のリンク等は行われない NT Process 通常の Windows プロセス Pico Process Pico Provider と関連付いた Minimal Process.
  7. WSL1 の仕組み ELF ファイルを pico プロセスとして起動 Pico Provider は lxss.sys

    (%SYSTEMROOT%¥SYSTEM32¥DRIVERS¥LXSS.SYS) 起動されると Windows 側では LX Session Manager Service が起動する (%SYSTEMROOT%¥SYSTEM32¥LXSS¥LxssManager.dll) (%SYSTEMROOT%¥SYSTEM32¥LXSS¥wslhost.exe) (%SYSTEMROOT%¥SYSTEM32¥wsl.exe) 表示側は conhost.exe (コマンドプロンプト等と同じ)
  8. WSL1 の仕組み ELF ファイルを pico プロセスとして起動 Pico Provider は lxss.sys

    (%SYSTEMROOT%¥SYSTEM32¥DRIVERS¥LXSS.SYS) Pico Provider が適宜システムコールを理解し Windows Kernel に指示を出す 実行権限は wsl.exe と同じ.
  9. 余談ですが Windows 10 では Windows Hypervisor Platform が提供 Hyper-V の仕組みを利用して

    VM を実行できる API 群 管理者権限は不要 C#, C++ 向けの API 実装は存在する https://github.com/mimura1133/WHVPSharp
  10. WSL2 の仕組み 起動時に Linux VM (Optimized) を起動 Lightweight VM が立ち上がる

    WSL1 同様、起動されると Windows 側では LX Session Manager Service が起動する (%SYSTEMROOT%¥SYSTEM32¥LXSS¥LxssManager.dll) (%SYSTEMROOT%¥SYSTEM32¥LXSS¥wslhost.exe) (%SYSTEMROOT%¥SYSTEM32¥wsl.exe)
  11. ユーザディレクトリを合わせる Linux の userdir を Windows の %userprofile% に リンクさせる

    /mnt/c/Users 以下に通常存在する “ln –s” でリンクを張れば OK.
  12. mount の挙動の違い WSL1 root は wslfs (実体は NTFS 上にある) マウントできない

    WSL2 root は ext4 (実体は VHDX 上にある) マウントできる
  13. GDB の挙動の違い WSL1 Pico Process で Emulation しているため アドレスが Linux

    らしいものとは異なる WSL2 Linux 上のためアドレスがキッチリ
  14. WSL まとめ Windows Subsystem for Linux は Windows 上で Linux

    の資産を活かす技術 WSL1 は 直接 Windows で実行 WSL2 は Docker 上で実行 再現度は WSL2 が高く、気軽さは WSL1 が高い