ASCII Art 起源于缺乏图形显示能力的打字机与早期计算机时代,人们利用基础的文本字符 (如字母、数字和符号) 来拼凑和构建图像。在 BBS 和早期互联网时期,它迎来了蓬勃发展的黄金期,成为极客文化、论坛签名和纯文本游戏中不可或缺的视觉载体。尽管今天图形技术已极其发达,ASCII Art 仍作为一种独特的复古美学活跃于现代数字世界,被广泛应用于程序员的代码注释彩蛋、终端命令行界面设计、部分独立游戏的美术风格以及网络梗中。
C 语言实现的 single-header RISC-V32IMA 系统模拟器 (项目源自mini-rv32ima)。因为有 M-Mode,这个模拟器可以运行几乎 “任意复杂” 的程序——甚至是没有 MMU 的 Linux。我们稍稍修改了这份代码,更好地体现《操作系统》课程的教学目标。
汉诺塔是递归和分治的经典问题,而同学们也曾经在理解这个程序的时候遇到困难。遇到困难是正常的:C/C++ 中的 “函数” 和数学的函数很不一样,例如我们可以把 Fibonacci 数列的递归写成
int x = f(n - 1);
int y = f(n - 2);
// 也可以 return y + x;
return x + y;
或是任意调换函数调用的次序,但汉诺塔不行。
不行的根本原因在于汉诺塔中的 printf 会带来全局的副作用。但 C/C++ 遵循 “顺序执行” 的原则,函数的执行有 “先后” (不像数学的函数,先后是无关的),按照不同顺序调用会导致程序输出不同的结果。实际上,C 标准中 return f(n - 1) + f(n - 2); 甚至不保证从左到右的调用顺序。(但现代编译器为了防止产生难以理解的执行,通常按照自然顺序调用、不做激进优化。)
操作系统是软件和硬件之间的桥梁;因此我们 “找到” 一些合适的软件、一些相对简单的硬件,理解操作系统就会变得容易——我们的课程通过讲解操作系统上的应用,帮助你实现 “编程” 的梦想。
课程网站 (首页上的信息、课程概述、参考书与参考资料、生存指南);教科书 Operating Systems: Three Easy Pieces: