日期:2014-05-17  浏览次数:20843 次

【转载?共享】打破传统,C#也能开发操作系统!
/****************************************************************************************
前言:
我刚看了一遍文章——用C#或VB.NET开发你自己的操作系统,我觉得挺有意思的,现将文章翻译一下转载过来,
由于本人英语能力有限,部分有可能不准确,各位可以查看原文,只想与各位分享一下,顺便探讨一下可能性。
    原来国外早就有了用C#开发操作系统的探索,还开发出了原型机,我更有信心坚定学习C#的信心了!
****************************************************************************************/
原文地址:
http://www.codeproject.com/KB/cs/CosmosMS5.aspx

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

Cosmos介绍:
(注:Cosmos谷哥译为“宇宙”,个人觉得不好听,就采用原文名称)
Cosmos(C#开源管理操作系统)是用于Visual Studio及其开发环境的一个操作系统开发工具包。尽管使用C#作为名称,但可以使用基于.NET的任何语言包括VB.NET, Fortran, Delphi Prism, IronPython, F# 等等。Cosmos本身和内核程序主要是用C#编写的,就像它的名字。除此以外,NOSMOS (.NET Open Source Managed Operating System)的发音听起来很讨厌。

Cosmos并不是一个传统意义上的操作系统,恰好相反,它是一个“操作系统工具包”,或者像我喜欢说的“操作系统积木”。(注:积木,有些人喜欢将写程序称为搭积木)Cosmos让你创建操作系统就像Visual Studio和C#通常创建应用程序一样。全部使用Visual Studio(编写),大部分用户在短短几分钟之内就可以编写和启动他们的系统。里程碑5包括的新功能如Visual Studio里的集成项目类型,和集成调试。你可以在Visual Studio使用断点直接调试你的操作系统。

Cosmos 分为两个部分,一个是开发工具包(开发套件),另一个是用户套件。开发套件是为要想开发Cosmos本身而设计。用户套件是为那些对建立他们自己的操作系统感兴趣并做着和Cosmos相同的工作而设计的。开发套件可以被认为是一个Cosmos SDK。大多数用户应该从用户套件开始,因为它并不像开发套件一样反应热烈。本文侧重于用户套件。

编写你的第一个操作系统:
就像你创建其它C#项目一样创建一个新的项目,不过要选择Cosmos项目类型。



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



Program.cs中包含了启动和执行的代码。但在Windows控制台窗口中,你将看到如下:



这是你的操作系统在VMWare Player中运行!Cosmos当然也可以由虚拟工作站、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类库中断。

System.Diagnostics.Debugger.Break();


这两个方法会产生相同的结果。

调试输出:
调试字符串输出到主机的调试窗口。由于Cosmos还不支持watches(注:这个watches我有点不明白),但这个功能对监视变量值和执行无断点跟踪是非常有用的。