Skip to content

一本为自学者准备的书,引导自己从头开始编写操作系统

License

Notifications You must be signed in to change notification settings

kiddliu/os01-zh-CN

Repository files navigation

一本为自学者准备的书,引导自己从头开始编写操作系统

Donate

这本书旨在帮助您获得从头开始编写操作系统的基础知识。因而有了这个标题,从0到1。

读完这本书,至少您会学到:

  • 如何通过阅读硬件规格表从头开始编写操作系统。在现实世界里,硬件是按规格表运行的。在Google上您没有办法立即找到答案。
  • 从硬件到软件,计算机的每一层是如何相互联系起来的整体情况。
  • 独立地编写代码。复制粘贴代码是没有意义的。自己动手解决自己的问题才是真正的学习。刚开始我们给了一些范例,但是绝大部分问题都需要您来解决。努力尝试了以后,您可以比对线上的解决方案进行检视。
  • 把Linux作为开发环境,以及如何使用常见工具进行底层开发。
  • 深入解析x86汇编
  • 应用程序的结构如何,而操作系统又是怎么执行它的
  • 如何使用gdb和QEMU调试直接运行在硬件上的程序
  • 用纯C语言在x86_64裸机上进行链接和加载。没有标准库。没有运行时的开销。

下载本书

本书的内在哲学

授人以鱼不如授人以渔

在我写这本书的时候,它就成为了指导原则。这本书不会教给您一切,但是足以让您自学。此时此刻,书本身已经相当“完整”了:一旦掌握了第一部分和第二部分(总共8个章节),您就可以放下书本开始自学了。这个时候,聪明的读者应该能够自己继续学习。比如,他们可以在OSDev维基百科继续旅程;事实上,学完了第一部分和第二部分,您只达到了OSDev维基百科里描述的最低要求(好吧,这并不确切,本书实际上在推荐的主题上进行了更深入的介绍)。亦或,如果觉得凭兴趣开发一个操作系统不太现实,您可以继续学习针对Linux的书,比如这本免费的Linux Insides,或是其他流行的Linux内核书籍。本书力图提供一个足够强的基础,这也是为什么首先发表了第一部分和第二部分。

本书会教给您一些核心概念,比如x86汇编,可执行与可链接格式,在裸机上进行链接与调试等等,但是更重要的是,这样的信息是从哪里来的。比如说,不只是教x86汇编,本书也教如何使用Intel的参考手册。学习阅读官方手册很重要,因为只有硬件厂商自己了解它们的硬件是怎么工作的。如果只学习简单的二手材料,您就永远无法完整理解您为之编程的硬件。您有没有阅读过关于汇编语言的书,并且好奇这些信息都是从哪来的?以及有些人是怎么神奇地通晓硬件编程的?这本书给出了这些问题的答案。

举个例子,您应该浏览整个第四章,“x86汇编与C语言”,来了解如何利用Intel手册第二卷。在这个过程中,它会指导您如何使用官方手册。

第三部分计划做成由读者实现,从而完成各操作系统组件的一系列规范。除了少数几个示例以外没有任何代码。为了缩短读者阅读官方手册的时间,第三部分只给出了阅读提示,解释了困难的概念以及如何使用手册进行调试。简而言之,读者决定自己如何实现规范;这些章节更像是大学布置的作业。

准备工作

了解一些电路概念:

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

然而,如果您对于电路一无所知,您可以在这里快速学习:http://www.allaboutcircuits.com/textbook/,阅读其中的第一章和第二章。

C语言编程。特别是:

  • 变量与函数的声明与定义
  • whilefor循环
  • 指针与函数指针
  • C语言基础算法与数据结构

Linux基础:

  • 了解如何用命令行浏览文件夹
  • 了解如何调用带选项的命令
  • 了解如何通过管道把输出传给另一个程序

盲打。既然我们要用Linux,盲打会帮上大忙。我知道打字速度与解决问题没关系,但是您的打字速度至少要足够快,不要让它成为学习路上的拦路虎。

总之,我假设读者具备简单的C语言知识,并且会使用IDE编译和执行程序。

状态

  • 第一部分
    • 第一章:完成。
    • 第二章:完成。
    • 第三章:几近完成。目前,本书基于Intel手册来完整解释x86执行环境。
    • 第四章:完成。
    • 第五章:完成。
    • 第六章:完成。
  • 第二部分
    • 第七章:完成。
    • 第八章:完成。
  • 第三部分
    • 第九章:未完成。
    • 第十章:未完成。
    • 第十一章:未完成。
    • 第十二章:未完成。
    • 第十三章:未完成。

。。。后续章节尚未包含。。。

未来,我希望扩展第三部分从而包含比前两部分更多的内容。但是目前,我会首先尝试完成上述章节。

示例操作系统

这个代码仓库是本书的示例操作系统,用作第三部分的参考材料。它包含了“系统编程指南”(Intel手册第三卷)的十个章节,以及一个用于输入输出的、简单的键盘和视频驱动。然而目前,只实现了下列功能:

  • 保护模式
  • 用TSS(任务状态结构)创建和管理进程
  • 终端
  • LAPIC

分页与输入/输出还没有实现。随着本书的推进我会尝试实现它们。

参与项目

如果找到了任何语法问题,请在Github提交问题报告。如果是某些句子或是段落难以理解,请使用以下标题格式提交问题:[页码][类型] 描述性标题

比如说:[第九页][语法] 使用了不正确的动词

类型 可以是下面其中一种:

  • 笔误:指的是打字错误。
  • 语法:指的是使用了不正确的语法。
  • 风格:指的是风格的改善。
  • 内容:指的是某些内容问题

如果您可以基于本书的源码文件发起一个合并请求就更好了。本书的主要内容放在文件Operating Systems: From 0 to 1.lyx中。您可以修改对应的.txt文件,而后我会手动集成改动。目前只能这样做,因为Lyx会产生大量变动,导致几乎无法进行任何评审。

本书还在开发过程中,如果我的英文让您觉得不舒服还请多多包含。我真的非常感激。

最后,如果您喜欢这个项目,并且有可能的话请抖内这个项目,使它可以继续下去。

有疑问?

如果您对本书的材料或是开发有疑问,请在Github提交问题报告

About

一本为自学者准备的书,引导自己从头开始编写操作系统

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published