这个操作系统切换是如何完成的?

这个操作系统切换是如何完成的?

那里*演示了在多个正在运行的操作系统之间切换比格犬板. 他们的 wiki 上的信息也很少这里

我想知道他们使用什么技术来实现这一点……

它类似于某种虚拟化,但由于所用 CPU 的性能较低,因此不太可能。似乎只有一个系统同时运行。所有操作系统都是基于 Linux 的,因此它可能使用相同的运行内核和某种用户空间切换。


*)警告:来源是法语-英语

答案1

提到 RAM 限制使得难以同时运行 3 个操作系统,这表明它们都加载到了 RAM 中。我们还有这样一句话:“到目前为止,当 AIOS 和 Android 同时运行时,无法使用 beagleboard 的 GPU。当从 AIOS 启动 Android 时,我们确实需要卸载 3D 内核模块,以便 Android 可以全程使用它们。”

因此,我怀疑设备运行的 Beagleboard 操作系统充当了裸机虚拟机管理程序,虚拟化了客户操作系统。具体来说,客户操作系统在名为半虚拟化就 PV 而言,虚拟机管理程序实际上并未虚拟化计算机硬件。相反,客户操作系统运行一个专为直接与虚拟机管理程序交互而构建的内核,而不是像往常一样与硬件交互。

这种系统的一个例子是Xen 虚拟机管理程序,一个开源项目,实际上开发了半虚拟化(如果我没记错的话)。由于 Xen 是一个“裸机虚拟机管理程序”,它的行为有点像操作系统本身,因为它直接启动(而不是在另一个操作系统中运行)。Linux 操作系统可以用domU内核或者客户内核然后使用 Xen 而不是直接使用硬件执行 I/O。操作系统运行良好,因为内核可以完成内核应该做的所有事情,但由于没有虚拟化硬件,因此严格意义上来说这不是虚拟化。因为 Xen 不必浪费时间假装是主板(以及主板上的所有东西和连接到主板的东西),所以开销比完全虚拟化的环境要少得多(因此对性能的影响要小得多)。

由于需要构建内核才能在这样的环境中工作,因此客户操作系统通常基于 Linux。不过,也可以使用其他操作系统,只是更困难。例如,已经开发了一整套驱动程序来在 Xen PV 上运行 Windows。

回到这个问题,因为 Xen 非常流行并且是 FOSS,所以如果 Beagleboard 系统直接基于 Xen 或 Xen 的组件,我不会感到惊讶。

答案2

好吧,最后我不得不自己去深入研究它。

所采用的“虚拟化技术”只是chroot

系统可以在启动时从菜单中选择。每个系统都有自己的只读映像(包括内核映像和模块,都是同一版本)和磁盘上单独目录中的squashfs读写覆盖。aufs

然而,只有一个系统,即主操作系统 -人工智能操作系统不断创新的操作系统,导数埃分布),能够启动/切换到另一个。可以通过“人工智能多重操作系统“菜单,它是一个简单的 Qt 应用程序,只是一个启动几个 shell 脚本的界面。检查它们表明,启动另一个系统只是准备系统的 chroot 目录,在那里挂载它的 suqashfs 映像和 aufs 目录,绑定(mount --bind)必要的系统目录(如/dev,,/proc...)并 chrooting 到它。例如,启动 Ubuntu 系统时创建它的 chroot 结构,将初始化脚本粘贴到其中(其中包含启动服务,如dbus,,hal... 通过运行结束Xsession)。然后,启动另一个 X11 服务器,并使用特定的显示号(:2在本例中)启动xinit。最后,它使用提到的初始化脚本进行 chrooting。

因此,从主 AI OS 启动的系统只是在 AI OS 之上运行的 chroot 环境 - 它与在启动期间选择的自行运行的环境不同。

现在,在正在运行的系统之间切换(通过 AI OS 中的多系统菜单应用程序,或使用板载硬件按钮)只是在系统的 X11 虚拟终端(通过处理ps avx输出找到)之间切换chvt。停止系统只是终止所有相应的 chroot 进程(所有基本系统的进程,其与/proc/$PID/root“虚拟”系统的 chroot 目录匹配)。

..希望我没有搞错,我实际上并没有运行系统,只是检查图像和一些源代码。

一些参考链接:

相关内容