跳转至

操作系统

操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。

操作系统是基础,操作系统是作为开发的内功,是软件运行和支撑技术的核心。

非常建议学弟学妹自上而下地去了解操作系统整个体系结构。操作系统功能如此强大,一切的起源都在于计算机启动的过程。

正所谓:先有鸡还是先有蛋?操作系统的本质也是一个软件,它是计算机开机后加载的第一个“软件”。一个没有操作系统的计算机只是一个笨重的家伙罢了,难道你不好奇计算机在开机的一瞬间是如何完成一系列转换从而加载、启动操作系统的吗?操作系统这个“软件”又是如何被硬件唤醒的?

实践是判断真理的唯一标准,攻克操作系统的最好方法是剖析瓦解它:可以尝试自己从 0 实现一个操作系统。

引用《操作系统真象还原》一书中的一段话:

在 C 等高级语言中,这些结果(条件)放在了内存变量中,我们判断的地方是某个内存单元。但在机器世界里,它不像 C 语言这般高级,所谓的“高级”并不是说真的有多高大上,“高级”指的是比较接近人类语言,用起来比较方便,更靠近人的逻辑思维,不用考虑过多细节的宏观抽象。

但越是“高级”,越是受限。

比如想盖个大楼,高级语言给咱们提供好了各种成型的建材,如彩钢、楼板、水泥,只能用提供好的材料去施工,由于材料早已经准备好了,所以建房速度就是快,但这些材料只能盖楼房。

而低级语言如汇编,给咱们提供的是水、土、沙、金属等最基本的原料,我们可以随意加工成我们需要的建筑材料,这些材料想盖别墅盖别墅,想盖瓦房盖瓦房,形式不受限,但由于是自己去制造建筑材料,房子盖得就很慢。越底层的东西往往灵活性越强,提供的信息越丰富,它不单纯记录结果,而且还能告诉你这个结果来的过程。

操作系统中的世界丰富且深奥,在学习的过程中难免会遇到大小写不规范的问题,但我们应该保持持续推进的步伐。

只有做超出自己能力的事才能提高,总做自己能力内的事,咱们连路都不会走呢。

操作系统导论: 三个简单部分(OSTEP)

  • “适合作为入门操作系统的第一本书”
    • 阅读体验好
    • 内容由浅入深
    • 作者给出的参考资料很讲究,质量高数目多
    • 开源书籍
  • OSTEP国内配套的 课程 比较硬核的是南大的 绿导师 的课,欢迎勇者冲一波回来写课评

现代操作系统:原理与实现(银杏书,机械工业出版社)

  • 推荐看书与作配套 lab 相结合(该课程 Arm 汇编据知情人士反馈令人感到不适)
  • 不推荐在对操作系统毫无结构体系认知的情况下直接查阅此书而不实践,建议配套 lab 一起边做边看(学姐当初试图通过看这本书入门,现在想来感受就是:当初觉得很抽象-> 研究完这本书觉得自己吃透了-> 半年后回顾此书脑袋印象空空)
  • 现代操作系统原理与实现配套 se315

深入理解计算机系统(CSAPP)

  • 第 4 章 处理器体系结构 含有较多和硬件有关的知识,可以暂时滞后这一章节的学习
  • 本书第三部分(第 10 章起包含较多并发与网络编程的知识将在 Linux 系统编程 中介绍,这部分可暂不阅读)
  • 配套 lab,适合看完一个章节后精进
  • 【本书不适合通篇连读】 CSAPP 更像是一本事事巨细的好“字典”,建议以实践+查阅的方式食用,效果更佳。

推荐章节

  • 第 2 章 信息表示与处理
    • 含有较多的数学证明,在初次阅读本章节时,可以跳过证明过程先关注结论,在日后再看结论的证明
  • 第 3 章 程序的机器级表示
    • 含有 x86_64 位保护模式下汇编语言的绝大多数内容,也说明了 C 语言程序到汇编语言的翻译方式,对操作系统的学习有较大帮助
  • 第 5 章 优化程序性能
  • 第 6 章 存储器层级结构
  • 第 8 章 异常控制流
  • 第 9 章 虚拟内存

操作系统真相还原

跟随书中内容从零开始实现一个操作系统,需要汇编基础、Makefile、Git 知识等,如果已经有操作系统理论基础可以不用通读其中所有内容

  • 本书志在带你从零实现一个操作系统。既然是“从零”,就代表我们在构建时需要编写汇编代码,因此在这之前需要一定的汇编基础。写汇编就要和机器码打交道,不要被它们冗长的身姿吓到,你会理解到它们的魅力所在的。
  • 本书作者语言幽默,且会带你学习一些汇编基础以及其他基础(比如 CPU 内部结构、物理内存模型以及寄存器相关点等等),所以汇编这块不需要太过深入学习,只需学习基础语法即可(重在还是实践)。
  • 学习本书的前置基础倒是重在一些工具的使用,比如 Makefile、gdb 等等,这些工具会让你在编码过程中更加得心应手。

必看课程

  • 注意:是必看课程
  • 合理安排时间,任务量较大,争取两个月内拿下

MIT 6.081

MIT 6.081,课程提供一个基于 RISC-V 指令集架构可运行的操作系统内核,后续实验 lab 理解操作系统内核构造并增加功能完善该内核,页表板块实验难度系数较大,建议在掌握一定操作系统理论基础后再进行学习

每一个 Lab 都确保是自己独立完成的,且不要公开自己的代码(符合课程规范,虽然答案代码随处可见)

  • 可以在完成 Lab 并且通过所有测试后参阅其余答案,优化自己的代码
  • 注意:有时候测试时是会被欺骗的,所以写完后参考别人的代码很必要

完成顺序

  • 一节 Lecture 先阅读 Preparation 中的 XV6 Book
    • 与国内不同的是,国外大学十分注重预习,如果 Pre 没有读明白那么视频课很难跟的上,教授默认你已经掌握了 Pre 中的所有内容
  • 教授稍后会在 Lecture 视频中对课程相关原理解释
  • 完成 Assignment 中的 Lab,每隔几节 Lecture 会有一节课对前几节 Lab 进行答疑讲解

翻译

感谢开源!这门课有详细的中文翻译!

  • (推荐大家不要过度依赖翻译,多锻炼自己的英语阅读水平)
  • 作者是根据 2020 版本课程进行翻译的,如果你想写 2021/2022 的课程也可以对照观看,差别不大
  • 文档翻译
    • Pre 翻译
    • 实验内容翻译
    • 如何使用 GDB进行调试
    • 如何使用 Git 进行版本控制
  • 视频翻译-带字幕
  • 视频翻译-纯文字版
  • XV6 中文文档