在即将到来的学期,我将成为操作系统课程的助教。这些实验室将专门处理 Linux 内核。
- 你认为 Linux 内核的哪些概念/组件在课堂上最重要?
- 你希望在你的学习中被忽略的内容是什么?
任何有关 Linux 内核或整体操作系统设计的建议都将不胜感激。
在即将到来的学期,我将成为操作系统课程的助教。这些实验室将专门处理 Linux 内核。
任何有关 Linux 内核或整体操作系统设计的建议都将不胜感激。
我的清单:
最后,让他们通过tanenbaum 的现代操作系统,并对其他一些内核进行案例研究,比如 Mach/Hurd 的微内核设置,也许还有一些分布式和外内核的东西。
给出过去 Linux 的广阔视野,我认为
对于那些超级极客,操作系统的历史以及它们为什么会这样。
虚拟文件系统层对于任何 Linux 操作系统类都是绝对必要的。
我在大学上过类似的课。最令人沮丧但同时也很有帮助的项目是为 Linux 操作系统编写一个小文件系统。4 人一组需要大约 2-3 周的时间才能完成这项工作,并且真正教会了您内核的来龙去脉。
我最近参加了一个操作系统课程,我发现这些项目具有挑战性,但对于理解课堂上的概念至关重要。这些项目也很有趣,因为它们让我们实际使用Linux 源代码(版本 2.6.12 或更高版本)。
以下是我认为任何操作系统类都应该涵盖的一些非常好的项目/概念的列表:
fork()
,exec()
等)fork()
和exec()
对于实验室来说,可能很酷的一件事是向他们展示实际代码并讨论它,询问他们认为事情是以这种方式完成的,而不是另一种方式等问题。
如果我再次在大学里,我肯定会更深入地了解有关同步原语、并发性等的课程……这些都是困难的问题,如果没有适当的指导,就更难处理。我记得我参加了 Paul “Rusty” Russell 关于自旋锁和其他绝对是 rad 的同步原语的演讲,也许你可以在 youtube 上找到它并借用一些想法。
Another good topic (or possibly exercise for the students) would be looking at virtualisation. Especially Rusty Russel's "lguest" which is designed as a simple introduction to what is required to virtualise an operating system. The docs are good reading too.
实际上,我刚刚在春季上了一门完全符合您描述的课程(使用 linux 的 OS 设计)。实际上,我对此感到非常沮丧,因为我觉得老师对项目的关注过于狭隘,而不是给予更广泛的理解。例如,我们的上一个项目围绕 futexes 展开。我和我的搭档几乎不知道它们是什么,让它工作(有点)然后把它交出来。我离开时对那个项目的任何东西一无所知。我希望其中一个项目是编写一个简单的设备驱动程序或类似的东西。
换句话说,我认为最好确保提供一个良好的广泛概述,尽可能多地提供细节,但最终要广泛。我觉得我的老师挑剔了这些微小的领域,让我们非常专注于这些领域,而最终我并没有对 Linux 的内部运作有那么大的了解。
我想指出的另一件事是我没有保留课堂知识的很多原因是缺乏组织。任何给定的一周,主题都是突然冒出来的,也没有路线图。给材料一个合乎逻辑的流程。心理组织是保留知识的关键。
嗯,我这学期刚完成我的操作系统课程,所以我想我会插话的。
我有点沮丧,因为我们实际上并没有玩弄实际的操作系统本身,而是我们只是进行了系统编程。我建议将实验室放在操作系统本身的东西上,这听起来像是你想做的事情。
我确实喜欢并发现有用的一个实验室是编写我们自己的 malloc/free 例程。这很困难,但也很有趣。
也许还包括将程序加载到内存和/或设置内存管理器(例如分页)。
网络子系统也很有趣。您可以跟踪一个数据包,因为它从套接字系统调用到线路,反之亦然。
有趣的作业可能是:
内存映射 I/O 以及 32 位操作系统中内核地址空间和用户可寻址空间之间的 1g/3g 与 2g/2g 拆分。
32 位架构对硬盘大小的限制以及这对文件系统的设计意味着什么。
实际上只是使用 64 位的所有优点和缺点,它意味着什么,为什么以及历史和为什么还没有。