日期:2014-05-20  浏览次数:21543 次

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

[b]用C#或VB.NET开发你自己的操作系统[/b]
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项目。

基于断点的代码:
C# code

Debugger.Break();


Break 可用于发布代码的中断,Visual Studio执行这条语句后就中断了。



由于Cosmos还不支持在IDE中的有条件的断点。有断点的代码在实施中非常有用。例如:
C# code

if (x == 5) {
    Debugger.Break();
}


或者,你可以调用NET类库中断。
C# code

System.Diagnostics.Debugger.Break();



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

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

Debugger.Send("Hello from Cosmos!");


当执行这句时,它会通过调试通道发送一条信息并显示在Visual Studio输出窗体上。



有什么收获?
确实没有收获。我这里运行的一切只是作个演示。没有使用实体模型。但是我们还有很多工作去做。我们当前的任务包括接口(foreach必备),文件系统(部分支持硬件)(注:partial support exists估计不太准确),线程,网络,和图形。我们拥有所有的原型和实验,但还没有一个被纳入Cosmos开发的主流程。

当我看到启动时Syslinux在做什么事情?
Cosmos没有在Linux上运行。被称为Syslinux的启动加载程序用以启动Cosmos。开机后, SYSLINUX不再使用。 SYSLINUX是一个引导加载程序,而不是一个Linux发行版。

获取Cosmos:
  ?Cosmos 网站:http://www.GoCosmos.org 
  ?源码 – 开发套件和用户套件:http://Cosmos.CodePlex.com

许可证:
本文,连同任何相关的源代码和文件是在BSD许可证下授权。

关于作者:Chad Z. Hower aka Kudzu
翻译:ohkuy

/*-----------------------