用C语言编写的低级问题示例解决方案

3

有人知道在哪里可以找到用C语言编写的底层/系统级应用程序的示例解决方案吗?一个真正好的网站或书籍推荐也很酷。

我已经学习了一些基础知识,但希望看到一些实际解决方案中使用C语言编写的代码,尤其是针对低级问题。例如,在操作系统编程的背景下如何使用C语言?C语言在哪些领域用于底层编程?

谢谢。


请问您能否更具体一些? - user554546
7
下载Linux内核并查看特定的子系统听起来怎么样?例如,内存管理器、调度程序或一些设备驱动程序? - Kerrek SB
2
你可以看一下Linux内核(或者读一本关于它的书)。 - Alexandre C.
@SeanThoman:Python、Ruby、PHP都是用C语言编写的(不过也有一些其他的实现,比如IronPython或JRuby)。 - Grzegorz Szpetkowski
1
Perl 也是用 C 写的,我相信。 - user554546
显示剩余2条评论
4个回答

2
我建议你研究谭纳鲍姆的MINIX3:http://www.minix3.org/。这是一个微内核架构,结合他的书(http://vig.prenhall.com/catalog/academic/product/0,1144,0131429388,00.html),真的很有启发性。
在我看来,对于初学者来说,学习Linux内核可能有点难度;而从学术角度来看,微内核架构优于单体内核。
此外,只需要几千行代码,不像Linux内核那样庞大,可以在现实时间表内使用。
此外,它是一个真正的严肃项目,据我所知,欧盟资助了它数以百万计的经费。我记得他在其中一次演讲中提到过这一点。
并且您可以在其中运行X-Server、gcc-toolchain等等。
玩得开心:)
编辑:当我阅读评论时,有人提到Ruby解释器。它是用C和Ruby的混合编写的,正如在se-radio.net的一集中提到的那样,它的源代码非常好。尽管我必须承认,我自己没有研究过。如果您对Ruby也有兴趣,这可能值得深入挖掘。

所有的答案都很好,但我选择了这个,因为它是一个简化的操作系统,而且我是初学者。 - Sean Thoman

1
我建议你看一些用C语言编写的开源项目,这对你可能会很有趣。例如,busybox是一个在嵌入式设备上运行的软件,有许多小程序可以研究。你可以拿telnet客户端的源代码和相应的RFC进行比较学习。或者,如果你想要更陡峭的学习曲线,也可以尝试学习开源操作系统,如Linux内核这里是浏览树),或者BSDs。虽然比busybox复杂得多,但如果你熟悉上下文,仍然可以找到一些相对容易理解的部分。

1
  • 学习Linux内核,也许结合一些内核或设备驱动程序的书籍会提供大量的材料。其中很多是免费提供的。
  • W. Richard Stevens的任何一本书都可以,这些书详细介绍了网络堆栈的实现(TCP/IP Illustrated)或使用(UNIX Network Programming),以及他的《UNIX环境高级编程》。

如果你偏向于Windows,有几本好书,即使它们相当老旧,包括:


1

我建议以下来源可能会对学习操作系统方面感兴趣。请注意,现代内核实际上已经有了许多进展:

其他想法:

  • 当前的 grub stage 1 引导程序 并不是很复杂 - 用 512 字节来玩耍,很难变得复杂。
  • Linux 内核模块指南 为您介绍了构建内核模块的基础知识。您可以尝试构建自定义但无意义的驱动程序,例如向 /dev/ 添加字符设备或向 /proc 添加 proc 设备,并努力实现一些有趣的东西。有人在内核空间中实现了 Web 服务器...
  • 如果您想尝试 Windows 内核,请使用 本机 NT 应用程序。我建议从打印一个无意义的启动消息开始,然后逐步转向驱动程序。

除此之外,很难建议您接下来应该做什么。系统级别是一个广阔的领域。

在低级编程环境中,C和C++是可移植的汇编语言。在许多以上的空间中,标准库可能是部分或完全缺失的,额外的功能可能是通过您正在修改的系统级代码的现有部分实现的,因此您必须了解任何给定空间中可用的API函数以及您需要自己实现什么,以及您的内存和处理要求必须是什么。例如,写入MBR的引导加载程序必须使用BIOS中断,并在实际(16位)模式下启动。这些是硬件设计的限制。同样,像fopen()这样的函数在内核空间中不可用,因为它们会包装系统调用-如果确实有意义从内核空间写入文件,则需要使用内核特定的构造来实现此目的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接