随笔-91  评论-137  文章-0  trackbacks-0
CosmosKernel是一个开源项目,意在使C#可以开发操作系统。它首先将C#代码编译为IL中间件,然后交由IL2CPU将IL中间件编译为可执行代码。

下面是测试步骤:
1.下载Userkit
2.安装Userkit
3.启动VS2010并创建CosmosKernelTest项目
4.我们为其编写一个Process的结构表示一个进程
 1     public class Process
 2     {
 3         protected string name;
 4         protected Process next;
 5 
 6         public Process(string name)
 7         {
 8             this.name = name;
 9         }
10 
11         public string Name
12         {
13             get
14             {
15                 return name;
16             }
17             set
18             {
19                 name = value;
20             }
21         }
22 
23         public Process Next
24         {
25             get
26             {
27                 return next;
28             }
29             set
30             {
31                 next = value;
32             }
33         }
34     }
5.我们创建一个ProcessSchedule类来保存Process表以及进行进程调度
 1     public class ProcessSchedule
 2     {
 3         protected Process Head = null;
 4         protected Process Tail = null;
 5         protected Process Current = null;
 6 
 7         public void AddProcess(Process P)
 8         {
 9             if (Head == null) Head = Tail = Current = P;
10             else
11             {
12                 P.Next = Head;
13                 Tail.Next = P;
14                 Tail = P;
15             }
16         }
17 
18         public void Schedule()
19         {
20             Console.Write(Current.Name + " ");
21             Current = Current.Next;
22         }
23     }
6.我们修改Kernel.cs文件的代码来实现进程调度
 1     public class Kernel : Sys.Kernel
 2     {
 3         protected ProcessSchedule ps = new ProcessSchedule();
 4 
 5         protected override void BeforeRun()
 6         {
 7             Console.WriteLine("Cosmos booted successfully. Type a line of text to get it echoed back.");
 8             Process ProcessA = new Process("ProcessA");
 9             Process ProcessB = new Process("ProcessB");
10             Process ProcessC = new Process("ProcessC");
11             ps.AddProcess(ProcessA);
12             ps.AddProcess(ProcessB);
13             ps.AddProcess(ProcessC);
14         }
15 
16         protected override void Run()
17         {
18             ps.Schedule();
19         }
20     }
7.选择编译为Release版本,并完成编译生成CosmosKernelTestBoot.iso光盘镜像文件
8.使用虚拟机调试这个操作系统,你会看到屏幕上3个进程在来回切换,但是速度非常快。于是我们为其添加一些循环来降低切换速度
1             for (int i = 0; i < 1000; i++)
2                 for (int j = 0; j < 1000; j++)
3                     for (int k = 0; k < 100; k++) ;
9.编译运行后可以看到运行结果


值得注意的是目前这个项目并不成熟,应此只能实现单任务的操作系统(即一个任务执行完成后再调度另一个任务)。

所有文件打包下载
posted on 2011-06-10 17:24 lwch 阅读(2058) 评论(8)  编辑 收藏 引用 所属分类: 操作系统

评论:
# re: CosmosKernel初探 2011-06-10 18:45 | myjfm
这个………………
中断向量表之类的?
表示没有看懂……  回复  更多评论
  
# re: CosmosKernel初探 2011-06-10 19:04 | lwch
@myjfm
因为这个项目还不成熟,应此不存在中断向量表  回复  更多评论
  
# re: CosmosKernel初探 2011-06-10 19:17 | myjfm
@lwch
那时钟终端默认是打开的?
另外保护模式是怎么进去的阿?
我还是不太明白咋用c#绕过保护模式那些东西的?  回复  更多评论
  
# re: CosmosKernel初探 2011-06-10 19:28 | lwch
@myjfm
我也没看过源码,应此不知道时钟是否已打开。
C#只负责将代码编译为IL,然后由IL2CPU转换为机器码。  回复  更多评论
  
# re: CosmosKernel初探 2011-06-10 19:31 | myjfm
@lwch
时钟中断肯定打开了吧?要不进程应该没办法调度
就是想知道保护模式如何进去的
继续加油阿~我们会持续关注的哦~  回复  更多评论
  
# re: CosmosKernel初探[未登录] 2011-06-13 09:28 | 饭中淹
感觉上就是一个给你做好基础引导和保护模式以及中断调用等部分,然后让你用C#写操作系统逻辑层的一个东西。

应该是《操作系统》课程教学用的吧。

不过不排除以后形成一个完善的操作系统。
  回复  更多评论
  
# re: CosmosKernel初探 2011-06-13 09:28 | 糯米
好彪悍!
中断管理,内存管理,文件系统,调度之类的是底层都给你实现好了的,不用操心的。
它相当于自己实现了一个小的OS和IL的虚拟机啊。
这个相当于可以在裸机上跑C#!  回复  更多评论
  
# re: CosmosKernel初探 2011-06-13 09:59 | lwch
@糯米
确实如此  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理