我应该学习什么才能深入了解操作系统

时间:2014-08-01 20:04:26

标签: operating-system

我已经在java中编程了3年,但我没有其他语言的经验。我想知道我需要学习什么才能创建一个操作系统。我很可能会使我的操作系统基于Linux内核。我应该熟悉哪些编程语言以及我应该学习哪些pc硬件方面。如果你知道任何在线教程或好书,请提及它们。

2 个答案:

答案 0 :(得分:1)

首先,我会说你在你的系统上安装了任何Linux操作系统并习惯了它。

其次,对于OS开发,您必须了解C语言。至于汇编语言,它取决于您开始OS开发的位置。如果您将使用可用的引导加载程序,那么我认为您不需要学习汇编语言。

这是一个关于操作系统开发的网站:http://wiki.osdev.org/Main_Page 在那里,您将找到操作系统开发所需的所有知识。以及如何逐步开发操作系统。

现在,“Eudyptula挑战赛”正在进行中。这是linux内核的一系列编程练习。您可以在此处找到更多信息:http://eudyptula-challenge.org/

答案 1 :(得分:1)

答案取决于您想要走多远以及您想要使用现有代码自己写多少。

最直接的方法是查看Arch LinuxGentoo并构建您自己的自定义Linux设置。 创建最小工作系统所需的大致时间:约2小时

否则,您可以编译Linux内核,构建一些软件包并将它们自己组合在一起并创建自己的Linux发行版 - 从某种意义上说就是您自己的操作系统。如果您决定这样做,Linux From Scratch将是宝贵的资源。 创建最小工作系统所需的大致时间:~2-5天

说这对你来说太容易了,但你还没准备好深入研究内核开发的细节。您可以编写自己的应用程序,这些应用程序在Linux内核之上运行。通常,您需要了解C / C ++,但支持在Linux上运行/编译为Linux可执行文件的任何语言都可以使用。哎呀,您可以在Java上运行(或编写自己的)Java运行时,并用Java编写整个操作系统/用户空间。 创建最小工作系统所需的大致时间:约6-12个月

如果你想从头开始编写自己的内核怎么样?哎呀,Linux被高估了,你想编写自己的内核,它将成为下一个最好的东西!您可能想了解一下您正在开发的平台。至少,您需要知道您的平台的某些特殊操作的汇编指令,这些指令无法在C中本地完成,如切换CPU模式。你肯定需要阅读OS dev wiki这个,你应该有一个公平的计算机科学背景。

此时,除了一个好的教程,C,一个小组件,您希望支持的硬件的参考手册以及3年以上的计算机科学背景之外,您不应该需要太多的东西。帮助你引导内核的引导加载程序应该处理大部分硬件初始化。像GRUB这样的引导加载程序(我假设您正在x86系统上进行开发)对您来说非常有用,它可能会立即跳转到您的内核main函数而无需执行太多操作。同样,如果您愿意,您可以在C中移植或编写自己的Java运行时,并用Java编写内核的其余部分! 创建最小工作系统所需的大致时间:〜3 - 5年

但是,我们只是说你因为更多的痛苦而尖叫,你想从头开始编写一个真正的操作系统你不想要没有引导程序做很多腿部工作。你需要什么?首先,您需要更多参考手册。而且你需要阅读更多的装配。特别是对于英特尔处理器,还有很多工作需要将系统从16位模式升级到32/64位保护模式并进行分页(这是我想要的)。您还想知道平台上每一个会影响您的操作系统的微小怪癖和怪异(这些通常都没有记录;很好!)。另外,以上所有。简而言之,您需要学习所有内容创建最小工作系统所需的大致时间:5年以上

当然,这篇文章只是扼杀了甚至可以打开基本操作系统,打开网络浏览器所需要的表面。近似值大致假设最小的工作系统能够运行图形Web浏览器,并且会根据您要写的数量而有所不同。

我并不意味着屈尊俯就,但如果您决定编写自己的操作系统,这就是您将要面对的现实。然而,如果您可以打破最初的障碍,甚至只是尝试建立自己的Linux系统,那么这是一次宝贵的学习经历。