我是一名计算机科学工程专业的学生,我已经在 .NET Framework 上进行了 2-3 年的编程,但我没有使用过 Linux。我想,对于我最后一年的项目,Linux 发行版会很好。
当我想到这个疯狂的想法时,我正在考虑一些实现它的方法:
我们可以先在 Linux 内核上实现 .NET Framework 并使用它构建其余部分吗?
这可能是最奇怪的问题,但如果我提出的问题是正确的,请给我一个方法,如果我错了,请纠正我。
我是一名计算机科学工程专业的学生,我已经在 .NET Framework 上进行了 2-3 年的编程,但我没有使用过 Linux。我想,对于我最后一年的项目,Linux 发行版会很好。
当我想到这个疯狂的想法时,我正在考虑一些实现它的方法:
我们可以先在 Linux 内核上实现 .NET Framework 并使用它构建其余部分吗?
这可能是最奇怪的问题,但如果我提出的问题是正确的,请给我一个方法,如果我错了,请纠正我。
.NET 框架的功能太丰富了,如果没有从 libc 开始的大量用户空间助手,无法将其全部构建在裸 Linux 内核之上。恕我直言,对于单个学生的博士论文来说,这并非不可能,但过于雄心勃勃(如果您的目标是比博士学位更低的学位,那就更是如此)。
查看mono以了解 .NET 的独立于 Windows 的实现以及它所依赖的所有内容 - 并考虑如何在 Mono 的分支中,在论文的范围内自行减少(而不是消除;-)用户空间依赖关系您自己的(当然,假设任何论文顾问都会注册以支持您)。
对于您的问题的第一部分,您可能需要查看mono 项目,它是 c# 中 .net 的实现。
至于第二部分,我不知道您为什么要在 .net 中实现 Linux 内核。处理这件事似乎有点倒退。
如果您对在 c# 中实现操作系统感兴趣,请查看Singularity,它是用 c# 开发的研究操作系统
CLR(又名 .NET 框架)至少在 Linux 上用 Mono 实现过一次。
诚然,您可以制作一个发行 Mono 的 Linux 发行版,或者将 .NET 用于它的一些启动脚本/守护进程。那会很好。可能已经有人这样做了。
我看不出尝试在内核中运行托管代码会带来什么好处,可能没有。在内核中运行托管代码将非常困难,因为在内核的许多部分中,内存分配需要仔细进行——您可能没有足够的控制权。此外,默认情况下内核堆栈可能太小等。内核中有一些上下文根本不能进行堆内存分配。
您可以尝试修改内核,他使用单框架并仅在用户空间中运行托管代码。
您可以使用 Visual Studio .NET + Grasshopper 的组合来做到这一点。请检查此链接以获取更多信息。 http://dev.mainsoft.com/Default.aspx?tabid=45
.NET 框架包含许多实用程序类,如字符串或集合。
As transitioning from user space to kernel space comes at a cost, performance would actually get worse, unless you manage to run your whole application in kernel space.
Wouldn't wanna do a syscall every time I add something to a list, or check the length of a string.
使 Linux 内核运行的是 c 运行时库,因此添加单声道库和其他依赖项,我想它可以让它工作(至少使用 C#)。