使用 C# 或 VB.NET 开发自己的操作系统






4.94/5 (156投票s)
使用 C#(或 VB.NET 等)和 Visual Studio 开发你自己的操作系统!
介绍 Cosmos
Cosmos (C# 开源托管操作系统) 是一个操作系统开发套件,它使用 Visual Studio 作为开发环境。尽管名称中包含 C#,但任何基于 .NET 的语言都可以使用,包括 VB.NET、Fortran、Delphi Prism、IronPython、F# 等。Cosmos 本身和内核例程主要用 C# 编写,因此得名 Cosmos。除此之外,NOSMOS (.NET 开源托管操作系统) 听起来很蠢。
Cosmos 并非传统意义上的操作系统,而是一个“操作系统套件”,或者我更喜欢称之为“操作系统乐高”。Cosmos 让你创建操作系统,就像 Visual Studio 和 C# 通常让你创建应用程序一样。大多数用户只需几分钟就能编写并启动自己的操作系统,所有这些都可以使用 Visual Studio 完成。里程碑 5 包括新功能,例如 Visual Studio 中的集成项目类型以及集成的调试器。你可以直接从 Visual Studio 中使用断点来调试你的操作系统。
Cosmos 有两个发行版:开发者套件 (dev kit) 和用户套件 (user kit)。开发者套件专为想要在 Cosmos 上工作的用户设计。用户套件专为那些有兴趣构建自己的操作系统并进行一些 Cosmos 工作的人设计。开发者套件可以被视为 Cosmos SDK。大多数用户应该从用户套件开始,因为它不像开发者套件那样令人不知所措。本文重点介绍用户套件。
编写你的第一个操作系统
像创建任何 C# 项目一样创建一个新项目,但选择 Cosmos 作为项目类型。

将创建一个入门项目。它看起来非常像一个标准的 C# 控制台应用程序。

Program.cs 包含启动和执行代码。你不会看到 Windows 控制台窗口,而是会看到以下内容:

这是你在 VMWare Player 中运行的操作系统!Cosmos 当然也可以在 VMWare Workstation、Hyper-V、Virtual PC 或真实硬件上启动。但默认情况下,Cosmos 使用 VMWare Player,因为它既免费又可靠。Cosmos 甚至可以在 Visual Studio 中进行调试,即使在另一台机器上运行时也是如此。
集成调试
调试是操作系统开发中的一个主要问题。Cosmos 团队并不满足于仅仅征服构建和部署,我们希望使操作系统开发像开发 Windows 应用程序一样容易。调试基于 Cosmos 的操作系统应该让你感觉非常熟悉。让我们稍微修改一下我们的项目来展示效果,并设置一个断点。

现在再次运行项目。

请注意,执行停在了“One”?这是因为在 Visual Studio 中,我们的项目已在断点处停止。只需按 F5 继续,就像在普通应用程序中一样!
除了断点,Cosmos 还支持逐行进入 (F11)。目前还不支持逐过程 (F10)。
调试器通信
调试器使用串口进行通信。因此,调试仅适用于支持串口的虚拟化环境,如 VMWare。QEMU 也支持串口,但其串口实现存在严重的错误,在 Windows 上调试是无法通过 QEMU 完成的。要在真实硬件上进行调试,你必须使用物理串口线。将来,Cosmos 还将支持通过以太网进行调试。
额外调试
Cosmos 支持一些显式方法,可用于与调试器通信并使用附加功能。它可以通过 `Cosmos.Kernel` 程序集中的 `Cosmos.Debug` 命名空间中的 `Debugger` 类来访问。所有 Cosmos 项目都使用此程序集。
基于代码的断点
Debugger.Break();
`Break` 可用于发出基于代码的断点。Visual Studio 将在该语句之后的行中断。

由于 Cosmos 尚未在 IDE 中支持条件断点,因此基于代码的断点在实现这些功能方面非常有用。例如:
if (x == 5) {
Debugger.Break();
}
或者,你可以调用 .NET 类库的 break 方法
System.Diagnostics.Debugger.Break();
这两个函数都会产生相同的结果。
调试输出
调试字符串可以输出到主机的调试窗口。由于 Cosmos 目前不支持监视,因此此功能对于监视变量值和在没有断点的情况下进行跟踪非常有帮助。
Debugger.Send("Hello from Cosmos!");
执行此行时,它将通过调试通道发送一条消息,该消息将出现在 Visual Studio 输出窗口中。

有什么陷阱吗?
真的没有陷阱。我在这里展示的所有内容都已按所示功能运行。没有使用模拟图。但是,我们仍然有很多工作要做。我们当前任务列表中的项目包括接口(`foreach` 所必需的)、文件系统(部分支持)、线程、网络和图形。我们为每个项目都有原型和实验,但截至目前,还没有一个被整合到 Cosmos 的主线开发中。
我启动时看到的 Syslinux 是什么?
Cosmos 不在 Linux 上运行。一个名为 Syslinux 的引导加载程序被用来引导 Cosmos。引导后,Syslinux 不再使用。Syslinux 是一个引导加载程序,而不是一个 Linux 发行版。
获取 Cosmos
- Cosmos 网站 - http://www.GoCosmos.org
- 源代码 - 包括开发者套件和用户套件 - http://Cosmos.CodePlex.com