几个专业术语

全书最短的一节,六个名词。 但这六个词有个共同点:它们都是在描述”什么东西可以变、什么东西不能变”——而这正是 1.2.4 那条”体系结构 vs 组成”分界线的实际应用。

读法:每个词都先问一句”它锁住了哪一层”。

机制

系列机:锁住体系结构,放开组成

系列机是指具有相同体系结构、但组成和实现不同的一系列计算机。

系列机同一个不同的实现

举例:Intel 从 8086 到今天的酷睿,都属于 x86 系列机。指令系统一路兼容,但内部实现从最初的几万个晶体管变成了几百亿个。

这一条正是 1.2.4 判据的直接后果:体系结构(程序员可见的)保持不变,程序才能继续跑;组成(透明的)随便改,因为程序看不见它。

系列机存在的意义是保护软件投资——如果每出一代 CPU 就要重写所有软件,产业根本无法积累。

兼容:四个方向,只有一个是必须的

兼容指的是硬件、软件在不同型号之间的通用性。 方向有四个:

方向含义现实中
向后兼容(向下兼容)新机器能运行旧机器的程序✅ 系列机必须做到
向前兼容(向上兼容)旧机器能运行新机器的程序❌ 一般做不到
向上兼容低档机的程序能在高档机上运行✅ 通常成立
向下兼容高档机的程序能在低档机上运行❌ 一般不成立

只有”向后兼容”是系列机的硬要求——新的能跑旧的。反过来不行:老 CPU 遇到新指令会触发非法指令异常。

边界辨析:这四个词在中文资料里是乱的

“向上/向下/向前/向后”这四个词,不同教材的用法互相冲突,同一个词在两本书里可能指相反的方向。

考场上的自保办法:不要背词,读题干的解释。

只有一条结论是稳的,而且它足够答题:

新机器能跑旧程序(成立);旧机器不能跑新程序(不成立)

凡是选项描述的是前者,判对;描述的是后者,判错。 至于它管这叫”向后兼容”还是”向下兼容”,按题干的定义走。

这与 1.2.3 的另一处术语歧义(“汇编程序”指工具还是指程序)是同一类问题——中文术语撞车时,抓住实质而不是名字。 第 7 章 7.2.4 的”端口”也是同一种情况。

软件可移植性:锁住源码,放开机器码

同一个软件可以不加修改或稍加修改就运行在不同硬件上的能力。

它靠三样东西实现,层次由低到高:

靠什么保住什么例子
系列机(同 ISA)机器码直接通用x86 程序在新老 Intel CPU 上都能跑
重新编译(高级语言)源码通用,机器码重新生成同一份 .c 在 ARM 和 x86 上各编译一次
虚拟机 / 解释器中间代码通用Java 字节码

“高级语言可移植”的准确含义是第二行——源码级可移植,不是机器码级。 这条在 1.1.2 说过。

固件:软件的形态,硬件的位置

固件是将程序固化在 ROM 中组成的部件。

固件在功能上是软件,在形态上接近硬件

它的意义在于给”软硬件功能等价”提供了第三个选项:

实现方式速度灵活性成本
纯硬件(电路)最快最差高
固件(ROM 中的程序)中中(可重刷)中
纯软件(主存中的程序)慢最好低

典型例子是 BIOS——它必须在主存还没被初始化时就能运行,所以只能固化在 ROM 里(3.2.2)。

微程序控制器的控制存储器也是固件的一种形态(5.4.3)——这正是 1.2.4 说 M0 层”由硬件或固件实现”的原因。

摩尔定律

内容与边界见 1.1.1,这里只重申三点:

  1. 对象是集成度(晶体管数),不是主频、不是性能。
  2. 是经验观察,不是物理定律。
  3. 它已经明显放缓——所以性能提升的来源从”晶体管更快”转向了”结构更聪明”,这就是第 3~7 章存在的原因。

边界

说法判断理由
”系列机的组成必须相同”❌体系结构相同,组成可以完全不同
”系列机的体系结构可以改”❌改了就跑不了旧程序
”旧机器能运行新机器的程序”❌遇到新指令会触发非法指令异常
”高级语言程序的机器码可移植”❌源码可移植,机器码要重新生成
”固件是硬件”❌本质是软件
”固件不能修改”❌EEPROM / Flash 可重刷
”摩尔定律保证性能翻倍”❌只说集成度
”兼容只有一个方向”❌有多个方向,只有”新跑旧”是必须的

对照速查

术语一句话锁住哪一层
系列机同 ISA、不同实现锁体系结构,放开组成
兼容新的能跑旧的锁指令系统
软件可移植性换机器仍能用锁源码或中间码
固件ROM 里的程序功能是软件,形态近硬件
摩尔定律集成度约 18 个月翻倍——

考点

  • 系列机的定义:同体系结构、不同组成。
  • 兼容的方向:新跑旧成立,旧跑新不成立。
  • 固件的本质是软件。
  • 可移植性的三个层次。

链接