必威电竞|足球世界杯竞猜平台

wsl
來源:互聯網

WSL是Windows Subsystem for Linux的簡稱,它是Windows的一項功能,可用于在Windows計算機上運行Linux環境,而無需單獨的虛擬機或雙引導。WSL旨在為希望同時使用Windows和Linux的開發人員提供無縫高效的體驗。該功能集成了Windows和Linux,與傳統的虛擬機相比,同時啟動兩個操作系統時,所需的資源(CPU、內存、存儲)更少。WSL必須在Windows 10版本2004及更高版本(內部版本19041及更高版本)或Windows 11才能使用。

2016年8月,微軟在Windows 10上推出WSL,使用的是現在稱為“WSL1”的體系結構。WSL1作為一個轉換層運行,在Windows內核上使用一個Linux內核接口。可將WSL1視為一個兼容層,用于模擬在Windows環境中運行Linux二進制文件的系統調用。2019年5月,微軟發布了WSL2。WSL2引入了對WSL體系結構的重要更改,包括在一部分Hyper-V功能中使用真正的Linux內核。WSL2現在是在Windows上安裝Linux分發版時使用的默認體系結構。

介紹

WSL提供了一個微軟開發的Linux兼容內核接口(不包含Linux代碼),來自Ubuntu的用戶模式二進制文件在其上運行。

該子系統不能運行所有Linux軟件,例如那些圖形用戶界面,以及那些需要未實現的Linux內核服務的軟件。不過,這可以用在外部X服務器上運行的圖形X Window系統緩解。

此子系統起源于命運多的Astoria項目,其目的是允許Android應用運行在Windows 10 Mobile上。此功能組件從Windows 10 Insider Preview build 14316開始可用。

歷史

在設計之初,微軟就允許類似于win32這種子系統運行于windows NT內核之上,它可以為上層應用提供編程接口,同時避免應用去實現內核里的一些調用細節。NT內核的設計在最開始就可以支持POSIX,OS/2和win32子系統。

早先的子系統是用戶態模塊的實現,它封裝了NT系統的系統調用為應用程序提供編程接口。所有的應用程序都是PE/COFF(一些為子系統封裝NT系統調用的庫和服務)可執行的。當一個用戶態的程序啟動的時候,啟動器就會基于可執行的頭部去引用適當的子系統來滿足應用程序的依賴。

后來版本的子系統替換掉了POSIX層,由用戶態組件提供了Subsystem for Unix-based Applications (SUA),滿足:

1.進程和信號管理

2.終端管理

3.系統服務請求和進程間通信

SUA的主要目的是為了鼓勵應用程序移植到Windows上能盡量少的重寫。這已經通過實現POSIX用戶態API達到了。考慮到這些組件是用戶態實現,很難跟內核態的系統調用(比如fork())在語義上和效率上完全相對應。因為這種模式需要程序重新編譯,它需要持續的功能移植,維護也是負擔。

隨著時間的演變,這些早先的子系統都退出歷史舞臺了。但是因為WIndows NT內核的架構允許新的子系統環境,我們就基于這領域的原始積累進行擴展,發展Windows Subsystem for Linux。

包含內容

Windows Subsystem for Linux

WSL是一些組件的集合,允許原生的Linux ELF64二進制文件跑在Windows上。它同時包括了用戶態和內核態組件,主要包含以下部分:

1.用戶態會話管理服務處理Linux實例的生命周期

2.PICO provider drivers (lxss.sys, lxcore.sys)“翻譯”系統調用,以模擬Linux內核

3.Pico進程管理原生的用戶態Linux(比如/bin/bash)

奇跡就發生于用戶態的Linux二進制文件和Windows內核組件之間。通過將未經修改的Linux二進制文件放置于Pico進程中,我們把Linux系統調用直接導入Windows內核中。lxss.sys,lxcore.sys驅動將Linux系統調用翻譯為NT APIs,來模擬Linux內核。

Pico進程

作為Project Drawbridge的一部分,Windows內核引入了Pico進程和Pico驅動的概念。Pico進程和驅動提供了Windows Subsystem for Linux的基礎。可執行的ELF二進制文件被加載到Pico進程的地址空間,并在系統調用的Linux兼容層上執行。

系統調用

WSL基于Windows NT內核虛擬了Linux內核接口,這允許它執行未經修改的Linux ELF64二進制文件。一類內核接口是系統調用。系統調用是內核為用戶態程序提供的一種服務。Linux內核和Windows NT內核都為用戶態程序提供了幾百個系統調用,但是他們有不同的語義,并且一般來說并不直接兼容。比如Linux提供fork, open和kill,Windows NT提供相兼容NtCreateProcess, NtOpenFile和 NtTerminateProcess。

Windows Subsystem for Linux 包含內核態驅動(lxss.sys和 lxcore.sys),以協調Linux系統調用的請求與Windows NT內核。驅動不包含Linux內核代碼,但是是一個全新實現的Linux兼容的內核接口。在原生的Linux上,用戶態程序請求一個系統調用,系統調用請求由Linux內核處理。在WSL,當一個系統調用由同一個可執行文件請求時,Windows NT內核把請求發送給lxcore.sys。當可能時,lxcore.sys將Linux系統調用翻譯成等價的Windows NT的調用,由它來完成繁重的工作。當沒有可能的等價轉換時,Windows內核態驅動需要直接處理請求。

比如說,Linux中的fork()系統調用沒有直接的等價的windows版本。當一個fork系統調用由Windows Subsystem for Linux產生時,lxcore.sys需要做一些復制進程的準備工作,然后調用Windows NT內核APIs來產生一個進程來正確實現fork操作,完成為新進程復制額外的數據。

文件系統

WSL支持的文件系統需要滿足兩個目標。

1. 提供一個完全支持Linux文件系統的環境

2. 能夠與Windows上的設備和文件互通

Windows Subsystem for Linuxt提供與真實Linux內核類似的虛擬文件系統。在用戶的系統上,我們提供了兩個文件系統:VolFs 和 DriveFs。

VolFs

VolFs提供了完整的Linux文件系統特性的支持,包括:

1. Linux權限管理,訪問權限可以通過如chmod和chroot來改變

2. 文件的符號鏈接

3. 文件名可以包含一些Windows上不合法的符號

4. 大小寫敏感

包含Linux系統的目錄,應用程序文件(/etc, /bin, /usr等)和用戶Linux家目錄都使用的是VolFs。

與Windows應用和文件的互用在VolFs里并不支持。

DriveFs

DriveFs是為了和windows互用的文件系統。它需要所有的文件名是合法的windows文件名,使用Windows安全策略,并不完整地支持所有的Linux文件系統特性。文件名是大小寫敏感的,用戶不允許創建僅僅是大小寫不同的兩個文件。

所有的Windows磁盤使用DriveFs被掛在到/mnt/,/mnt/d等等下面。用戶從這里可以訪問所有Window下的文件。這允許用戶用他們喜歡的Windows編輯器比如Visual StudioCode來編輯文件的同時,通過Bash里的一些開源工具來修改文件。

參考資料 >

What is the Windows Subsystem for Linux?.Microsoft Learn.2024-03-21

什么是適用于 Linux 的 Windows 子系統?.Microsoft Learn.2024-03-21

什么是 WSL?.Microsoft Learn.2024-03-21

安裝 WSL 命令.如何使用 WSL 在 Windows 上安裝 Linux.2024-03-21

Bash on Ubuntu on Windows.微軟官網.2017-01-03

生活家百科家居網