写一个操作系统内核有多难?大概的内容、步骤是什么?
一般计算机的本科生(大一的会点C语言,有点耐心,3个月)就可以了。。。有一本日本人写的书叫《30天自制操作系统》一步一步带你写出一个操作系统内核(可以写到光盘上,从光盘启动,第一节就叫你如何实现一个“hello,world”),一般计算机的本科生(就是会一点点C语言的那种理工科生),有点耐心的话,每天2~3小时,三个月基本能够看完,跟着撸出一个操作系统内核。根本不需要什么硕士水平。不需要前面说的各种文档。事实上作者的目标甚至是中学生也能看得懂,感觉基本做到了(最后也就几十k的代码)。写完之后会很有成就感。
我的第一本计算机厚书就是《30天自制操作系统》。写出来有什么鼠标键盘输入,汉字显示(书中是日文显示,由于日文中有汉字,所以其实可以算汉字显示),多进程(多任务),段页式内存管理,各种驱动,定时器,文件系统(读硬盘,文件目录和内容读取等),窗口,音乐播放,内核保护,api,小游戏,图片播放,应有尽有。
如果大学能够跟着写完,绝对,毕业面试的时候能吹嘘一下。。。当然里面的c语言编译器不是自己写的(编译器工作量真不小)。。。我当初就是看不惯国内那些书在那里装比,没有真正的拿得出手的科研成果,然后在那里装比的各种著作。然后人家这本,哈哈,真的就能够跟着撸出一个操作系统内核,而且,绝对是效率不错,结构可以的东西。
最初程序员们都是纸带机啥的上面写点0和1。后来写写汇编,都是针对硬件直接编程。也不区分什么内核应用什么的,都是一个线串下来。硬件遵循摩尔定律发展了一阵儿之后一根筋的程序里面就得弄一大堆中断响应。也就是说程序执行的过程中,需要让CPU停下来干别的更重要的事儿的情况多了起来。
慢慢的程序结构复杂了起来,人们觉得需要做点基础工作让写代码的时候不必关注多中断调度啥的。还有就是一次要干的事儿多了,几个事儿不能光靠外部中断进行切换,得让它们有个内在的秩序。于是就有了任务调度。再后来大家觉得光有任务调度的代码还不够。最好内存管理也能简单点。还有存储设备,一个劲儿的对一个块读完了擦,擦完了写,特定的块会挂掉。诸如此类的需求不断出现。
于是就有了内存管理和设备驱动。慢慢的发展下来大家觉得这部分代码是非常重要的。要区别于它们所服务的代码。就有了内核和应用的区分。早期的应用和内核是在一起编译的,后来有了可执行文件这样的设计,就可以分开了。
尽管上面很多人说写一个操作系统内核是比较简单地事情,但是,如果你只有一点点软件和一点点硬件基础,那么我可以放心地告诉你,这绝对不是一件很简单的事。除非你指的操作系统就是一个稍微能控制一下资源或者稍微能运行几个进程的简单东西而已。在写操作系统之前,你就清晰地明白操作系统是要干什么用的。
操作系统对应用程序提供了硬件层面的抽象;负责管理包括CPU,内存,磁盘,IO等硬件资源,以及进程表,文件打开表,页表等软件资源;负责提供应用程序可用的API和系统调用;负责保护硬件资源和软件资源的访问安全和隔离性;以及提供多用户支持等等功能。那么在写一个操作系统之前,你就得保证你所写的操作系统满足必须满足的要求:鲁棒性,可扩展性,高效性,丰富性,安全性。先不说后几条要求,仅仅鲁棒性一点要求,都能把一个程序员折腾很久。
就像画画初学者画个难看的五角星和拉斐尔米开朗基罗画希斯教堂相比,差距还要大很多倍