困惑:为什么需要 AbstractMachine?
你是否困惑,“学这个东西到底有什么用”?
John Hopcroft (1986 Turing Award, with Robert Tarjan)
世界上第一台 PC (Altair-8800, Intel 8080)
Bill Gates 从 Harvard 退学,创建 Microsoft (1975)
Bill Gates 和 Paul Allen 在 PDP-10 上实现了 Altair 8800 的全系统模拟器和 BASIC 解释器
我们应该高兴?高兴?还是高兴?
我们的 modernize 还有很长的路要走
代码
指令集
电路
代码 (C) → 指令集 → 逻辑门 (计算机)
理解/构造一个复杂系统 (操作系统/处理器/航母)?
航母不是一天造成的。
采矿船继承了航海时代的设计。
复杂系统的演化通常是 evolutionary 的而不是 revolutionary 的。
无法第一次就设计出 “绝对完美” 的复杂系统
实际情况:从 minimal, simple, and usable 的系统不断经过 local modifications (trial and errors)
我们可以用逻辑电路搭计算器
只需要两条指令和一个编译器
00000000 <entry>:
0: 00100513 li a0,1 # R[a0] <- 1
4: 04800593 li a1,72 # R[a1] <- 0x48 ('H')
8: 00100073 ebreak # hyper-call(a0, a1)
c: 06900593 li a1,105 # R[a1] <- 0x69 ('i')
10: 00100073 ebreak
14: 00a00593 li a1,10 # R[a1] <- 0x0a ('\n')
18: 00100073 ebreak
1c: 00200513 li a0,3 # R[a0] <- 3
20: 00100073 ebreak
可以把状态机的形态保存在存储器里,而不要每次重新设置。(存储程序的通用性真正掀起了计算机走向全领域的革命。)
你们在《计算机系统基础》中学习的机制
提供
我们的设计做了怎样的取舍?
Make 是大家接触的第一个 build system
#
的使用)为什么指定了 ARCH
,就可以编译出一个目标平台的可执行文件?
一切皆程序 (command-line shell; makefile; ...)
计算机系统的一切在此刻不再神秘 (
$ make -nB \
| grep -ve '^\(\#\|echo\|mkdir\|make\)' \
| sed "s#$AM_HOME#\$AM_HOME#g" \
| sed "s#$PWD#.#g" \
| vim -
困难的东西总是存在简单的解释
这才是你们要上的大学
Real power can't be given. It must be taken. ——Godfather
yzh 觉得……好像只有 OS 不够劲啊
那就让大家好好读读 x86 手册吧……那……
觉得虽然体系里的确什么都有了,但还是不够劲啊,不如玩个大的?
上面跑自己的 OS
上面跑自己编译器编译出来的应用程序
应用程序可以是 NEMU
NEMU 又跑自己的 OS……
RISC-V 恰如其时地出现了
是时候革了《计算机系统基础》的命了
Happy Hacking!