Skip to content

计算机系统 I | Sec 01-1

课件预览

新窗口打开 / 下载

第一部分:逐页翻译与深度讲解

第1页:封面

  • 原文翻译
    • 沈浩廷 (Haoting Shen)
    • 浙江大学 (Zhejiang University)
  • 专业讲解
    • 这是课程的首页,标明了授课教师为浙江大学的沈浩廷老师。本课程通常对应《计算机系统基础》或类似的核心专业课,旨在打通软件与硬件的壁垒。

第2页:免责声明与致谢

  • 原文翻译
    • 本讲座使用的许多图片和资源收集自互联网,仅用于教育目的。版权归原始所有者所有。
    • 部分幻灯片致谢:
      • CSAPP @ CMU (卡内基梅隆大学的《深入理解计算机系统》课程)
      • 浙大 董亚波 教授
      • 北大 陆俊 博士
      • Coursera.org
  • 专业讲解
    • 学术规范:强调了知识产权的重要性。
    • 课程渊源:提到 CSAPP (Computer Systems: A Programmer's Perspective) 是非常关键的信息。这本书是全球计算机系统课程的“圣经”,说明本课程的内容深度和体系将紧跟国际顶尖标准,注重从程序员视角理解底层系统。

第3页:从源代码到可执行文件

  • 原文翻译
    • 源代码 -> 可执行文件
    • C语言代码示例:int x = 10; x = 2 * x + 15;
    • 经过编译器 (compiler) 转化为 RISC-V 汇编语言。
    • 经过汇编器 (assembler) 转化为 RISC-V 机器语言 (0/1比特串)。
    • 核心观点:Everything is a number! (一切皆数!)
    • 展示了寄存器操作:r0=0, r5=r0+10 等。
  • 专业讲解
    • 编译链路:这是计算机系统最核心的流程。高级语言(如C)人类可读,但机器不懂。必须经过编译(转为汇编)、汇编(转为机器码)。
    • RISC-V架构:浙大系统课程通常采用开源的RISC-V指令集架构作为教学模型。
    • 抽象层级:展示了从高级逻辑 (x = ...) 到底层硬件操作 (addi, muli) 的映射。
    • “一切皆数”:在计算机底层,指令、数据、地址本质上都是二进制数字。理解这一点是掌握系统的关键。

第4页:冯·诺依曼模型

  • 原文翻译
    • 令人惊讶的是,在概念层面上,我们仍然可以这样看待计算机(一个约80年前的模型!!!)。
    • 现代计算机包含:CPU、内存 (Memory)、输入/输出 (I/O)、系统总线。
  • 专业讲解
    • 历史地位:冯·诺依曼架构(1945年提出)至今仍是现代计算机的基石。
    • 核心组件
      • CPU:大脑,负责运算和控制。
      • Memory:存储程序和数据。
      • I/O:与外部世界交互。
    • 演变:虽然现代计算机引入了缓存 (Cache)、多核、流水线等技术,但在程序员可见的逻辑模型上,依然遵循这一架构。

第5页:内存的概念视图

  • 原文翻译
    • 表格展示:地址 (Address) vs 内容 (Content)。
    • 例如:在地址 ...0010 处,内容是 0000 0000
    • 内存被看作是一个巨大的字节数组,每个字节有唯一的地址。
  • 专业讲解
    • 线性地址空间:内存被抽象为一个连续的数组。
    • 寻址:CPU通过地址来访问特定的数据。
    • 位宽:这里展示的是8位(1字节)的内容。现代系统通常是64位寻址,但基本原理不变。理解内存是“按地址索引的字节序列”对于理解指针、数组和内存泄漏至关重要。

第6页:晶体管与电路

  • 原文翻译
    • 晶体管原理图 (Transistor Schematic)
    • 全加器 (Full adder)
    • 超大规模集成电路 (VLSI Circuit)
  • 专业讲解
    • 物理基础:计算机的基石是晶体管(开关)。
    • 逻辑构建:晶体管组成逻辑门(与、或、非),逻辑门组成功能单元(如全加器,用于加法运算)。
    • 集成度:数十亿个晶体管集成在一块芯片上形成VLSI,构成了CPU和内存。这一页连接了物理硬件与逻辑运算。

第7页 & 第8页:浙大计算机系统课程体系

  • 原文翻译
    • 分层结构:应用 -> 编译器/库 -> 操作系统 -> 指令集架构 (ISA) -> 计算机组织 (微架构) -> 寄存器传输级 (RTL) -> 数字逻辑电路 -> 器件技术。
    • 课程路线:
      • System-I: 数字逻辑 -> 计算机组织 -> 自己动手写CPU
      • System-II: 操作系统 -> 基于自研CPU编写第一个内核
      • System-III: 计算机体系结构 -> 系统安全 -> 高级内核开发
  • 专业讲解
    • 全栈视野:这张图展示了计算机科学的完整垂直栈。从底层的沙子(硅)到顶层的应用软件。
    • 实践导向:浙大课程的特色是硬核实践。不仅仅是理论,要求学生从门电路开始设计CPU,再在此基础上写操作系统内核。这种“造轮子”的学习方式能让你彻底理解系统是如何运转的。

第9页:(跳过,主要为过渡或目录重复)

(注:原PPT中第9页似乎是目录或过渡,内容较少,直接进入第10页概述)

第10页:课程概述

  • 原文翻译
    • 计算机系统导论
    • 二进制数表示
    • 算术运算
    • 数值数据的表示
    • 非数值数据的表示
    • 数据宽度与存储
  • 专业讲解
    • 这是第一节课的大纲。重点在于信息表示。计算机只认识0和1,如何用0和1表示整数、小数、字符、图像?如何处理溢出?这是本章的核心。

第11页 - 第13页:计算机发展史 (ENIAC & 冯·诺依曼)

  • 原文翻译
    • ENIAC:电子数字积分计算机,使用机械开关和手动连线。
    • 冯·诺依曼与EDVAC报告:提出了两个重要概念——存储程序 (Stored Program)二进制 (Binary)
    • 五大部件:运算器(CA)、控制器(CC)、存储器(M)、输入(I)、输出(O)。
  • 专业讲解
    • 存储程序概念:这是革命性的突破。在此之前,程序是通过插线板硬连线的;在此之后,程序像数据一样存储在内存中,计算机可以自动读取并执行指令,实现了通用性。
    • 二进制:确立了计算机内部使用二进制而非十进制,简化了硬件设计。

第14页 - 第19页:冯·诺依曼模型详解 (餐厅类比)

  • 原文翻译
    • 类比:计算机 vs 餐厅。
    • 存储器 = 仓库 (Storage)。
    • 待办列表 = 指令 (To-do list / Instructions)。
    • 食材 = 数据 (Raw food / Data)。
    • 厨房 = CPU (控制 + 运算)。
    • 通用寄存器 (GPRs) = 厨师手中的盘子/案板(临时存放正在处理的数据)。
    • 执行流程:取指 (Fetch) -> 译码 (Decode) -> 执行 (Execute,如炒菜) -> 写回 (Write Back)。
  • 专业讲解
    • 生动类比
      • PC (程序计数器):相当于厨师看“待办列表”的当前行号,告诉厨师下一步做什么。
      • 寄存器:速度极快但容量小,就像厨师手边的案板,放马上要切的菜。
      • 内存:速度慢但容量大,像仓库,存所有食材和菜谱。
    • 指令周期:计算机的工作就是不断重复“取指令-分析指令-执行指令”的循环。理解这个循环是理解CPU性能瓶颈(如内存墙)的基础。

第20页 - 第21页:冯·诺依曼模型细节 (中文补充)

  • 原文翻译
    • 存储程序:数据和指令形式无区别,但计算机可区分。
    • 指令组成:操作码 (Opcode) + 地址码。
    • 关键部件:
      • PC (程序计数器)
      • CU (控制单元):产生微操作命令。
      • ALU (算术逻辑单元):核心运算部件。
      • 总线:地址线、数据线、控制线。
      • MAR (主存地址寄存器), MDR (主存数据寄存器)。
  • 专业讲解
    • 总线通信:CPU与内存通过总线交换数据。MAR决定访问哪个地址,MDR承载传输的数据。
    • 哈佛架构vs冯氏架构:虽然现代CPU内部(L1 Cache)常将指令和数据分开(哈佛架构),但在主存层面通常仍视为统一编址(冯氏架构)。

第22页 - 第24页:程序的表示与执行

  • 原文翻译
    • 语言层级:机器语言 (0/1) -> 汇编语言 -> 高级语言 (C, Java)。
    • 翻译工具:汇编器 (Assembler), 解释器 (Interpreter), 编译器 (Compiler)。
    • 执行步骤:取指 -> 译码 -> 执行 -> 访存 -> 写回。
    • 程序执行前,起始地址存入PC。
  • 专业讲解
    • 翻译方式
      • 编译:一次性翻译整个程序,生成可执行文件(如C/C++),运行效率高。
      • 解释:逐条翻译并执行(如Python, JavaScript),灵活性高但效率相对低。
    • 五级流水线:现代CPU将这五个步骤并行处理(流水线技术),大大提高了吞吐量。

第25页 - 第29页:信息表示与为何使用二进制

  • 原文翻译
    • 信号:模拟信号 (连续) vs 数字信号 (离散)。
    • 二进制值抽象:0/1, False/True, Low/High, On/Off。
    • 电压阈值:高电平代表1,低电平代表0,中间区域是不确定的。
    • 为何是二进制?
      • 物理实现简单(开关两种状态)。
      • 可靠性高(抗干扰能力强,只要不跨过低/高阈值)。
      • 运算规则简单。
      • 适合逻辑运算(布尔代数)。
    • 提及三进制计算机 (Setun) 的历史尝试,但因缺乏高效的三态晶体管而未普及。
  • 专业讲解
    • 噪声容限:这是二进制胜出的关键。在电压传输中,噪声不可避免。二进制的“非黑即白”使得即使电压有波动,只要还在阈值范围内,就能准确识别0或1。如果是十进制,需要区分10个电压区间,极易出错。
    • 数字化:现实世界是模拟的(连续的),计算机必须通过采样和量化将其转换为离散的二进制数据。

第30页 - 第32页:外部信息与内部数据

  • 原文翻译
    • 外部信息:文本、图像、声音(连续或复杂结构)。
    • 内部数据(机器视角):
      • 数值型:整数(定点数)、实数(浮点数)。
      • 非数值型:字符/字符串、逻辑值。
    • 计算机只能处理离散信息,需编码。
  • 专业讲解
    • 数据类型本质:在高级语言中丰富的类型(如类、树、图),在底层都被拆解为最基本的位 (Bit) 模式。
    • 解释的权力:同样的二进制串 01000001,可以被解释为整数65,也可以被解释为字符 'A'。类型系统帮助程序员正确解释这些位。

第33页 - 第38页:进位计数制与进制转换 (R进制转十进制)

  • 原文翻译
    • 位置计数法:Value=Digit×RadixPosition
    • 十进制示例:123.456=1×102+...
    • 二进制示例:(100101.01)2=1×25+...=37.25
    • 常见进制:二进制(2), 八进制(8), 十进制(10), 十六进制(16)。
    • 转换方法:按权展开求和。
  • 专业讲解
    • 位权:理解不同位置上的数字代表的权重不同(20,21,22...)。
    • 十六进制:程序员最爱。因为 16=24,每4位二进制正好对应1位十六进制,书写紧凑且易于还原。例如 0xFF 就是8个1。

第39页 - 第45页:十进制转R进制

  • 原文翻译
    • 整数部分:除基取余法 (Repeated Division)。除以R取余数,逆序排列。
      • 示例:135 转 二进制 -> 10000111。
    • 小数部分:乘基取整法 (Repeated Multiplication)。乘以R取整数,顺序排列。
      • 示例:0.6875 转 二进制 -> 0.1011。
    • 特殊情况:某些十进制小数无法用有限位二进制表示(如0.65),会出现无限循环。
      • 解决方案:截断或舍入(这也是浮点数精度误差的来源)。
  • 专业讲解
    • 算法原理
      • 除基取余利用了 N=q×R+r,余数 r 即为最低位。
      • 乘基取整利用了 F×R=I+f,整数 I 即为最高位。
    • 精度陷阱:理解为什么 0.1 + 0.2 != 0.3 在计算机中成立,根源就在于0.1在二进制中是无限循环小数,必须截断。

第46页 - 第50页:二进制与八进制/十六进制互转

  • 原文翻译
    • 二转八/十六:从小数点开始,向左向右每3位(八进制)或4位(十六进制)一组,不足补0。
    • 八/十六转二:将每一位展开为对应的3位或4位二进制。
    • 示例:(67.731)8(110111.111011001)2
  • 专业讲解
    • 快捷转换:不需要经过十进制中转。直接分组替换即可。这是调试机器码时的必备技能。
    • 对齐:注意小数点是分组的基准点,整数部分向左分组,小数部分向右分组。

第51页 - 第52页:2的幂与存储单位

  • 原文翻译
    • 210=1024103 (Kilo, K)
    • 220106 (Mega, M)
    • 230109 (Giga, G)
    • 2401012 (Tera, T)
    • 歧义解决:引入 KiB, MiB 等明确表示 210,而 KB, MB 有时指 103(硬盘厂商常用)。
  • 专业讲解
    • 估算技巧210103 是快速估算内存大小和算法复杂度的口诀。
    • 单位混淆:买硬盘时显示的容量比系统里少,就是因为厂商用 1000 进制,而操作系统用 1024 进制。

第54页 - 第60页:二进制算术运算

  • 原文翻译
    • 加法:0+0=0, 0+1=1, 1+1=0 (进位1)。多位加法需处理进位链。
    • 减法:涉及借位 (Borrow)。若被减数小于减数,结果为负(通常用补码表示,此处展示原码减法规则)。
    • 乘法:类似十进制,移位相加。
    • 除法:类似十进制,移位相减。
  • 专业讲解
    • 硬件实现:计算机没有专门的减法单元,通常通过 加法器 + 补码 来实现减法(AB=A+(B))。
    • 溢出:固定位宽的加法可能会溢出(结果超出表示范围),这是系统编程中需要重点检查的错误。

第61页:利用算术进行进制转换

  • 原文翻译
    • 可以直接在二进制下进行除法和取余操作来转换进制,无需转回十进制。
    • 示例:将二进制 101110 除以二进制 1010 (即十进制10),得到的商和余数即为十进制的高位和低位。
  • 专业讲解
    • 这是一种高级技巧,展示了进制转换的数学本质是除法运算,与被转换数的内部表示无关。

第二部分:详细学习笔记 (System I - Lecture 1 Summary)

1. 核心思想:计算机系统的抽象层次

  • 一切皆数 (Everything is a number):无论是代码、图片还是音乐,在计算机底层都是0和1的比特流。
  • 编译链路C CodeCompilerAssemblyAssemblerMachine Code (0/1)
  • 课程目标:打通从应用层到硬件层的任督二脉,最终能够手写CPU手写OS内核

2. 冯·诺依曼架构 (The Von-Neumann Model)

  • 五大部件
    1. 运算器 (ALU):做算术和逻辑运算。
    2. 控制器 (CU):指挥全局,产生控制信号。
    3. 存储器 (Memory):统一存储指令和数据(存储程序概念的核心)。
    4. 输入设备 (Input)
    5. 输出设备 (Output)
  • 工作流程 (指令周期)
    • Fetch (取指):根据PC从内存取指令。
    • Decode (译码):分析指令要做什么。
    • Execute (执行):ALU进行运算。
    • Memory Access (访存):读写数据。
    • Write Back (写回):将结果存回寄存器。
  • 关键寄存器
    • PC (Program Counter):指向下一条指令的地址。
    • MAR/MDR:CPU与内存交互的地址和数据缓冲。

3. 信息表示:为什么是二进制?

  • 物理优势
    • 稳定性:只需区分高/低电平,抗干扰能力强(噪声容限大)。
    • 简单性:晶体管开关天然对应0/1。
    • 逻辑性:完美契合布尔代数 (True/False)。
  • 数字化:现实世界的连续信号必须经过采样量化变为离散的二进制序列。

4. 进制转换 (必考技能)

  • R进制 十进制按权展开求和
    • 例:(101.1)2=1×22+0×21+1×20+1×21=5.5
  • 十进制 R进制
    • 整数部分除基取余,逆序排列
    • 小数部分乘基取整,顺序排列。(注意:可能无限循环,需截断)。
  • 二进制 十六进制/八进制
    • 4位合1 (十六进制) 或 3位合1 (八进制)。
    • 以小数点为界,向两边分组,不足补0。
    • 记忆口诀:8=23, 16=24

5. 数据存储单位

  • 位 (bit):最小单位。
  • 字节 (Byte):8 bits。
  • 换算
    • 1 KB=210 B=1024 B
    • 1 MB=220 B
    • 1 GB=230 B
    • (注:硬盘厂商可能用 1000 进制,需注意区分 KiB/MiB)

6. 二进制算术

  • 加法:逢二进一。
  • 减法:借位。注意:现代计算机内部通常使用补码将减法转化为加法运算,以提高硬件效率。
  • 乘除法:移位与加减的组合。

7. 学习建议

  • 动手实践:不要只看书,尝试手动进行进制转换和二进制加减法,直到形成直觉。
  • 建立模型:脑海中要有一个清晰的“餐厅模型”或“数据流动图”,理解数据如何在CPU、寄存器和内存之间搬运。
  • 关注细节:理解为什么0.1+0.2!=0.3,理解溢出的后果,这些是系统编程中Bug的高发区。