WSL 与 WINE: Subsystem 与 API 翻译


WSL 对于 Windows 系统来说属于用户态程序,通过虚拟文件系统接口,以 DriveFs 文件系统挂载到 Windows 从而提供和 Windows 的互操作能力。 lxss.sys 和 lxcore.sys 这两个驱动负责模拟 Linux 内核并实时拦截系统调用。相应的驱动会将 Linux 内核调用映射为对应的 Windows 内核调用。根据从微软内部的压力测试工具据来看,WSL 的性能表现非常接近用相同硬件直接运行 Linux 的性能,几乎可以获得同等的 CPU、内存和 I/O 性能,这证明 WSL 在性能方面的表现很出色。

WSL 并不是传统上的 NT Subsystem,传统的 NT Subsystem 是 Ring-3 Native API + Win32 API 实现的,POSIX 和 OS/2 皆是如此,他们的可执行程序还都是 PE。简单的说,NT 内核在进程创建线程创建 Context Switch 等等地方实现了一套 Hook Callback 机制,在这个最底层机制的支持下,微软实现了 Linux 的操作系统原语,比方说 fork,也就是 picoprocess。可以认为微软把 NT 内核变成了一个兼容版 Linux 内核,它可以直接加载执行 ELF。另外,可执行映像里面的指令是关于机器的,Linux 和 Windows 之间应当不需要“翻译二进制”。


文章作者: sfc9982
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 sfc9982 !
  目录