不懂就问!请问 linus 当年写 kernel 的时候都具备了什么知识?用了什么工具?使用了什么轮子?

2020-04-22 12:58:21 +08:00
 wangyzj

我寻思了解了解这些对自己研究 kernel 也很有帮助

4137 次点击
所在节点    程序员
28 条回复
billtsui
2020-04-22 13:01:14 +08:00
大学四年,只要老师不水自己不水,写个雏形操作系统还是可以的。MIT6.828 这个课学完,就能写一个实验性质的操作系统 xv6 。
hst001
2020-04-22 13:03:57 +08:00
我寻思着 Linus 大神也是边写边学边改进,个人目标万事要先开头才能走下去
wanguorui123
2020-04-22 13:05:25 +08:00
推荐《 30 天自制操作系统》
wanguorui123
2020-04-22 13:09:49 +08:00
推荐《 现代操作系统》
wanguorui123
2020-04-22 13:11:22 +08:00
推荐《深入理解 UNIX 系统内核》
crella
2020-04-22 13:24:30 +08:00
linux 从 minix 得到启发,得到 GNU 团队的帮助。

那个时候 GNU 黑客文化很火啊,因为没有一个 Free 的系统作基础,gnu 开发的工具也算是不 free 的。

谈 linux 不能不谈 gnu 啊
wangyzj
2020-04-22 14:04:36 +08:00
@billtsui 先不提水不水
大学 == 打游戏 是真的
mooyo
2020-04-22 14:05:26 +08:00
可以看一下 xv6
wangyzj
2020-04-22 14:06:21 +08:00
@wanguorui123 《 30 天自制操作系统》这个有点意思,可以先看看,谢谢
abcbuzhiming
2020-04-22 15:03:11 +08:00
B 站有教程,告诉你怎么从 0 写一个操作系统。其实写一个玩具并不难,难的是写一个能工业化使用的产品。
其实 linux 能走到今天,不光是 linus 一个人的功劳,linux 背后站着一大票巨人,IBM,红帽,intel,没有这些组织贡献代码 Linux 也走不到今天
wr410
2020-04-22 15:13:11 +08:00
造系统更像单片机编程,直接调用硬件接口和 CPU 指令,而不是在操作系统上去调各种 API……
hantsy
2020-04-22 15:18:01 +08:00
最初的 Linux 是改造 Minix 系统(一个学术派教授的作品,作为教学用的 Unix 实现,国外这种教学方式不知道国内有哪个大学用???反正我一个野生的计算机自学者,当时学完操作系统这门课除了一些书上的概念啥也不知道),Linus 为了以示差别,命名为 Linux (加入自己名子的成分)。

最初代码只有一万来行吧。现在好像有书去讲解 Linux 0.12 的最初的代码,和 Minix 代码一样,是不可多得的操作系统实战系统。

@billtsui 如果中国有大学教学都达到这种水平,中国实现自主操作系统早就不成问题了,也不至于这么多不要脸的人到处剽窃,还好意思对外说自主研发。
libook
2020-04-22 15:21:53 +08:00
对 Linus 和他的 Linux 感兴趣可以看 Linus 的自传《 Just for fun 》。
早先 Linus 的学校里是使用 Minix 作为教学用的操作系统的,Linus 学习了之后感觉 Minix 不好用,而且不支持新的硬件特性,于是就想自己修改 Minix,但后来发现这是个大坑,不光有实现上的问题还有授权的问题,还不如从头写一个,于是就写了 Linux 。

Linux v0.01 据说才 1 万行,你可以去网上找源码看看。后续版本都是社区成千上万人的贡献逐步完善的,现在 Kernel 源代码能达到几百兆了。

写个操作系统可以很简单,也可以很复杂,取决于你想实现多少功能,只实现最小可用的文件系统和进程管理不需要太多的代码。
hantsy
2020-04-22 15:22:20 +08:00
@abcbuzhiming Redhat 的商业化后,有了专职 Contribute Linux 的人,可以说是 Linux 发展的基本保障吧。IBM,Oracle 这些商业公司站队,同时也改进很多内核方面的东西,为 Linux 进入商用打下了基础,以保证它不再是一些 Geek 的玩具。
hantsy
2020-04-22 15:27:48 +08:00
@libook 源代码中驱动程序太多了。其实真正的内核应该不是太大,我是没能力研究这个了。

之前开始用 Linux 的时侯,2.4 的内核,自己编译过威盛的网卡驱动, 选择性的编译下来,整个内核加上自己所需要的驱动才 2M 。不过现在 Linux 发行版本,好像打包驱动也都分开了。
hantsy
2020-04-22 15:34:47 +08:00
@crella GNU 有自己的内核系统,只是一直强调微内核,计划得的太完美,饼画得太大,实现上难度可想而知,一直也没流行起来。Debian 好像以前还有 GNU 内核的打包。
libook
2020-04-22 15:34:51 +08:00
@hantsy 现在版本源码很庞大,现在应该没有人能对所有源码完全了解,我有朋友在某大厂搞自用的 Kernel 定制,基本上是一周写一两行代码,其余大量时间都是在读现有的代码,看怎么改比较合适。
hugedata
2020-04-22 16:09:35 +08:00
现在的 linux 内核,看源码找宏定义都很麻烦。
billtsui
2020-04-22 16:49:21 +08:00
@wangyzj 我大学也是打游戏过来的,浪费掉的时间早晚要补回来对不对。工作以后 MIT6.828 我看了的,蛮好的课程,xv6 入手操作系统真的挺好的。
billtsui
2020-04-22 16:50:29 +08:00
@hantsy 老师不教可以自己学啊,现在公开课很方便,国外教授上课讲的真是特别好,稍微认真点听就能懂,完全不是照本宣科。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/664964

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX