Skip to content
forked from tuhdo/os01

引导自己从头开始编写操作系统。一本适合自学者的书。

Notifications You must be signed in to change notification settings

yuanzhongqiao/os01

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

捐

本书可帮助您获得从头开始编写操作系统所需的基础知识。因此标题是“0到1”。

读完本书后,您至少将学到:

  • 如何通过阅读硬件数据表从头开始编写操作系统。在现实世界中,它就是这样工作的。您将无法咨询 Google 以获得快速答案。

  • 从硬件到软件,计算机各层如何相互关联的大图。

  • 独立编写代码。复制和粘贴代码是没有意义的。当你自己解决问题时,真正的学习就会发生。给出了一些示例来启动,但大多数问题都需要您来解决。不过,您可以在网上找到解决方案,以便您在尝试后进行检查。

  • Linux 作为开发环境以及如何使用常用工具进行低级编程。

  • x86 汇编深入。

  • 程序如何构造以便操作系统可以运行。

  • 如何使用 gdb 和 QEMU 调试直接在硬件上运行的程序。

  • 在裸机 x86_64 上链接和加载,使用纯 C。没有标准库。没有运行时开销。

下载本书

本书的教学法

你给一个穷人一条鱼,你就可以喂他一天。你教他钓鱼,你给他一份可以养活他一生的职业。

这是我写这本书时的指导原则。本书并不试图教你一切,但足以让你自学。就这一点来说,这本书本身已经相当“完整”了:一旦你掌握了第 1 部分和第 2 部分(共 8 章),你就可以放下书自学了。至此,聪明的读者应该能够自己继续下去了。例如,他们可以在OSDev wiki上继续他们的旅程;事实上,在学习了第 1 部分和第 2 部分中的所有内容之后,您只满足了OSDev Wiki 的最低要求(好吧,不完全是,这本书实际上对建议的主题进行了更深入的探讨)。或者,如果您认为为了好玩而开发操作系统是不切实际的,您可以继续阅读特定于 Linux 的书籍,例如这本免费书籍Linux Insides或其他流行的 Linux 内核书籍。本书努力为您提供坚实的基础,这就是首先发布第 1 部分和第 2 部分的原因。

本书教你核心概念,例如x86汇编、ELF、裸机上的链接和调试等,但更重要的是,这些信息从何而来。例如,它不仅教授 x86 汇编,还教授如何使用 Intel 的参考手册。学习阅读官方手册很重要,因为只有硬件制造商自己才了解他们的硬件是如何工作的。如果您只是因为更容易而从辅助资源中学习,那么您将永远无法完全了解您正在编程的硬件。您是否曾经读过一本有关汇编的书,并想知道所有信息从何而来?作者怎么知道他所说的一切都是正确的?为什么一个人似乎神奇地了解如此多的硬件编程知识?本书对这些问题给出了指导。

例如,您应该浏览第 4 章“x86 汇编和 C”,了解它如何使用 Intel 手册第 2 卷。在此过程中,它会指导您如何使用官方手册。

第 3 部分计划作为一系列规范,读者将实施这些规范来完成每个操作系统组件。除了一些示例之外,它不包含代码。第三部分只是为了缩短读者阅读官方手册的时间,给出在哪里阅读的提示,解释困难的概念以及如何使用手册进行调试。简而言之,具体的实现需要读者自己去完成;这些章节就像大学作业一样。

先决条件

了解一些电路概念:

  • 电的基本概念:原子、电子、质子、中子、电流。
  • 欧姆定律

但是,如果您对电一无所知,您可以在这里快速学习: http:https://www.allaboutcirculator.com/textbook/,通过阅读第 1 章和第 2 章。

C 编程。尤其:

  • 变量和函数声明/定义

  • while 和 for 循环

  • 指针和函数指针

  • C 语言的基本算法和数据结构

Linux 基础知识:

  • 了解如何使用命令行导航目录

  • 了解如何使用选项调用命令

  • 知道如何将输出通过管道传输到另一个程序

触摸打字。由于我们将使用 Linux,盲打会有所帮助。我知道打字速度与解决问题无关,但至少你的打字速度应该足够快,不会让它顺其自然并降低学习体验。

一般来说,我假设读者具有基本的 C 编程知识,并且可以使用 IDE 来构建和运行程序。

地位:

  • 第1部分

    • 第一章:完成
    • 第 2 章:完成
    • 第3章:差不多了。目前,本书依赖Intel手册来全面解释x86执行环境。
    • 第 4 章:完成
    • 第5章:完成
    • 第6章:完成
  • 第2部分

    • 第7章:完成
    • 第8章:完成
  • 第三部分

    • 第9章:不完整
    • 第10章:不完整
    • 第11章:不完整
    • 第12章:不完整
    • 第13章:不完整

    ...以及尚未包括的未来章节...

将来,我希望扩展第 3 部分,使其涵盖前 2 部分以外的内容。不过暂时我会尽量先完成上面的章节。

示例操作系统

该存储库是本书的示例操作系统,旨在作为第 3 部分的参考材料。它涵盖了“系统编程指南”(英特尔手册第 3 卷)的 10 章,以及用于输入和输出的简单键盘和视频驱动程序。然而,目前仅实现了以下功能:

  • 保护模式。
  • 使用 TSS(任务状态结构)创建和管理流程。
  • 中断
  • 拉皮克。

分页和 I/O 尚未实现。随着本书的进展,我将尝试实现它。

贡献

如果您发现任何语法问题,请使用 Github Issues 报告。或者,如果某些句子或段落难以理解,请随时使用以下标题格式提出问题:[page number][type] Descriptive Title

例如:[pg.9][grammar] Incorrect verb usage

type可以是以下之一:

  • Typo: 表示输入错误。
  • Grammar: 表示语法用法不正确。
  • Style:表示风格改进。
  • Content: 表示内容有问题。

更好的是,您可以使用提供的书籍源发出拉取请求。本书的主要内容在文件《操作系统:从0到1.lyx》中。您可以编辑 .txt 文件,然后我将手动集成更改。这是目前的一个解决方法,因为 Lyx 可能会导致巨大的差异,从而无法审查更改。

这本书正在开发中,所以如果英语激怒了你,请耐心等待。对此,我真的非常感激。

最后,如果您喜欢这个项目并且如果可能的话,请捐款来帮助这个项目并使其继续下去。

有疑问吗?

如果您对本书的材料或开发有任何疑问,请随时打开 Github 问题

About

引导自己从头开始编写操作系统。一本适合自学者的书。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TeX 76.1%
  • Makefile 11.2%
  • Assembly 10.2%
  • GDB 2.4%
  • C 0.1%