WSL quick overview
简介
WSL,是Windows Subsystem for Linux的缩写,字面意义上理解就是WIndows下的Linux子系统。WSL 由Microsoft Windows内核团队创建,目前如果最为学习Linux使用的化已经支持的相当好了。WSL现已被集成到WIndows 10中,如果想要使用该功能需要单独打开并重启。
WSL使用了一个subsystem的概念,传统上我们认为Linux程序无法在Windows上运行,因为两者可执行文件标准是不同的(ELF和Win32)。但事实上这是个误区,WIndows NT设计之初就支持多种subsystem,那是NT内核实际上提供了Linux程序需要的接口,只是针对Win32程序时屏蔽了这些接口。至于为啥没流行起来,我猜测可能是性能问题。
传统上大多数人学习Linux都是在物理机上安装WMware Workstation,然后再Host上安装Linux虚拟机。又或者在物理机上安装双系统,无论哪一种方式都非常麻烦。以WMware Workstation为例,WSL的出现估计会对其在桌面市场的份额造成不小影响。WMware Workstation其实现原理是作为WIndows的应用层,WSL的支持是在NT内核中单独有个driver来处理Linux的系统调用,相比较WMware Workstation的做法无论在资源占用上,还是与系统契合度上,WSL都要更好一些。
但是WMware Workstation也不是就没用了,他除了虚拟Linux还可以虚拟Windows,在一个物理机上装2个甚至多个Windows,目前来看你还只能使用WMware Workstation。注意:我这里涉及到的场景大多数人学习时使用的场景,向云计算或者虚拟化场景中这些都不是问题。
WSL最开始的名字是Bash on [Ubuntu on] Windows,字面意义上理解就是在WIndows下可以使用bash。起这个名字MS也是希望用户尽快理解并适应这么个新生事物(其实也不算,NT原本就支持)。随着更多的功能、特性被加进来,Bash on [Ubuntu on] Windows更名为WSL,更多的意义是向用户传达MS这一侧使用何种技术来实现Linux原生程序运行在Windows下。
你可能会有疑问,WSL是发行版吗?WSL是VM吗?
答案都是否定的。上面那幅图你开启支持WSL后,WSL会伴随Windows 10一直运行而运行,WSL本质是上是系统层面对Linux内核进行支持,NT内核中为了实现对Linux的支持,也没有放入一个完整的Linux内核,而是LXCore、LXSS充当driver。
WSL引入Windows时间并不长,但是发展速度很快,越来越多的特性也得到了支持。想到这总让我有种似曾相识的感觉,当年GNU在Unix上开发了各种实用软件,可惜一直没有自己的内核,直到Linux出现了。经过多年发展,Linux平台上有了更多更好的工具,很多甚至是Linux独占。WSL的做法很想当年Linux内核接过GNU为Unix开发的实用工具自己发展壮大一样,未来谁知道呢,不过这一次,MS干得漂亮!
History of Windows Subsystems
Windows NT自成立以来,便支持多environment subsystems(eg. POSIX, OS/2 and Win32 subsystems)。以Win32 subsystems为例,Win32 subsystems向应用程序提供编程接口(programmatic interface),使上层应用不必依赖于内核实现细节。
早期的subsystems是以用户模式实现的,在上层应用与Windows NT内核之间“拉皮条”。将上层应用的API请求转换成对内核的系统调用。所有的应用程序都是PE/COFF可执行文件,或者作为库、服务。他们实现了subsystems像外“暴漏”API。当用户空间可执行文件启动时,loader会根据其header信息调用正确的subsystems来满足该可执行程序的环境、依赖等资源。后来POSIX这个subsystems被SUA(Subsystem for Unix-based Applications)替换,SUA由若干用户模式组件(user mode components)构成,包括:
- Process and signal management
- Terminal management
- System service requests and inter process communication
SUA的组要作用是鼓励应用程序在没有重大重写的情况下移植到Windows。其实现原理是:使用NT构造实现POSIX用户模式API。但是这有个弊端,由于这些组件(components)运行在用户模式下,原本针对Linux开发的应用程序,NT下很难为应用程序中那些系统调用实现优化或者加速,比如fork()。
随着时间的推移,最初的subsystems逐渐退役,但是Windows NT架构允许新的subsystems,因此可以在这个领域扩展或增强subsystems来满足需要,WSL就是这么诞生的。
Windows Subsystem for Linux
WSL是一堆组件的集合,他们协同工作,最终让你在Windows上运行原生Linux ELF64 二进制文件。WSL包括用户模式组件、内核模式组件,其职责:
- User mode session manager service that handles the Linux instance life cycle
- Pico provider drivers (lxss.sys, lxcore.sys) that emulate a Linux kernel by translating Linux syscalls
- Pico processes that host the unmodified user mode Linux (e.g. /bin/bash)
It is the space between the user mode Linux binaries and the Windows kernel components where the magic happens. By placing unmodified Linux binaries in Pico processes we enable Linux system calls to be directed into the Windows kernel. The lxss.sys and lxcore.sys drivers translate the Linux system calls into NT APIs and emulate the Linux kernel.
Windows Subsystem for Linux: Architectural Overview
Windows Subsystem for Linux: Process Architecture
Windows Subsystem for Linux - Syscall Translation
Windows Subsystem for Linux: File System
Windows Subsystem for Linux: Windows and Ubuntu Interoperability
WSL quick overview的更多相关文章
- A quick tour of JSON libraries in Scala
A quick tour of JSON libraries in Scala Update (18.11.2015): added spray-json-shapeless libraryUpdat ...
- Windows Automation API 3.0 Overview
https://www.codemag.com/article/0810042 While general accessibility requirements (such as font color ...
- 【HBase】HBase Getting Started(HBase 入门指南)
入门指南 1. 简介 Quickstart 会让你启动和运行一个单节点单机HBase. 2. 快速启动 – 单点HBase 这部分描述单节点单机HBase的配置.一个单例拥有所有的HBase守护线程- ...
- Windows And Video Memory
MSDN Blogs > Zemblanity > Windows And Video Memory Windows And Video Memory Tom_Mulcahy 11 F ...
- 使用SharePoint 2010 母版页
SharePoint 2010母版页所用的还是ASP.NET 2.0中的技术.通过该功能,实现了页面框架布局与实际内容的分离.虽然在本质上自定义母版页的过程和以前版本的SharePoint大致相同,但 ...
- 20 个值得一试的JavaScript 框架
投递人 itwriter 发布于 2011-09-26 17:46 评论(3) 有1956人阅读 原文链接 [收藏] « » 本文介绍 20 个值得一试的 JavaScript 框架,如果你认为答 ...
- Training Deep Neural Networks
http://handong1587.github.io/deep_learning/2015/10/09/training-dnn.html //转载于 Training Deep Neural ...
- Solr官方文档翻译-About & Getting Started
关于(About) 官方文档介绍了所有的Apache Solr实现的重要特性和功能.它是免费的,可以到http://lucene.apache.org/solr/下载. 为了更加的深入和广泛,设计成一 ...
- JavaScript闭包的底层运行机制
转自:http://blog.leapoahead.com/2015/09/15/js-closure/ 我研究JavaScript闭包(closure)已经有一段时间了.我之前只是学会了如何使用它们 ...
随机推荐
- 给kali的Metasploit下添加一个新的exploit
转载:https://blog.csdn.net/SilverMagic/article/details/40978081 首先在/usr/share/metasploit-framework/mod ...
- Egret自定义位图文字(自定义+BitmapLabel)
一 自定位图文字 因为egret的位图文字是texturemerger做的,需要多张单图片导入tm,然后导出两个文件来使用,过程比较麻烦. 而Laya的位图文字则是一张整图数字图片,使用FontCli ...
- javafx这些学会后,开发就不难了,往tablecloumn列中添加按钮,修改javafx中tableview中tablecell中的值,修改完回车表示保存到内存中
javafx开发过程中遇见难题,往tablecloumn列中添加按钮 想了很久的方法,也配有办法判断每行中有数据的地方添加按钮set bank_caozuo.setCellFactory((col)- ...
- 安装centos docker ce
安装centos docker ce 移除旧的版本: $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker- ...
- {Redis}NOAUTH Authentication required. Linux.cenOS
问题 [root@VM_0_12_centos redis]# ./bin/redis-cli -p 6379 127.0.0.1:6379> INFO NOAUTH Authenticatio ...
- DevExpress XtraReport - 动态加载报表布局模板
XtraReport的报表模板文件是.repx,下面的代码演示动态加载报表布局模板. XtraReport mReport = new XtraReport(); mReport.LoadLayout ...
- 元素高度变化使用动画transition
高度变化,使用transition,没有效果,可以使用max-height替换. 思路: 初始元素max-height:0; 不显示,父元素hover时,重新设置元素的max-height的值, 可以 ...
- Android Studio使用adb命令连接平板
有需要使用adb命令连接调试平板的同学可以参考下(下面是android官方文档,有点老). http://donandroid.com/how-to-install-adb-interface-dri ...
- linux减少服务器带宽的方法
linux减少服务器带宽的方法用百度静态资源公共库http://cdn.code.baidu.com/ 不仅可以不使用服务器流量 而且还有cdn加速比方说http://apps.bdimg.com/l ...
- 将笔记本无线网卡链接wifi通过有线网卡共享给路由器
1.背景 背景这个就说来长了,在公司宿舍住着,只给了一个账号,每次登录网页都特别麻烦(需要账号认证那种).然后每个账号只支持一个设备在线,这就很尴尬了,那我笔记本.手机.Ipad怎么办? 当然,这时候 ...