如何编程操作系统?

Kev*_*in 33 operating-system

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

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

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

我在想一些简单的基于cmd的东西

mar*_*c_s 19

操作系统设计的绝对"圣经"是Andrew Tanenbaum的操作系统设计和实现 - "龙"书:-)

替代文字

还有很多其他参考资料,例如开发自己的32位操作系统.

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

编写完整的操作系统既不是一项微不足道的工作,也不是一项快速的任务,

  • 谢谢你包括一张照片 (3认同)
  • 好书推荐.顺便说一句,龙书是"编译器:原理,技术和工具".我一定是错过了一个笑话...我猜这本书是一本读书的怪物. (3认同)

Adr*_*ian 9

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

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

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

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

有些事情要考虑:

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

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


Ode*_*ded 5

首先阅读一些操作系统书籍,例如 Tanenbaums 的《现代操作系统》

这应该让您了解编写操作系统需要解决哪些问题。


Mat*_*ker 5

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

http://www.brokenthorn.com/Resources

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

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

学习BIOS中断.

在您开始之前还要开始采用一系列标准,例如:APIC A20 Gate PCI和PCIEx - 祝您好运之一.花费一些变化.英特尔和AMD - 看看这些,给你很多信息.VGA ATA和SATA等......有很多.

还可以抓取仿真器:bochs和qemu

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

那里有很多信息你只需做你的研究.

祝好运.