我正在编写自学程序员必须具备的各种能力列表.
在所有科目中,操作系统是最棘手的,因为创建一个玩具操作系统是一项相当重要的任务.然而,与此同时,应用程序开发人员(可能尚未正式学习CS)必须至少了解并希望应该实现一些关键概念以了解操作系统的工作方式,并成为更好的开发人员.
我有几个具体问题:
我建议阅读Andrew S. Tanenbaum(http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum)关于现代操作系统(ISBN 978-0-13-600663-3)的书,因为一切都在那里.
但是,根据图书索引,我们可以确定最低限度的主题:
开始玩这个主题的最简单方法是下载MINIX:
并研究代码.此操作系统的旧版本可能更容易理解.
另一个有用的资源是Mike Saunders 如何编写一个简单的操作系统,向您展示如何使用x86汇编语言编写和构建第一个操作系统:
http://mikeos.sourceforge.net/write-your-own-os.html
每个操作系统设计师都必须了解Multics背后的概念.其中一个最出色的想法是将大量虚拟内存分成直接可读和可写的段,并提供全面保护,并支持多处理器启动; 使用64位指针,我们有足够的位来直接解决地球上的所有问题.这些想法来自20世纪60年代,但永恒的恕我直言.
显而易见的这种知识的丧失使我们"Eunuchs"现在被实例化为Unix然后Linux和微软同样糟糕的设计,两者都将这个世界组织成一个平坦的进程空间和文件.那些不了解历史的人注定要做一些笨蛋.
你可以做任何事情来获得Organick关于Multics的书的副本,并阅读它,封面以涵盖.(Elliott I. Organick,多元系统:对其结构的考察).
维基百科网站有一些很好的信息; Corbato的论文很棒.
我相信这取决于您正在开发的应用程序的类型以及您正在开发的操作系统平台。例如,如果您正在开发一个网站,则不需要对操作系统了解太多。在此示例中,您需要了解有关您的网络服务器的更多信息。当您在 Windows、Linux 或 Android 或某些嵌入式系统上工作时,您需要了解不同的事情,或者有时您需要了解 API 提供的内容之外的任何内容。一般来说,对于开发人员或 CS 人员来说,了解以下内容总是有好处的。
操作系统是一个非常有趣的主题,但主要由理论组成,但当您在嵌入式系统上工作时,该理论就会付诸实践。平均而言,对于桌面应用程序,您看不到所有理论的适用范围。