2010-12-21 62 views
27

我喜欢代码,但我目前只在做web开发。我希望做一些与网络编程相比独特而有趣的事情。如何编程操作系统?

是的,这可能是一个愚蠢的问题,但我认为构建一个非常简单的操作系统真的很酷。所以请不要说任何粗鲁的话。我只想知道以下几点:

*从哪里开始? *参考资料 *我可以使用哪种语言?

我通过阅读一些操作系统书想一些简单的像基于

+6

在开始接近编写实际控制台/“cmd”软件的位置之前,您将编写大量代码。 – Joe 2010-12-21 18:18:08

+6

感谢您的投票,这真的有帮助 – Kevin 2010-12-21 18:37:21

回答

2

当你为他们的谷歌有相当一些资源,但我会鼓励你不是迈出这一步呢!

要编写一个操作系统,即使是一个简单的操作系统,您也需要很好地理解您的计算机在低级别上的工作方式,而且您至少需要C或C++,最好还需要Assembly。没有这些技能,这将是一个乏味而令人沮丧的项目。即使对熟练的C程序员来说也很困难和具有挑战性。

5

这里有一些链接,让你开始:

http://www.brokenthorn.com/Resources

http://wiki.osdev.org/Main_Page/

你会需要GCC和NASM。 我想你也可以使用GASM。

学习BIOS中断。

而且之前,你甚至开始抢了一堆的标准,如: APIC A20门 PCI & PCIEX - 祝你好运试图获得其中的一个。花费一些改变。 英特尔& AMD - 看看这些,给你很多信息。 VGA ATA & SATA etc ...有很多。

也抢仿真器,如:Bochs的和QEMU

了解如何在计算机工作,也就是说,它是如何开机。

有很多信息,你只需要做你的研究。

祝你好运。

7

从webdev切换到后端将非常令人沮丧。

首先,选择一个电路板/硬件/体系结构 - 甚至可以使用可以在您的机器上运行的OS模拟器。学习C和一些程序集(intel,MIPS,ARM,coldfire/motorolla 68k),这取决于你在为哪种CPU架构构建你的操作系统。

我已经看到C++包允许你在C++中创建一个操作系统,然后自动将它转换为程序集,但是让它们正确转换是件很头痛的事情。我不会推荐他们。

在开始编写代码之前,您应该设计您的操作系统。甚至可以把你的设计决定放在一张带有一些图表的50页的论文中。

有些事情要考虑:

  • 存储器映射(确切位置在内存中,你加载操作系统的部分,在那里将它驻留)
  • 如何您的调度将工作(处理和/或线程感知,优先级)。也许是一个排队不同优先级的图表;如何进行进程间通信(邮箱,互斥体,原子性,同步与异步通信,格式为message envelopes {sender process id, receiver process id, message type, message}
  • 如何进行进程间通信(邮箱,互斥体,原子性,同步与异步通信,格式为message envelopes {sender process id, receiver process id, message type, message}
  • 如何处理内核和用户模式
  • 内存分配算法 - 您将编写自己的malloc/free操作符(如何在用户动态分配内存时保持跟踪?您会使用伙伴树算法?链表?堆栈?等等)
  • 如何处理中断(同时上下文切换进入 - 如何保存所有寄存器并恢复它们:你有一个栈需要跟踪你是对的话)
  • 标准工艺,其中:键盘过程中,监视器输出,定时,
  • 怎么加授时服务
  • 如何加载用户进程和运行它们
  • 添加抢占或不
  • 添加热键(有助于调试您的操作系统。在冻结的情况下,你可以添加热键检查内存)
  • 测试你的OS

编辑 - URL更新 开发自己的32位操作系统是绝版的,但可在网上: http://www.ipdatacorp.com/mmurtl/mmurtlv1.pdf

2

写操作系统很难。我建议在成为OS开发人员之前成为开发人员。您将需要了解C/C++和汇编以构建基本的操作系统。您将需要考虑如何使您的操作系统,即内核类型,实模式或保护模式,内存映射和许多其他事情。