windows上的linux子系统(WSL)

一 介绍

Windows Subsystem for Linux(WSL)是一个用于在本地运行linux二进制可执行文件(ELF格式)的兼容层。与虚拟机相比,wsl没有虚拟硬件的过程,而是直接在windows上虚拟一个linux内核,模拟linux系统调用,以运行linux执行文件。因此效率要比虚拟机高,但是它使用的是自己实现的init进程而不是发行版的init进程,并且几乎没有实现任何系统服务,因此只适用于软件的开发,而不是作为桌面环境或生产性的服务器。

  • 并且wsl的目的也是如此,可以简单的将它理解为可以运行linux可执行文件的、类似于powershell的shell,具有互操作性(在linux中执行windows命令,在windows中执行linux命令)。
  • 在我看来,失去了发行版的init后,我们主要用到的是发行版的包管理器。

二 原理

2.1 wsl组件

在这里插入图片描述
wsl实现的组件涉及到了用户和内核模式。在Windows NT内核模式中,LXCore,LXSS这两个驱动提供了linux内核调用的实现,即将linux调用转化为对应的windows NT内核调用;还提供了两种文件系统:VolFs(挂载在/目录上,支持linux文件系统所有特性)和DriverFs(挂载在/mnt/c/mnt/d等等windows分区,主要为了支持系统间的互操作性);驱动还会模拟内核的行为,对linux进程进行调度。

在用户模式下,windows提供了一种特殊的进程类型:Pico进程,来支持linux进程的运行。windows会 “放松” 对该类型进程的控制,主要交由linux虚拟内核调用和管理,即隔离性(因此需要系统的支持,低版本的系统不能使用wls的功能)。pico会将ELF二进制可执行文件装入到自己的地址空间,然后执行在linux虚拟内核提供的兼容层上。一个pico对应一个linux进程,并且pico进程也是windows的一种特殊进程,因此你可以在任务管理器上看到linux进程。

无论exe还是elf格式的二进制文件,原理上都可以在同架构的cpu上执行,只是结构不同操作系统不能解析罢了。而Pico能够解析ELF格式的二进制文件,只需要linux虚拟内核能够提供正确的系统调用,就能够运行大部分linux命令。

LXSS管理服务主要用于协调windows和linux进程之间的关系,和给于Bash.exe(并不是shell,只是我们访问wsl的入口)调用linux命令的接口。所有的运行的linux进程都会被加入到叫Linux实例(应该有LXSS记录的)中,只有第一次请求访问linux进程时才会创建Linux实例,才会创建init进程;当window关机时,会自动关闭linux实例,即关闭linux所有进程。

也就是wsl不会随windows系统自启而自启,同时没有使用发行版的init进程,导致wsl中没有服务的存在。

2.2 wsl运行过程

在这里插入图片描述
linux中正常的启动过程是引导程序载入内核,内核初始化后载入init进程,init进程开启各项服务,将系统配置到用户可用的状态,如多用户登录、图形界面登录等。此时linux自启完成,接着等待用户的登录,并且登录方式多种,如控制台登录、ssh登录、虚拟终端登录等等。

而wsl并不是一个真正的系统,而只是windows的一部分,可以执行linux二进制可执行文件。内核也是虚拟出来的,但是具有一定隔离性,如linux进程由虚拟内核调度,也具有互操作性。

因此当windows自启结束并加载了上述LxCore、LXSS两个驱动后,已经能够提供linux进程系统调用了。此时wsl的init进程(windows自己实现的)并不会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值