我用几年前设计和拼凑的计算机开始了一个操作系统的开始(我认为那将是大约1985年左右)。这很有趣,你学到了很多东西。您的项目取得了圆满成功!
人们给你的关于你可以用来开发你的操作系统的平台的答案是硬件种类。你将不得不花费一点$$。假设您可以访问计算机,您可以考虑使用QEMU或Oracle的Vbox等虚拟计算机并为此开发操作系统。如果你有一个mac,我真的很喜欢Q,因为界面使虚拟计算机看起来像一个。我认为这里的其他帖子可能提到了osdev.org。这是一个很好的地方,可以从其他DIY玩家那里获得创意,并获得一些帮助。取得好成绩。
干杯
如果您想了解硬件,请尝试检查PIC和AVR等微控制器。我最近有机会使用其中一些平台,你编写的代码(在C或汇编程序中)实际上是在裸机上运行。
当然,这只意味着你必须自己实现一些核心OS服务,比如用于处理输入的中断例程。其中大部分可用作示例代码,但仍然足够小,可以读取和理解整个系统。
就计算机考古学而言,尝试在最近的大学学习数字电路,计算机体系结构和编译技术的基础课程。这满足了我的好奇心,以及我需要用原始二进制操作码编写程序:-)
AFAIK,你所描述的并不存在于现代计算机中。如今,您将始终遇到各种操作系统,引导,甚至可能在您和硬件之间进行虚拟化。
如果您真的想了解编程的深层秘诀以及应用程序如何在硬件上运行,我建议您参加操作系统课程或阅读它们的工作原理。例如,Andy Tanenbaum书中的操作系统设计和实现可能就是一张票。
您描述的问题通常被称为 引导 (及其与...的关系 鸡肉和鸡蛋的问题 )。这个特定链接适用于编译器,但是在许多领域(硬件,操作系统等)都有类似的解决方案。
我不能告诉你硬件,但如果你想建立自己的操作系统,你可以做到这一点。这是很多工作,但非常有益。 jcomeau_itcx已经提到过osdev.org。还有alt.os.development新闻组,虽然它在过去几年中一直非常安静 - 但如果你能找到它,请查看档案。
听起来你并没有因为“不要这样做”而被推迟!警告......那很好:-)你可以在几天内了解引导扇区并编写自己的引导扇区,然后你会在屏幕上看到一些东西并知道你正在路上。
许多人建议您不要编写自己的引导扇区,因为它不是操作系统的严格组成部分。他们建议您使用GRUB或类似程序启动。我不同意,部分是因为我想学习计算机是如何启动的,但部分是因为我发现编写自己的引导扇区比找出如何使用GRUB更容易!
C是编写操作系统的最佳语言,因为它具有足够的高级别,可以提高工作效率,但是低级别足以使您直接在处理器上工作。许多人使用gcc,但你也可以使用Visual C ++或其他任何东西(但是用C语言编译,而不是用C ++编译,你需要一个支持内联汇编程序的编译器,并且可以生成没有prolog / epilog的函数。)你可以编写你的代码你的常规PC,然后在虚拟机中运行它 - 我更喜欢bochs,因为它有一个内置的调试器,但还有其他的。
开始使用操作系统的一些技巧(在整理完引导扇区之后)...英特尔IA32是最容易获得的处理器(因为它几乎在每台PC上都有)并且大多数操作系统都更喜欢它,所以你可以获得更多关于它的建议比关于其他平台。我不知道他们是否会这样做,但英特尔给我发了他们的IA32软件开发人员手册的硬拷贝 - 免费,但非常宝贵。你可以在真实模式下工作(16位,段,应用程序之间没有保护......想想Windows 3.1)但我认为值得努力进入32位保护模式(相当棘手)并且更加现代化。虚拟内存(分页)是可选的,但我这样做是因为我编写操作系统的最初动机是了解32位保护模式如何在应用程序之间提供保护。
这将是一个漫长的旅程。我在2004年开始运行我的操作系统,在晚上工作,但后来我在2006年创业并且从那以后没有任何时间。所以离完成还有很长的路要走!
如果你很好奇,那就去做吧。你真的很喜欢它。如果你不这样做,你可以停下来。
有个 大 教科书叫 计算系统要素:从第一原理构建现代计算机 作者:Noam Nisan和Shimon Schocken,作为作者所教授的大学课程的基础 计算机建设研讨会 - 来自 NAND 十二步到俄罗斯方块 。本课程也以其他名称在其他大学讲授。
NAND
有个 10分钟介绍 在YouTube上和 1小时谷歌TechTalk 谷歌视频,由作者本人。
官方配套网站是 http://nand2tetris.org/
不要让“计算机构造”这个称号欺骗你。通过“计算机”,作者并不仅仅意味着桌面上的矩形塑料盒,他的意思是整个 计算系统 ,从各个逻辑门到最高级别的应用程序编程。
这本书/课程教你
大多数C编译器都可以发出不是为操作系统上下文运行的代码(参见 memtest86+ 例如,代码库,但这将严重限制任何这些编译器提供的功能集。 (特别是,你不会得到任何类似的东西 malloc )。
memtest86+
malloc
您可以在没有操作系统(OS)的情况下进行编程,但操作系统可以为您提供繁重的工作。例如,使用C(你想知道),魔术不是语言本身,而是编译器。基本上它的作用是这样的:
C源代码 - >非优化 中间代码 - >优化 中间代码 - >机器代码
现在,机器代码进入操作系统,操作系统本身使用它自己的操作系统 核心 用于将该机器代码转换为二进制形式,以便硬件本身可以理解您想要做什么。
所以基本上在你编写一个没有操作系统的程序之前,你需要为你的机器创建自己的编译器和内核来运行它。
我建议你自己一个小型微控制器系统来玩。 TI推出基于MSP430的小型系统,价格为20美元。 您不需要编译器或操作系统来在此系统上运行代码。事实上,只有128字节的RAM,将操作系统放到它上面是一个挑战。
如果你真的想从头开始,你可以在一张纸上用汇编代码写下你的程序,然后手动将它翻译成机器代码。然后在十六进制编辑器中输入机器代码以获得零和零。这真的是把它带到极端,你不会从手工编写机器代码中学到任何东西。但是,用汇编代码编写程序会教你很多东西。
你需要一个工具来将你的程序放入闪存中以便cpu能够执行它,但是一旦编程了闪存,就没有工具,操作系统或类似的东西。
在大多数现代PC风格的计算机上,你不能做得非常方便,但有许多便宜的(低于100美元,甚至低于50美元)的套件可用于编写较小的单片微处理器。一个典型的micro将有几十个引脚,可以在程序控制下驱动为高电平和低电平,还有处理器,一些RAM(通常为256字节-8K左右),以及一些代码闪存(通常为8K-128K左右) )。开发套件通常具有处理器,其中一些引脚连接到LED或LCD显示器,并且其他电线连接到几个按钮。电路板还包括电路,因此您可以在PC上开发软件,连接USB电缆,并将代码传输到芯片中。
嵌入式编程很有趣。给出了一些“老派”编程的感觉,以及一些新的现代便利设施。