我想更好地了解操作系统内部。 流程管理,内存管理等等。
我想通过了解linux或BSD内核来学习。
哪一个内核更适合学习目的?
什么是最好的起点?
你能推荐一本好书吗?

===============>>#1 票数:12 已采纳

在大学里,我有一个操作系统课,我们用Tanenbaum的本书 在课堂上,我们在Minix操作系统中实现了一个设备驱动程序。 这很有趣,我们学到了很多东西。

有一点需要注意,如果你选择Minix,它是专为学习而设计的。 它是一个微内核,而Linux和BSD是一个单片内核,所以你学到的东西可能不是100%可以转换为能够使用Linux或BSD,但你仍然可以从中获得很多,而不必处理相当尽可能多的信息。

作为旁注,如果你读过Just for Fun ,Linus在写Linux之前实际上是在玩Minix,但这对他的目的来说还不够。

===============>>#2 票数:7

作为Linux用户,我认为Linux有一个很好的社区供人们学习内核。 http://kernelnewbies.org是一个开始提问和了解内核如何工作的好地方。 我无法做出书籍推荐,但是一旦你阅读了关于kernelnewbies的起始材料,就会有很好的文档来源。

===============>>#3 票数:6

除了已经提到的好书(操作系统设计和实现特别好)之外,获取1.x版本的Linux内核,将其加载到VMWare或VirtualBox中并从那里开始播放。

您需要花费大量时间浏览源代码。 为此,请查看http://lxr.linux.no/这是源的可浏览链接版本,让生活更轻松。 对于Linux的第一个版本(0.01),请查看http://lxr.linux.no/linux-old+v0.01/ 乐趣从http://lxr.linux.no/linux-old+v0.01/boot/boot.s开始。 当您从版本升级到版本时,请查看ChangeLog并深入了解已更改的部分,以便您再次重新阅读整个内容。

一旦你掌握了概念,看看2.0,然后是2.2,等等。准备好在这个过程中花费很多时间。

===============>>#4 票数:5

我以前为了同样的目的买了这些书,但我从来没有自己研究过,所以只把它们作为二手的建议。

===============>>#5 票数:4

注意到这里缺乏BSD,我想我会填写:

我自己没有上过任何课程,但我听过Marshall Kirk McKusick在其他场合讲过话,他真的很擅长自己的所作所为。

当然还有BSD手册页,这是一个很好的资源,因为它们的维护范围远远超过普通的Linux手册页。 uvm(9) man-page 为例 ,描述OpenBSD中的虚拟内存接口。

虽然不太相关,但我还会推荐Berkeley Software发行版的视频历史,因为它可以很好地介绍UNIX历史和文化的BSD部分以及后来的大量热闹的非线性模块。

===============>>#6 票数:3

我推荐你BSD内核! BSD内核的黑客数量要少得多,因此随着他们的发展变得更容易。 无论是BSD还是Linux内核都有很棒的黑客,但有些人认为BSD较低的名气会过滤掉新手。 当源不是每天更新100次时,也更容易做出设计决策。

在BSD选择中,我最喜欢的是NetBSD。 它可能不是您想要的桌面无痛选择,但因为它非常注重可移植性,所以质量非常好。 我认为这部分说明了一切:

有些系统似乎有“如果它有效,那就是对”的理念。 在这方面,NetBSD的理念可以被描述为“它不起作用,除非它是正确的”

如果你已经工作了足够长的时间,你就会知道NetBSD对学习良好的编码非常高兴。 虽然专业,你会发现Linux的机会更多

无论您选择哪种方式,都可以开始加入他们的邮件列表,并按照讨论进行。 研究一些补丁,最后尝试自己做错误修复。 关于书籍,搜索Diomidis Spinellis文章和他的书 它不完全是一本内核书籍,但有NetBSD示例,并且可以帮助解决大型软件问题。

===============>>#7 票数:1

似乎没有人提到代码方面的BSD更清晰,更一致。 文档的方式也更好(如前所述)。 但是,由于你选择的任何系统都有很多摆弄 - 我会选择你经常使用的系统。

===============>>#8 票数:1

潜入代码是无可替代的。 尝试找到您感兴趣的驱动程序或子系统,然后使用它。 使用VMware Workstation等工具,可以非常轻松地进行所需的任何更改,快照VM并运行修改后的内核。 如果内核在启动时发生恐慌,谁在乎呢? 只需跳回快照并解决问题。

对于书籍,我强烈推荐Robert Love的Linux内核开发 这是一本精彩的书 - 很多信息,组织清晰,幽默......根本不干书。

===============>>#9 票数:1

听取Mike Stone的建议并从Minix开始。 这就是莱纳斯所做的! 教科书写得很好,Tannenbaum在展示如何在真实系统中实现各种功能方面做得很好。

