在现代软件开发中,操作系统的构建和调试是一个复杂且充满挑战的过程。然而,Cosmos操作系统开发套件(OS Development Kit)为提供了一种全新的方法来构建操作系统。Cosmos并不是一个传统的操作系统,而是一个“操作系统开发套件”,或者更形象地说,是“操作系统乐高”。它允许开发者像使用Visual Studio创建应用程序一样,快速创建自己的操作系统。大多数用户可以在几分钟内编写并启动自己的操作系统,这一切都是通过Visual Studio实现的。
Cosmos的核心和内核例程主要是用C#编写的,这也是它名字的由来。尽管名字中有C#,但任何基于.NET的语言都可以使用,包括VB.NET、Fortran、Delphi Prism、IronPython、F#等。Cosmos提供了两种发行版:开发者套件(dev kit)和用户套件。开发者套件是为那些想要在Cosmos本身上工作的用户设计的,而用户套件则是为那些对构建自己的操作系统和进行一些Cosmos工作感兴趣的用户设计的。大多数用户应该从用户套件开始,因为它不像开发者套件那样令人望而生畏。
创建一个新项目,就像创建任何C#项目一样,但选择Cosmos作为项目类型。一个起始项目将被创建,它看起来非常像一个标准的C#控制台应用程序。在Program.cs
中包含了启动和执行代码。与看到Windows控制台窗口不同,将看到以下内容:
“这是操作系统在VMWare Player中运行!”Cosmos当然也可以启动在VMWare Workstation、Hyper-V、Virtual PC或真实硬件上。但默认情况下,Cosmos使用VMWare Player,因为它既免费又可靠。Cosmos甚至可以在Visual Studio中调试,即使在另一台机器上运行。
调试是操作系统开发中的一个重要问题。Cosmos团队不仅仅满足于征服构建和部署,希望使开发操作系统像开发Windows应用程序一样容易。调试基于Cosmos的操作系统应该让感到非常熟悉。让稍微修改一下项目,以展示效果,并设置一个断点。
现在再次运行项目。注意到执行停在了“一个”吗?那是因为在Visual Studio中,项目在断点处停止了。简单地按F5继续,就像在正常应用程序中一样!
除了断点,Cosmos还支持逐步进入(F11)。跟踪(F10)目前还不支持。
调试器使用串行端口进行通信。因此,调试只适用于支持串行端口的虚拟化环境,如VMWare。QEMU也支持串行端口,但其在Windows上的串行端口实现严重破损,使得使用QEMU调试变得不可能。要在真实硬件上调试,必须使用物理串行电缆。未来,Cosmos也将支持通过以太网调试。
Cosmos支持一些显式方法,可以用来与调试器通信并使用额外的功能。它通过在Cosmos.Kernel
程序集中的Cosmos.Debug
命名空间中的Debugger
类来访问。这个程序集被所有Cosmos项目使用。
C# 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开发中。