Windows原生运行Linux的技术细节

2023-11-06 20:48

本文主要是介绍Windows原生运行Linux的技术细节,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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:架构概述。

原文地址:http://www.infoq.com/cn/news/2016/05/linux-windows


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

这篇关于Windows原生运行Linux的技术细节的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/358969

相关文章

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4