如何编程操作系统?

时间:2010-12-21 18:10:50

标签: operating-system

我喜欢编码,但我目前只做网络开发。我想做一些独特而有趣的事情,与网络编程有很大的不同。

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

*从哪里开始? *资源 *我会使用哪种语言?

我在想像基于cmd的简单

7 个答案:

答案 0 :(得分:19)

操作系统设计上的绝对“圣经”是Andrew Tanenbaum的Operating Systems Design and Implementation - “龙”书: - )

alt text

还有很多其他参考资料,例如: Developing Your Own 32-Bit Operating System

Microsoft Research还有一个关于在托管代码(C#)中创建名为Singularity的操作系统的项目 - 可能会提供一些见解/论文等。

编写完整的操作系统既不是一件微不足道的事,也不是一件快速的事,不过.....

答案 1 :(得分:9)

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

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

我已经看过C ++软件包,它允许你用C ++编写一个操作系统,然后自动将它转换为汇编,但要让它们正确转换是一件令人头痛的问题。我不推荐他们。

在开始编写代码之前,您应该设计自己的操作系统。也许甚至可以将你的设计决定放在50页的纸上,并附上一些图表。

需要考虑的一些事项:

  • 内存映射(在内存中确切地加载操作系统的部分内容;它将驻留在哪里)
  • 您的调度程序如何工作(进程和/或线程感知,优先级)。也许是一个包含不同优先级队列的图表;还有一个不同队列中的进程状态图(就绪,阻塞,等待消息,运行,执行,中断等)
  • 如何进行进程间通信(邮箱,互斥,原子性,同步与异步通信,message envelopes {sender process id, receiver process id, message type, message}的格式)
  • 如何处理内核与用户模式
  • 内存分配算法 - 您将编写自己的malloc / free运算符(当用户动态分配内存时如何跟踪?你会使用伙伴树算法吗?链表?堆栈等等)
  • 如何处理中断(这里也有上下文切换 - 你将如何保存所有寄存器并恢复它们:你需要一个堆栈来跟踪它在哪里)
  • 标准流程:键盘流程,监控输出,时序,
  • 如何添加时间服务
  • 如何加载用户进程并运行它们
  • 是否添加抢占
  • 添加热键(用于调试您的操作系统,如果它冻结,您可以添加热键来检查内存)
  • 测试您的操作系统

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

答案 2 :(得分:5)

以下是一些可以帮助您入门的链接:

http://www.brokenthorn.com/Resources

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

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

学习BIOS中断。

在开始之前,你还要开始采用一系列标准,例如: APIC A20门 PCI& PCIEx - 试图获得其中一个好运。花费一些变化。 英特尔& AMD - 看看这些,给你很多信息。 VGA ATA& SATA 等......有很多。

还可以抓取以下模拟器:bochs和qemu

了解计算机的工作原理,即它是如何启动的。

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

祝你好运。

答案 3 :(得分:3)

首先阅读一些操作系统书籍 - 如Tanenbaums'Modern operating systems

这可以让您了解编写操作系统时需要解决的问题。

答案 4 :(得分:2)

我想你最好开始探索Andrew S. Tanenbaum's工作。

答案 5 :(得分:2)

当你谷歌为他们提供相当多的资源时,我会鼓励你采取这一步骤!

对于编写操作系统,即使是简单操作系统,您也需要很好地理解计算机的工作原理,并且至少需要C或C ++,最好是装配。没有这些技能,这将是一个乏味和令人沮丧的项目。即使对于熟练的C程序员来说,它也很难并且具有挑战性。

答案 6 :(得分:2)

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