张墨轩的技术宅

不忘初心,方得始终

Docker Desktop for Windows(以wsl2为后端) 简要分析

前置知识1: linux启动过程是内核+boot文件系统先启动,等内核加载好后,卸载boot文件系统,加载根文件系统(包含各种发行版套件)

前置知识2: linux内核和linux操作系统其实是有区别的,对于一个完整的linux操作系统来说,其实是由linux内核+发行版套件构成

前置知识3: 一般来说,虚拟机分成核心和管理软件两部分,管理软件可以管理虚拟硬件,镜像等等

前置知识4:
wsl1: 是在应用层模拟了POSIX API行为,在应用层看上去像是linux,实际不是真的linux
wsl2: (用的Hyper-V核心,和微软定制的linux内核),是真的linux


常规的虚拟机模式:
windows -> VirtualBox/vmware/Hyper-V --> (linux内核+boot文件系统+linux根文件系统)
常规情况下,你在虚拟机上安装系统,比如通过iso镜像安装系统,这个iso镜像里面就包括了(linux内核+boot文件系统+linux根文件系统)

wsl2模式:
windows -> (Hyper-V核心+微软定制linux内核+微软定制boot文件系统) --> linux根文件系统(微软定制,包含各种发行套件)
可以将wsl2看成是微软高度优化过的一种linux专用虚拟机,wsl2是(Hyper-V核心+微软定制linux内核+微软定制boot文件系统)组合构成,在wsl2上安装系统,比如安装Ubuntu,其实只是安装包含Ubuntu套件的根文件系统而已,如下:
windows -> wsl2(Hyper-V核心+微软定制linux内核+微软定制boot文件系统) -> linux根文件系统(包含ubuntu套件)

可以用如下命令查询发行版的版本:
cat /etc/issue
Ubuntu 22.04.1 LTS \n \l


Docker Desktop for Windows:
windows -> wsl2(Hyper-V核心+微软定制linux内核+微软定制boot文件系统) -> linux根文件系统(包含基于LinuxKit构建的Docker套件)

可以用如下命令查询发行版的版本:
cat /etc/issue

Welcome to LinuxKit

## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
{ / ===-
\______ O __/
\ \ __/
\____\_______/



可以看到,上面两个例子中的linux操作系统是共享一个内核的,也就是wsl2中微软定制的linux内核,可以分别在两个系统的命令行中用命令查看,都是同样的输出:
cat /proc/version
Linux version 5.15.90.1-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Fri Jan 27 02:56:13 UTC 2023


总结:
1.安装wsl2,本质是启用Hyper-V核心和安装微软定制的linux内核和boot文件系统
2.在wsl2上安装Ubuntu,本质是下载安装包含Ubuntu发行版内容的linux根文件系统
3.安装Docker Desktop for Windows,本质是安装包含LinuxKit定制的docker容器套件的linux根文件系统

当你在windows下运行容器:
windows(真机) -> wsl2(Hyper-V核心+微软定制linux内核+微软定制boot文件系统) -> linux根文件系统(基于LinuxKit构建的Docker套件) -> 各种容器应用

当你在windows下运行Ubuntu,并在Ubuntu下管理容器:
windows(真机) -> wsl2(Hyper-V核心+微软定制linux内核+微软定制boot文件系统) -> linux根文件系统(包含ubuntu套件) -> docker客户端 -> 虚拟机间通讯

此时,你的windows系统上实际至少跑了2台虚拟机!

虚拟化产品(一拖二)控制板固件


上篇文章大体介绍了一拖二产品的各个方面,文章提到了控制板是一个核心的控制部件,这里主要从原理图的角度介绍下控制接口,具体的固件代码可以在以下地址找到:

https://github.com/phonegapX/vmctl-stm32

虚拟化产品(一拖二)

最近一直在忙一拖二虚拟化产品,终于完成了一套可以正常使用的DEMO。那么到底什么是一拖二,简单来说就是一台PC机器可以两个人同时使用,各自看电影玩游戏互相不影响,而且性能也不错,就好像每个人都拥有一台真实的电脑一样。为了实现这个目标当然需要利用虚拟化技术,一台真实PC上运行两个虚拟机分别给两人使用,PC主板需要支持VT-D技术,这样才能进行设备直接分配,另外主板休眠状态需支持 S1 和 S3,这样当虚拟机都处于关机状态的时候真实主机可以进入S3休眠状态,可以省电,才有实战价值。然后我们需要在主板上插两片显卡,每片显卡接一台独立的显示器,每个虚拟机独立使用一片显卡,这样才能保证有最好的显示性能。另外还需要在主板上插一块PCIE转USB的扩展卡,因为主板上的USB接口数量有限,如果同时给两台虚拟机用的话会很紧张,无法满足实际需求,所以多插一块PCIE转USB的扩展卡,这样主板上自带的USB接口就可以全部分配给1号虚拟机使用,而PCIE转USB的扩展卡上的USB接口就可以分配给2号虚拟机使用,这样每台虚拟机就都有了足够的USB接口使用了。然后需要2套鼠标键盘(USB接口)分别接到两台虚拟机各自的USB接口上,然后在两台虚拟机各自的USB接口上各自接上一套USB接口的耳机,这样声音也有了。到此硬件似乎都配置好了,其实不然,还有一个非常关键的部件,那就是开关,每台虚拟机都需要一套独立的开关系统可以开机关机重启等而不会互相影响,那要怎么才能实现这个功能,这就需要开发一个控制板,虚拟机对应的开关都接到这块控制板上,然后控制板通过串口与PC主板进行连接,当用户按了某台虚拟机对应的开关后,控制板就能检测到信息,包括是哪台虚拟机的开关被按下了,是按的电源键还是重启键等等,控制板得到这些信息后通过串口传给PC主板,而PC主板上会运行着我们的Hypervisor或者也叫VMM(虚拟机监视器),这里面会包含我们自己开发的一个程序,这个程序会监听串口,所以当这个程序通过串口收到控制板发来的信息后,就知道该如何操控虚拟机了,比如打开2号虚拟机,或者关闭1号虚拟机等等。控制板还有另外一个重要功能就是控制真实的主板开关机。为了研发控制板,又重新拾起好久没有弄过的单片机技术,从原理图到开发板,到固件开发与调试,也弄了挺长时间,当然可以考虑采用51系列单片机,但是我为了与时俱进直接上的STM32平台。至此硬件环境已经都准备好了,接下来就是软件部分了,软件主要指的就是虚拟化软件了,这个还是有一些可选项:

«1»

Powered By Z-Blog 2.2 Prism Build 140101

Copyright phonegap.me Rights Reserved.