===============>>#10 票数:1

Linux和Minix很有趣。 如果您还想了解现代微内核操作系统的外观,可以查看QNX。 完整的文档可在线获取,并且非常易于访问。 例如, 这本在线书籍。

===============>>#11 票数:0

当我在大学时,我花了一个学期研究操作系统,作为其中的一部分,我们必须在Linux中实现基于RAM的文件系统。

这是了解Linux keurnel内部结构以及掌握所有内容如何组合在一起的绝佳方式 - 并且在与标准工具的交互方式方面也有很多乐趣。

===============>>#12 票数:0

我自己没有尝试过,但你可以去Linux From Scratch并开始构建自己的Linux发行版。 听起来像是需要花费大量时间的东西,但是会对Linux内核的内核以及每个部分的工作方式有深入的了解。 当然,您可以通过此处的任何其他提示来补充此学习。

  ask by Michał Piaskowski translate from so

未解决问题?本站智能推荐:

4回复

从头开始硬化的BSD

我知道Scratch的Hardened Linux项目是一个项目,该项目为您提供了逐步说明,以完全从源代码构建自己的定制和强化Linux系统。 我想知道BSD中的等效功能是什么?
1回复

内核模式和内存保护[关闭]

在操作系统用户模式应用程序的虚拟地址空间是私有的,一个应用程序不能更改属于另一个应用程序的数据。 每个应用程序都是独立运行的,如果应用程序崩溃,则崩溃仅限于该应用程序。 其他应用程序和操作系统不受崩溃的影响 为什么在内核模式OS不保护内存和BOSD发生?
17回复

对于内核/操作系统来说还是C呢? [关闭]

我喜欢操作系统,最终想成为一个主要从事内核工作的操作系统开发人员。 在未来,C仍然是首选语言,我还应该学习什么?
1回复

在VESA / VGA早期内核控制台中,Character结构的正确形式是什么?

我目前正在为x86开发一个内核(只是为了好玩)。 我正在尝试实现一个相当可用的早期控制台,报告驱动程序的加载,并允许我在启动时使用内存,如果我需要,使用80x25字符VESA / VGA控制台位于0xB8000。 我想用表示字符及其属性字节的结构来完成此操作。 但是,我想知道如何正确格式化
5回复

内核开发中使用的堆栈大小

我正在开发一个操作系统而不是编程内核,我正在设计内核。 该操作系统面向x86架构,我的目标是现代计算机。 估计所需的RAM数量为256Mb或更多。 使每个线程的堆栈在系统上运行的好大小是多少? 我是否应该尝试以这样的方式设计系统:如果达到最大长度,堆栈可以自动扩展? 我想如果我
2回复

操作系统通常如何管理内核内存和页面处理?

我正在研究内核设计,我有一些关于分页的问题。 到目前为止我的基本想法是:每个程序都有自己的(或者它认为)4G内存,减去我保留的程序可以调用的内核函数的某个部分。 因此,操作系统需要找出一些方法来加载程序在操作期间需要使用的内存中的页面。 现在,假设我们拥有无限的内存和处理器时间,我
2回复

我应该制作自己的操作系统内核ELF还是原始二进制文件?

我已经开始了我的OS开发之旅。 人们通常会大声说使用原始二进制而不是ELF(或其他结构化格式)是自定义操作系统中应用程序的常见错误。 我可以说,因为ELF提供了额外的好处(存储元信息的地方,如符号表,.debug和.line)。 但是,让我们考虑内核二进制本身一分钟。 它应该是结构化的(
2回复

启用GRUB以从内核自动启动

我正在为操作系统开发内核。 为了执行它,我决定使用GRUB。 目前,我有一个脚本附加到GRUB的stage1 , stage2 ,一个pad文件和内核本身,使它可以启动。 唯一的问题是,当我运行它时,你必须让GRUB知道内核的位置和手动的大小,然后启动它,如下所示: KERNELS
2回复

我自己的OS内核上的C ++中的静态构造函数

我正在尝试用C ++编写内核,并且我是OS开发的初学者。 现在,我正在实现cout以在监视器上显示,但是我遇到了一些问题。 我知道我要问的问题是愚蠢的,但是我也是c ++的新手。 我已经编写了一个OStream类,该类调用系统函数write以在屏幕上显示。 它的基类是我的Video类
28回复

有哪些资源可用于开始操作系统开发? [关闭]

我一直想做的一件事是开发我自己的操作系统(不一定像Linux或Windows那样花哨,但比我已经完成的简单的引导加载程序更好)。 我很难找到资源/指南,让你过去编写一个简单的“Hello World”操作系统。 我知道很多人可能会建议我看看Linux或BSD; 但是像这样的系统的代