BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Windows原生运行Linux的技术细节

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 大愚若智 关注 9 他的粉丝 发布于 2016年5月3日. 估计阅读时间: 6 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

Microsoft最近宣布了将Linux Bash与Windows 10进行集成的意图,通过这种集成,Windows 10用户将能在操作系统中原生运行Linux ELF64二进制程序。为避免对该技术的实现方法产生错误的猜测,Windows Subsystem for Linux团队主管Deepu Thomas详细介绍了在Windows上运行Linux的技术细节。

为了解释在Windows上运行Linux的方法,首先需要介绍一些相关技术和功能:

Windows用户模式。是CPU的一种运行模式,可对普通应用程序进行隔离和保护。每个以这种模式启动的应用程序都有自己专用、无法被其他应用程序修改的虚拟地址空间。此外如果一个应用程序崩溃,其他应用程序不会受到波及。

Windows内核模式。主要由(内核模式的)驱动程序之类的操作系统核心组件使用的一种CPU运行模式。与计算机硬件进行的所有交互都是在这种模式下处理的。为尽可能避免崩溃,Windows内建并以该模式运行的组件需要进行全面的测试,因为这种层面的崩溃会危及整个操作系统。这篇MSDN文章详细介绍了这两种Windows模式之间的差异。

Windows NT子系统。Windows NT问世之初就在应用程序所能调用的API和内核层之间进行了隔离。这样Windows NT便可支持多种子系统,例如POSIX、OS/2以及Win32。这些子系统最初的用途是简化UNIX和OS/2应用程序向Windows移植的工作。虽然POSIX和OS/2子系统已被取消,但它们的架构依然保留了下来。

Pico进程和驱动DrawBridge项目引入的Pico进程和相应的驱动提供了一种基于过程的容器。这是一种不包含操作系统服务的轻量级解决方案,系统调用是由一对Pico驱动处理的。

用户模式Linux。通过这种方式可将Linux作为应用程序在其他Linux宿主机基础之上运行。此时来宾Linux内核无需直接访问硬件,而是将系统调用转发至宿主机Linux,由其代为访问。

为了运行Linux,Microsoft创建了Windows Subsystem for Linux (WSL),这个子系统的整体架构如下图所示:

当用户以用户模式启动bash.exe时,会同时启动相关服务以及LX会话管理器。这个服务在用户通过命令提示符输入的bash命令和待执行的相关原生ELF64二进制程序之间承担了中介的角色。这里的Linux二进制程序是Canonical提供的用户模式Ubuntu 14.04系统的组成部分,以Pico进程的形式启动并在用户模式下运行。此时由lxss.sys和lxcore.sys这两个驱动负责模拟Linux内核并拦截系统调用。大部分情况下,相应的驱动会将Linux内核调用映射为对应的Windows内核调用,但也有些情况可能缺乏对应的Windows内核调用。例如fork(),Thomas解释了其中的原理:

根据记录,Linux fork() syscall没有直接对等的Windows调用。当针对Windows Subsystem for Linux进行fork系统调用时,lxcore.sys会执行一些前期工作为进程的复制做准备。随后它会调用内部的Windows NT内核API以使用相应语意创建进程,并为新建的进程完成额外数据的复制。

WSL提供了两种可被Linux访问的文件系统:VolFs和DriveFs。前者在各方面都非常类似于常规的Linux文件系统,包括权限支持、symbolic链接、大小写敏感,以及Windows文件系统中不允许使用的字符。后者提供了与Windows互操作的能力,使得用户能够在Linux中看到所有Windows卷。

这个功能与虚拟化无关,Linux二进制程序也没有为了在WSL中运行而移植或重编译。这种方式运行的Linux命令可以像Windows应用程序一样访问本地主机,无需使用虚拟化的网络。

根据Thomas的介绍,针对WSL进行性能评测后发现,性能表现非常接近用相同硬件直接运行Linux的性能,这证明WSL在性能方面的表现很出色。

Microsoft团队曾在WSL上运行过Python和Ruby,并像其他Linux用户那样使用gcc编译过程序,大部分情况下都可以正常工作,但也有一些小问题:sudo无法完全正常使用,文件系统需要进行一定的调整,运行MySQL会遇到一些小问题等。有些用户提到无法运行Java、Semaphores或共享内存。目前UserVoice WSL频道中最需要的三个特性分别是:在两个环境中使用slash,通过Bash启动Windows进程,以及将WSL开源。

Microsoft提供的在Windows上运行Linux的能力可以帮助运维团队,尤其是负责运维云实例的团队无需更换计算机或使用虚拟化解决方案,便可直接从一台Windows/Linux计算机管理自己的所有系统。云中运行的很多计算机都运行了Linux,这个功能可以让运维人员的工作变得轻松一些。

更多详情推荐阅读MSDN WSL概述以及Channel 9视频:WSL:架构概述


查看英文原文Details on How Linux Runs Natively on Windows


感谢夏雪对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

我觉得微软跑偏了 by see sai

再怎么原生运行linux, 也不可能比原生快. 如果linux有大的变化时,windows能跟的上适配?

Re: 我觉得微软跑偏了 by 孙 庚泽

还好吧。。微软出这个又不是要来代替linux的,所以性能之类的不是很重要。你看最后一段提到,这主要是给运维人员用的,让他们运维能方便点,从这个角度讲还是挺实用的。

太需要这个东西了 by 王 维

又能上qq,用迅雷,还能在linux环境下写代码。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT