ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CSAPP 3.1 A Historical Perspective(历史视角)

CSAPP 3.1 A Historical Perspective(历史视角) 第 1 课3.1 部分历史视角最小前置知识1 byte 8 bits1 个十六进制数字表示 4 bits。CPU 执行机器指令而不是直接执行 C 源代码。本节暂不要求掌握补码细节、调用约定、栈帧和正式汇编语法。3.1 A Historical Perspective历史主线x86 不是一次从零设计出的整洁体系而是在长期向后兼容的要求下逐步扩展的8086 奠定早期 16 位体系的基础。i386 把体系扩展到 32 位并引入现代操作系统使用的平坦寻址模型。AMD 首先推动 x86-64随后成为 Intel、AMD 共同支持的主流 64 位体系。后续处理器继续加入多核、超线程和向量指令同时尽量保持旧机器代码可运行。学习重点不是背诵全部型号和年份而是理解向后兼容让软件生态得以延续也让 x86 ISA 留下许多历史痕迹。“16 位、32 位、64 位”到底指什么“位数”通常以通用寄存器和主要整数运算宽度来命名但它不是处理器的唯一宽度阶段代表性寄存器地址模型关键变化8086AX16 位用“段:偏移”组合出 20 位地址可寻址 1 MiB奠定早期 x86 指令编码和寄存器体系。i386 / IA-32EAX32 位低 16 位仍叫AX32 位平坦地址空间理论上 4 GiB更适合现代操作系统、分页和 Unix 类系统。x86-64 / AMD64RAX64 位低 32/16/8 位仍可作为EAX/AX/AL使用采用 64 位架构模型但具体处理器不必实现全部 64 位虚拟地址增加寄存器和 64 位模式同时保留大量旧语义。因此8086 被称为 16 位处理器并不表示它的所有部件都是 16 位它使用 16 位通用寄存器却能组合形成 20 位地址。类似地x86-64 也仍能执行 8、16、32 位运算。兼容性具体怎样保留下来保留旧指令语义新处理器继续理解许多旧机器码而不是整体换一套编码。扩展原有寄存器AX没有消失而是成为EAX和RAX的低位部分。提供不同运行模式处理器可支持早期 16 位环境、32 位保护模式以及 x86-64 的长模式操作系统决定实际提供哪些模式。只保证向后方向新处理器通常能运行旧指令但使用 AVX 等新指令的程序不能反过来在不支持它们的旧处理器上运行。硬件兼容不等于软件必然可运行实际运行旧程序还取决于操作系统、可执行文件格式、库和驱动是否继续支持。AMD 为什么能推动 x86-64x86 是一套可由兼容处理器厂商实现的 ISA不是“只有 Intel 才能实现的某一颗芯片”。AMD 选择在 IA-32 上继续扩展增加 64 位运行模式、扩展通用寄存器并增加新寄存器同时尽量保留 32 位软件生态。这套扩展通常称为 AMD64 或 x86-64。市场接受这种兼容演进路线后Intel 也实现了兼容扩展书中早期名称为 EM64T后来称 Intel 64。于是今天所说的 x86-64通常同时覆盖 AMD64 和 Intel 64 这组高度兼容的体系。Moore’s Law 旁注读图时注意纵轴是对数尺度。半对数图上近似直线表示晶体管数量近似按指数增长。原图讨论的是晶体管数量趋势不等于 CPU 频率或程序性能按同样速度翻倍。更多晶体管让处理器可以采用缓存、流水线、乱序执行和多核等更复杂的实现但 ISA 合同可以继续保持兼容。常见误区与疑问Moore’s Law 描述的不是“程序性能定期翻倍”。总结x86 因长期向后兼容而带有历史积累。向后兼容延续了软件生态也让 x86 ISA 保留了不同历史阶段的寄存器、运行模式和指令语义。
返回列表