Operating system 为了深入了解操作系统,我应该学习什么

Operating system 为了深入了解操作系统,我应该学习什么,operating-system,Operating System,我已经用java编程3年了,但我没有其他语言的经验。我想知道我需要学习什么才能制作一个操作系统。我很可能会让我的操作系统基于Linux内核。我应该熟悉哪些编程语言,我应该学习pc硬件的哪些方面。如果你知道任何在线教程或好书,请提及它们 首先,我要说的是,你可以在你的系统上安装任何Linux操作系统,并习惯于它 第二,对于操作系统开发,您必须了解C语言。至于汇编语言,这取决于从哪里开始操作系统开发。如果您将使用可用的引导加载程序,那么我认为您不需要学习汇编语言 这是一个关于操作系统开发的网站: 在

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

首先,我要说的是,你可以在你的系统上安装任何Linux操作系统,并习惯于它

第二,对于操作系统开发,您必须了解C语言。至于汇编语言,这取决于从哪里开始操作系统开发。如果您将使用可用的引导加载程序,那么我认为您不需要学习汇编语言

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


如今,一场“Eudyptula挑战赛”正在进行。这是一系列针对linux内核的编程练习。您可以在这里找到更多信息:

答案取决于您想走多远,以及与使用现有代码相比,您想自己编写多少代码

最直接的方法是查看或构建您自己的定制Linux设置创建最小工作系统所需的大致时间:~2小时

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

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

如果你想从头开始编写你自己的内核呢?见鬼,Linux被高估了,你想编写自己的内核,这将是下一个最好的选择!您可能想了解一下您正在开发的平台。至少,您需要知道一些针对您的平台的特殊操作的汇编指令,这些操作不能像切换CPU模式那样在C中本机完成。你肯定需要仔细阅读这篇文章,你应该有一个相当不错的计算机科学背景

在这一点上,除了一个好的教程、C语言、一点汇编、你希望支持的硬件参考手册和3年以上的计算机科学背景,你不需要太多的东西就可以开始了。引导内核的引导加载程序应该处理大部分硬件初始化。像GRUB这样的引导加载程序(我假设您是在x86系统上开发的)为您做了很多事情,它可能直接跳转到您的内核
main
函数,而无需您做太多事情。同样,如果您愿意,您可以用C移植或编写自己的Java运行时,并用Java编写内核的其余部分创建最小工作系统所需的大致时间:~3-5年

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

当然,这篇文章只是简单介绍了开发一个基本操作系统所需要的东西,比如说,打开一个web浏览器。近似值大致假定一个最小的工作系统能够运行图形化的web浏览器,并且根据您想要编写的内容的不同而有所不同


我不是故意居高临下,但如果你决定编写自己的操作系统,你将面临这样的现实。尽管如此,如果你能打破最初的障碍,甚至只是尝试建立自己的Linux系统,这是一次宝贵的学习经验。

C,assembly.btw这不是提出这种问题的地方。stackoverflow不是针对任何主题吗?尽管它可能会让一些人感到沮丧,但我不介意,谢谢你提供的信息。我已经成为你的粉丝@tangrs,因为我得到了一个如此美丽而不那么令人沮丧的答案和深刻的见解。谢谢你所说的PC架构是什么意思?如果您指的是硬件理解,那么没有必要这样做。