微软揭示了Windows 10 Linux子系统的工作原理
视频: Обновление c Windows 7 до Windows 10 2024
Windows上的Ubuntu上的Bash使本机Linux ELF64二进制文件可以通过Windows Linux子系统(WSL)在Windows上运行。 尽管许多人对Ubuntu上发布的Bash感到震惊,但值得一提的是,它为不同操作系统之间的兼容性打开了新的大门。 微软向前迈出了一步,并揭示了其WSL的工作原理,因此我们可以更好地了解这两个系统如何相互通信。
WSL由Microsoft Windows内核团队创建,包含用户模式和内核模式组件。 更具体地说,该系统包括:
- 用户模式会话管理器服务,用于处理Linux实例生命周期
- Pico提供程序驱动程序(lxss.sys,lxcore.sys),其作用是通过转换Linux系统调用来模拟Linux内核
- Pico进程托管未修改的用户模式Linux(例如/ bin / bash)。
这三个组件之间的连接描述如下:
用户模式Linux二进制文件和Windows内核组件之间的空间就是神奇的地方。 通过在Pico进程中放置未修改的Linux二进制文件,我们使Linux系统调用可以定向到Windows内核。 lxss.sys和lxcore.sys驱动程序将Linux系统调用转换为NT API,并模拟Linux内核。
该过程中的主要挑战是使两个系统协同工作:
WSL通过虚拟化Windows NT内核之上的Linux内核接口来执行未修改的Linux ELF64二进制文件。 它公开的内核接口之一是系统调用(syscalls)。 syscall是内核提供的一项服务,可以从用户模式下调用。 Linux内核和Windows NT内核都向用户模式公开了数百个syscall,但是它们具有不同的语义,通常不直接兼容。 例如,Linux内核包括fork,open和kill之类的东西,而Windows NT内核具有类似的NtCreateProcess,NtOpenFile和NtTerminateProcess。
Windows Linux子系统包括内核模式驱动程序(lxss.sys和lxcore.sys),这些驱动程序负责与Windows NT内核协同处理Linux系统调用请求。 驱动程序不包含Linux内核中的代码,而是Linux兼容内核接口的无尘室实现。 在本机Linux上,当从用户模式可执行文件进行syscall时,它由Linux内核处理。 在WSL上,当从同一可执行文件进行系统调用时,Windows NT内核会将请求转发到lxcore.sys。 在可能的情况下,lxcore.sys会将Linux syscall转换为等效的Windows NT调用,这又会导致繁重的工作。
考虑到微软对开源平台的兴趣,许多人想知道这家科技巨头是否应该收购以Linux为重点的大型公司,如Ubuntu操作系统背后的公司Canonical。 尽管Microsoft和Canonical在开源软件方面进行了合作,但双方均未就此可能性发表任何评论。
如果您对Linux – Windows交互的演变方式感兴趣,请访问Microsoft的博客。 该团队承诺,将会有更多关于该主题的博客文章。