Linux操作系统类的内容

Swe*_*ney 34 c linux linux-device-driver linux-kernel

我将在即将到来的学期担任操作系统课程的助教.实验室将专门处理Linux内核.

  1. 您认为Linux内核的哪些概念/组件在课堂上最重要?
  2. 您遗漏的研究涵盖了您所希望的内容?

有关Linux内核或整体操作系统设计的任何建议都将非常感激.

Aid*_*ell 21

我的清单:

  1. 操作系统的关注点是:物理机器资源管理的抽象和扩展.
  2. 构建过程如何工作,即如何植入特定于体系结构/机器代码的东西
  3. 系统调用如何工作以及模块如何链接
  4. 内存管理 /虚拟内存/分页以及其他所有内容
  5. 流程如何在POSIX和其他系统中诞生,生存和死亡
  6. 用户空间与内核线程以及进程/线程之间的区别
  7. 为什么单片内核设计变得令人厌烦,有哪些替代方案
  8. 调度(以及一些替代/特定于域的调度程序)
  9. I/O,驱动程序开发以及它们如何动态加载
  10. 启动早期阶段以及内核为设置环境所做的工作
  11. 时钟问题,mmu系统等问题
  12. ......我可以继续......
  13. 我差点忘了IPC和Unix'eveything是一个文件'的设计决定
  14. POSIX,为什么它存在,为什么它不应该存在

最后,让他们通过tanenbaum的现代操作系统,并对其他一些内核进行案例研究,如Mach/Hurd的微内核设置,也许还有一些分布式和外部内核.

通过Linux也可以看到广泛的视野,我会重新审视

对于那些超级怪异的人来说,操作系统的历史以及为什么他们就是这样.


Jar*_*Par 13

对于任何Linux操作系统类,虚拟文件​​系统层都是绝对必需的.

我在大学里上过类似的课.最令人沮丧但同时又有用的项目是为Linux操作系统编写一个小文件系统.对于一组4人来说,让这个工作需要大约2-3周,并且真正教会你内核的来龙去脉.


Fre*_*ory 5

我最近参加了一个操作系统课程,我发现这些项目具有挑战性,但对于理解课堂上的概念至关重要.这些项目也很有趣,因为他们让我们真正使用 Linux源代码(版本2.6.12,或其左右).

以下是我认为应该涵盖在任何操作系统类中的一些非常好的项目/概念的列表:

  • 用户空间和内核空间之间的区别
  • 流程管理(即fork(),exec()等)
  • 写一个小壳,展示fork()和的知识exec()
  • 系统调用如何工作,即我们如何从用户切换到内核模式
  • 向Linux内核添加一个简单的系统调用,编写一个调用系统调用的测试应用程序来演示它的工作原理.
  • 同步进出内核
  • 在用户空间中实现同步原语
  • 了解同步原语在内核空间中的工作原理
  • 了解单CPU架构和SMP之间的同步原语如何不同
  • 向Linux内核添加一个简单的系统调用,演示如何在Linux内核中使用同步原语的知识(即必须获取,比如,任务列表锁等等,但也要使其成为必须使用kmalloc的东西,拿着锁时不能完成(除非你GFP_ATOMIC,但你不应该,真的))
  • 调度算法,以及如何在Linux内核中进行调度
  • 通过添加自己的调度策略来修改Linux任务调度程序
  • 什么是分页?它是如何工作的?为什么我们有分页?它在Linux内核中如何工作?
  • 向Linux内核添加一个系统调用,给定一个地址,它将告诉您该地址是否存在或是否已被换出(或其他一些涉及分页的分配).
  • 文件系统 - 它们是什么?它们为什么存在?它们如何在Linux内核中运行?
  • 磁盘调度算法 - 它们为什么存在?这些是什么?
  • 将VFS添加到Linux内核