1. 操作系统概述

背景回顾:大家已经有多年的操作系统使用经验,也知道 “操作系统” 是一门很重要的课程,但很可能无法回答好 “操作系统到底是什么”、“为什么重要” 这样的问题。我们将在一学期的时间里回答这些问题,并建立操作系统相关的基本概念、思想方法和编程技巧。

本讲内容:个人/课程简介、操作系统的发展历史,回答三个问题:

  • (Why): 为什么要学操作系统?
  • (What): 到底什么是操作系统?
  • (How): 怎么学操作系统?

1.1 个人/课程简介

1.2 为什么学操作系统?

1.3 什么是操作系统?

在这个模拟器中,整个计算机系统的状态都被封装在一个结构体中 (包括内存!是的,的确有内存也封装在一起的 CPU,例如全志 D1s) :

struct CPUState {
    // Processor internal state
    uint32_t regs[32], csrs[CSR_COUNT];

    // Memory state
    uint8_t *mem;
    uint32_t mem_offset, mem_size;
};

而你完全可以把 rv32ima_step 理解成是数学意义上的函数:它根据当前的 CPUState,计算出执行一条指令后的 CPUState。

1.4 怎样学操作系统?

感到一件事很困难通常是因为没有找到正确的方法。在互联网/搜索引擎/大语言模型普及的时代,只要掌握基本概念、思路和 “提出问题” 的能力,就能极快地提升自己。试着对比 man tar、tldr tar 和使用 Prompt:

我是一位学习《操作系统》课的新手。我现在有解压缩 “toybox-0.1.0.tar.bz2” 的任务,但是我毫无概念、无从下手。应该如何做?

1.5 总结

Take-away Messages

操作系统是软件和硬件之间的桥梁;因此我们 “找到” 一些合适的软件、一些相对简单的硬件,理解操作系统就会变得容易。现在,学习操作系统已经变得前所未有地简单,大家只要怀揣梦想、学会提问就可以了!

课后习题/编程作业

📚阅读材料

课程网站 (首页上的信息、课程概述、参考书与参考资料、生存指南);教科书 Operating Systems: Three Easy Pieces:

  • Preface 前言
  • 第 1 章 - Dialogue on the Book
  • 第 2 章 - Introduction to Operating Systems

延伸阅读 (如果有兴趣):Harley Hahn's Guide to Unix and Linux

🖥️编程

准备好一个可用的 Linux 系统。这个系统将伴随你完成整个《操作系统》课程。可能的方案有:

  • 物理机直接安装的 Linux
  • Windows Subsystem for Linux (应用商店安装 Ubuntu),通过 ssh 登陆
  • VirtualBox 安装的 Linux 虚拟机,通过 ssh 登陆
  • 网络上购买的 Linux 虚拟主机,通过 ssh 登陆

在 Linux 系统中安装必要的软件,包括编译器、git、编辑器、ssh server 等,确保你可以在这个环境中编辑、编译和调试 C/C++ 代码。

🖥️编程

在你的 Linux 中运行课堂上的代码示例。熟悉一些典型的 Linux 的命令行工具,尤其是示例代码中用到的 gcc、GNU make、git 等。在你愿意的时候,可以读一读与它们相关的 Tutorial 和手册 (我们强烈推荐你收藏上面这些工具的官方文档,并且在你空闲的时候读一读)。此外,在互联网上找到好的 tutorial、以及随身的 AI Copilot 会极大幅地提高你的效率;同时你也可以开始尝试定制你的工具 (例如课堂上的 fish 和 tmux 行为就与默认配置有一定区别)。