Operating system 如何编程操作系统?

Operating system 如何编程操作系统?,operating-system,Operating System,我喜欢编写代码,但我目前只做web开发。我想做一些独特的,有趣的,与网络编程截然不同的事情 是的,这可能是一个愚蠢的问题,但我认为构建一个非常简单的操作系统会非常酷。所以请不要说任何粗鲁的话。我只想知道以下几件事: *从哪里开始? *资源 *我会用什么语言 我在想一些简单的东西,比如基于cmd的从阅读一些操作系统书籍开始,比如Tanenbaums 这应该让你了解编写操作系统需要解决哪些问题。关于操作系统设计的绝对“圣经”是安德鲁·坦恩鲍姆的《龙》一书:) 还有很多其他参考资料,例如 微软研究院

我喜欢编写代码,但我目前只做web开发。我想做一些独特的,有趣的,与网络编程截然不同的事情

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

*从哪里开始? *资源 *我会用什么语言


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

从阅读一些操作系统书籍开始,比如Tanenbaums

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

关于操作系统设计的绝对“圣经”是安德鲁·坦恩鲍姆的《龙》一书:)

还有很多其他参考资料,例如

微软研究院(MicrosoftResearch)也有一个关于用托管代码(C#)创建操作系统的项目,名为-这可能会提供一些见解/论文等


编写一个完整的操作系统既不是一项简单的任务,也不是一项快速的任务,不过….

我想你最好开始探索工作。

当你搜索这些资源时,有很多资源,但我鼓励你现在不要采取这一步


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

这里有一些链接可以帮助您入门:

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

了解BIOS中断

此外,在您开始了解一系列标准之前,例如: 顶点 A20闸门 PCI和PCIEx-祝您好运,尝试获得其中之一。需要一些零钱。 英特尔和AMD-看看这些,给你很多信息。 VGA ATA和SATA 等有很多

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

了解计算机是如何工作的,也就是它是如何启动的

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


祝你好运。

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

首先,选择一个板/硬件/体系结构——甚至可以选择一个可以在机器上运行的操作系统模拟器。根据您构建操作系统的CPU体系结构,学习C语言和一些汇编语言(英特尔、MIPS、ARM、coldfire/motorolla 68k)

<>我已经看到C++包,它们允许你在C++中制作一个操作系统,然后自动转换成汇编,但是让他们正确地转换是非常头痛的。我不推荐他们

在开始编写代码之前,您应该设计操作系统。甚至可以将您的设计决策写在一篇50页的论文中,并附上一些图表

一些需要思考的事情:

  • 内存映射(您在内存中加载部分操作系统的确切位置;它将驻留在哪里)
  • 调度程序的工作方式(进程和/或线程感知、优先级)。可能是一个带有不同优先级队列的图表;还提供了不同队列中进程状态的图表(就绪、阻塞、等待消息、运行、执行、中断等)
  • 如何进行进程间通信(邮箱、互斥体、原子性、同步与异步通信、
    消息信封的格式{发送方进程id、接收方进程id、消息类型、消息}
  • 如何处理内核与用户模式
  • 内存分配算法-您将编写自己的malloc/free操作符(当用户动态分配内存时,您如何跟踪?您将使用伙伴树算法?链表?堆栈?等等)
  • 如何处理中断(这里也有上下文切换——您将如何保存所有寄存器并恢复它们:您需要一个堆栈来跟踪您在其中的位置)
  • 标准流程:键盘流程、显示器输出、计时、
  • 如何添加计时服务
  • 如何加载用户进程并运行它们
  • 是否增加优先购买权
  • 添加热键(用于调试操作系统,特别是在操作系统冻结时,您可以添加热键以检查内存)
  • 测试你的操作系统
编辑-URL更新 开发您自己的32位操作系统已绝版,但可在线获取:
编写操作系统很难。我建议在成为操作系统开发人员之前先成为开发人员。您需要了解C/C++和汇编语言才能创建基本的操作系统。您需要考虑如何制作您的操作系统,即内核类型、实模式或保护模式、内存映射以及许多其他内容。

在您开始编写实际的console/“cmd”软件之前,您将编写大量代码。感谢您的否决表决,这是真的helpful@Joe哦,但是乔,记住,程序员总是认为他们比自己更有能力。有趣的时刻是,作为一个不会给公司带来问题的爱好项目,你发现自己实际上无法做到这一点,并了解编写程序实际需要多少时间。我喜欢那些时刻。当我退后一步,为我之前的程序员们的工作鼓掌,他们比我做得更好。这是一个非常有建设性的问题。这看起来足以让您开始实施方面的工作:。我想你(我们)会想了解更多的理论来开始设计和实现其余的。谢谢你提供了一个pictureGood书籍推荐。顺便说一句,龙书是“编者:原理、技术和工具”。我一定错过了一个笑话。。。我猜这本书是一本阅读量巨大的书。