我是一名计算机科学工程专业的学生,我已经在.NET Framework上编程了2到3年,但我还没有使用过Linux。我想,对于我的最后一年项目,一个Linux发行版会很好。
当我想到这个疯狂的想法时,我正想着实现它的几种方法:
我们可以先在Linux内核上实现.NET Framework,然后使用它构建其余的吗?
这可能是最奇怪的问题,但如果我在询问问题并且在错误时纠正我,请给我一个方法。
答案 0 :(得分:6)
.NET框架的功能太丰富了,无法在一个裸Linux内核上构建它,而没有从libc开始的大量用户空间助手。对于一个学生的博士论文来说,并非如此雄心勃勃,恕我直言,如果你的目标是学位低于博士学位,那就更加雄心勃勃了。
查看mono与Windows无关的.NET实现及其所依赖的内容 - 并考虑如何在论文的范围内减少(而不是消除;-)用户空间依赖性,在你自己的Mono分支中(假设任何论文顾问当然会注册为你提供支持)。
答案 1 :(得分:3)
对于问题的第一部分,您可能需要签出mono project,这是c#中.net的实现。
至于第二部分,我不知道你为什么要在.net中实现Linux Kernal。这似乎是一种向后接近事物的向后方式。
如果您对在c#中实现操作系统感兴趣,请查看Singularity这是一个用c#开发的研究操作系统
答案 2 :(得分:1)
CLR(又名.NET框架)已经在Linux上以Mono实现了至少一次。
是的,你可以制作一个发布Mono的Linux发行版,或者使用.NET作为它的一些启动脚本/守护进程。那没关系。有人可能已经这样做了。
我没有看到尝试在内核中运行托管代码的确切优势,可能没有。在内核中运行托管代码将非常困难,因为在内核的许多部分需要仔细进行内存分配 - 您可能没有足够的控制权。此外,内核堆栈在默认情况下可能太小等。内核中有一些上下文,根本不能进行堆内存分配。
答案 3 :(得分:0)
您可以尝试修改内核,他使用mono-framework并在用户空间中仅运行托管代码。
答案 4 :(得分:0)
您可以使用Visual Studio .NET + Grasshopper的组合来完成此操作。 请查看此链接以获取更多信息。 http://dev.mainsoft.com/Default.aspx?tabid=45
答案 5 :(得分:0)
.NET框架包含许多实用程序类,如字符串或集合。
当从用户空间过渡到内核空间需要付出代价时,性能实际上会变差,除非您设法在内核空间中运行整个应用程序。
每次我在列表中添加内容时都不想进行系统调用,或者检查字符串的长度。
答案 6 :(得分:-1)
Linux内核运行的原因是c运行时库,所以添加单声道库和其他依赖项,我想它可以让它工作(至少使用C#)。