我一直想做的一件事是开发我自己的操作系统(不一定像Linux或Windows那样花哨,但比我已经完成的简单的引导加载程序更好).
我很难找到资源/指南,让你过去编写一个简单的"Hello World"操作系统.
我知道很多人可能会建议我看看Linux或BSD; 但是像这样的系统的代码库(大概)是如此之大,以至于我不知道从哪里开始.
有什么建议?
更新:为了让通过Google登陆此帖子的人们更容易,这里有一些操作系统开发资源:
编写自己的操作系统(感谢Adam)
Linux From Scratch(感谢John)
SharpOS(C#操作系统)(谢谢lomaxx)
OS Dev Wiki和论坛(感谢Steve)
BonaFide(谢谢史蒂夫)
布兰(谢谢史蒂夫)
滚动你自己的玩具UNIX克隆操作系统(谢谢史蒂夫)
其他资源:
我找到了一个名为MikeOS的好资源,"MikeOS是一个学习工具,用于演示操作系统的简单操作.它使用16位实模式进行BIOS访问,因此不需要复杂的驱动程序"
版权所有11/14/08
我在Freebyte的指南中找到了一些资源...免费和非免费的操作系统链接到OSKit和ExOS库等工具包.这些在开始OS开发时似乎非常有用.
2009年2月23日更新
Ric Tokyo在这个问题上推荐了nanoos.Nanoos是一个用C++编写的操作系统.
更新于3/9/09
Dinah为有抱负的操作系统开发人员提供了一些有用的Stack Overflow讨论:创建自定义操作系统的障碍讨论了在开发操作系统和操作系统开发时可能遇到的陷阱是一个更为一般性的讨论.
2009年7月9日更新
LB提供了Pintos项目的链接,Pintos项目是为学生学习OS开发而设计的教育操作系统.
2009年7月27日更新(仍然很强劲!)
我偶然发现了伯克利的在线操作系统课程,有23个讲座.
TomOS是MikeOS的一个分支,包括一些内存管理器和鼠标支持.作为MikeOS,它旨在成为一个教育项目.它是用NASM汇编程序编写的.
2009年8月4日更新
我发现幻灯片和其他材料与上面列出的在线伯克利讲座一致.
2009年8月23日更新 …
我注意到在Windows上执行文件(.exe或.dll)时,它被锁定,无法删除,移动或修改.
另一方面,Linux不会锁定正在执行的文件,你可以删除,移动或修改它们.
当Linux没有时,为什么Windows会锁定?锁定有优势吗?
当我使用UpdateModel或TryUpdateModel时,MVC框架足够聪明,可以知道您是否尝试将null传入值类型(例如,用户忘记填写所需的Birth Day字段).
不幸的是,我不知道如何覆盖默认消息"需要一个值".在总结中更有意义的事情("请输入您的出生日").
必须有一种方法可以做到这一点(没有编写过多的解决方法),但我找不到它.有帮助吗?
编辑
此外,我想这也是无效转换的问题,例如BirthDay ="Hello".
我最近开始深入研究低级OS编程.我(非常慢)目前正在编写两本较旧的书籍,XINU和构建自己的32位操作系统,以及我之前的问题,如何开始操作系统开发中的优秀SO人员建议的一些资源.
它可能只是我还没有在任何这些资源中遇到它,但可能是因为大多数这些资源是在无处不在的多核系统之前编写的,但我想知道的是中断如何在多核/多处理器系统中工作.
例如,假设DMA想要发出文件读取操作完成的信号.哪个处理器/内核确认发出中断信号?它是启动文件读取的处理器/核心吗?它是首先获得它的处理器/核心?
我主要是ac#/ .NET程序员,但我将要采取的业余爱好项目将涉及c编码.
我知道那里有很多c代码,但是如果你没有用这种语言"成长"的话,很难将结构良好的c项目与结构糟糕的项目分开.任何人都可以指向一个更新的,非平凡的(但不是巨大的)项目,它被认为是如何构建c代码的一个很好的例子吗?
编辑
如果您找不到项目,请随意用文字讨论您认为交流项目的结构.
我有一个C++ .NET应用程序和一个C#.NET应用程序.我希望他们通过共享内存进行通信.
.NET版本2.0怎么可能?
主要是想共享一个队列对象.
现在的LINQ to SQL是一个有点更加成熟,我想知道的人使用的是创建使用该技术的N层解决方案的任何技术,因为它似乎不那么明显了我.
我对实体框架很新,所以请耐心等待......
如何将来自不同上下文的两个对象关联在一起?
以下示例引发以下异常:
System.InvalidOperationException:无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象.
void MyFunction()
{
using (TCPSEntities model = new TCPSEntities())
{
EmployeeRoles er = model.EmployeeRoles.First(p=>p.EmployeeId == 123);
er.Roles = GetDefaultRole();
model.SaveChanges();
}
}
private static Roles GetDefaultRole()
{
Roles r = null;
using (TCPSEntities model = new TCPSEntities())
{
r = model.Roles.First(p => p.RoleId == 1);
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
使用一个上下文不是一个选项,因为我们在ASP.NET应用程序中使用EF.
我遇到了一个奇怪的问题....当我使用UpdateModel()或者TryUpdateModel(),一切正常.当我尝试绑定自己(例如MyObject.FirstName = collection["FirstName"])时,我收到"Object reference not set to an instance of an object"错误.
这有点难以解释,所以我将展示代码:
[HandleError]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
try
{
Model.Event evnt = new Redline.RedlineTimeAttack.Model.Event();
//When this is uncommented everything works fine.
//TryUpdateModel<Model.Event>(evnt);
//this will eventually lead to problems
evnt.Description = collection["Description"];
evnt.EndDate = enddate;
evnt.EventName = collection["EventName"];
evnt.IsActive = collection["IsActive"].Contains("true");
evnt.StartDate = startdate;
evnt.TrackId = trackId;
evnt.WebContent = collection["WebContent"];
if (!evnt.IsValid)
{
foreach (var error in evnt.GetRuleViolations())
{
ModelState.AddModelError(error.PropertyName, …Run Code Online (Sandbox Code Playgroud) .net ×2
asp.net-mvc ×2
c# ×2
kernel ×2
c ×1
filesystems ×1
linq-to-sql ×1
linux ×1
locking ×1
multicore ×1
osdev ×1
validation ×1
windows ×1