零基础图解 CS 导论:从「计算」到「能上网的机器」

本文按港科大(广州)UFUG1601《Intro. CS》第 1 章课件的六讲顺序整理成一份可独立阅读的笔记,每一讲都配套课件原图与外部权威图,并把课件里的判断题与 Retrieval Check(回顾题)讲透怎么答。如果你正在为这门课的课堂小测、期中或期末做准备,可以拿这份笔记当预习/复习材料;如果你打算把它转发给没听过这门课的学弟学妹,按章节顺序读下来就行——不需要任何编程或计算机科学基础。

本笔记怎么读

整本课件围绕四个核心问题展开:什么可以被计算?如何表达一个解?机器如何执行它?机器之间如何协作?这条主线刚好对应六讲:computation 的契约、图灵模型与冯诺依曼模型、计算机发展史、硬件与存储层次、程序与操作系统、计算机网络。读完六讲,你脑子里应该能串起一条「抽象 → 硬件 → 软件 → 网络」的递进链,而不是把六个词条当成互不相关的小知识来背。

每一讲末尾都有「这一讲我们搞定的问题」与给下一讲留的钩子;遇到判断题或检索题,我们当场示范怎么答,不绕弯。


第 1 讲:「计算」到底是什么?

这一讲要回答的问题:计算机科学到底在研究什么?「计算」两个字到底什么意思?

1.1 计算机科学的契约:输入 + 规则 + 输出

课件 Slide 19 给了一句直接定义:计算是任何良定义(well-defined)的算术或非算术运算,常见例子包括数学方程求解和计算机算法的执行Forouzan。但更便于日常使用的是 Slide 20 的三件套:一次计算必须满足三条契约——输入(什么信息进入)、规则(允许执行哪些步骤)、输出(必须产生什么结果)。契约一旦写定,输入相同、规则相同,输出就必须相同;这不是计算机科学的洁癖,是它能稳定运行的前提。

来看一张图。三行流程同构,每一行都是「输入 → 计算 → 输出」:

图注:课件 Slide 17 的「计算 = 输入+处理+输出」三件套图。第一行是抽象模型:Input → Computation → Output,旁边配一幅算盘(Abacus,Chinese: suanpan)的历史图片。第二、第三行是同构的两个具体例子——把数组 [4, 8, 15, 16, 23, 42] 作为输入,分别经过 Sum(求和,得到 108,标记为 Arithmetic)和 Sort(按降序排序得到 [42, 23, 16, 15, 8, 4],标记为 Non-Arithmetic)。一行算术、一行非算术,意思是「计算」不只包括数字运算,重新排列也算——这一下把「计算 = 算数」的偏见打掉了。

这一图同时讲了三个要点:基本模型、算术计算、非算术计算。一图三用,复习时只要照着这张图就能把第一讲的核心概念复述一遍。

1.2 算术 vs 非算术:计算不只是数字

很多人把「计算」自动翻译成「做数学题」,这是误解。把一组数字从小到大排好序,也是计算——只不过它的输出不是单一数字,而是一个新数组。再举一类:判断一句话是不是回文、把一段文字翻译成英文、在地图上找两点之间的最短路径,这些都是计算。判定一次操作是不是计算,标准只有一条:能不能用「输入 + 规则 + 输出」三件套清晰地写出来。

1.3 算法必须有限、有序、无歧义

Slide 21 给了三个关键认知:计算机每秒能执行数十亿次运算,能记住数百 GB 的数据;它只懂你告诉它的事,遵循你给出的指令而非意图;含糊的步骤会产生含糊或错误的行为。这三个认知归结成一句对算法的强约束:算法必须有限(不能写「一直循环直到你觉得差不多」)、有序(每一步的先后必须明确)、无歧义(不能写「如果是合理的情况就怎样」)。这就是为什么图灵机会强调「每步只做一件事」——含糊的步骤到了机器手里只会得到含糊的结果。

打个比方:你把一道菜的做法写给厨师(计算机)。哪怕你把火候、调料、时间都写得一清二楚,厨师也只会照字面执行。如果你的步骤是「把菜炒到差不多熟了」——厨师不会替你判断什么叫「差不多」,最后端出来的菜是什么样全靠运气。

1.4 这一讲我们搞定的问题

到这里你应该能独立回答 Slide 31 的第一道 Retrieval Check:用「输入、处理、输出」定义 computation——computation 是一个过程,输入进入后,按照一组事先定好的规则被处理,最后产生确定的输出;规则必须是有限、有序、无歧义的,计算机只执行被写下的指令,不执行你的意图。

那下一个问题自然冒出来:这条契约(computation)很清晰了,但这台「执行规则的机器」到底是什么样的?怎么组织?这就引出第二讲要解决的核心问题——图灵机和冯诺依曼模型。


第 2 讲:图灵机 vs 冯诺依曼模型——最容易混的一对

这一讲要回答的问题:computation 的契约有了,谁来定义「什么算可计算」、谁来组织一台真机器?这两个角色被两个模型瓜分了,而且分工绝对不能搞反。

2.1 图灵机:抽象地定义「什么算可计算」

图灵机是 1936 年 Alan Turing 在论文《On Computable Numbers, with an Application to the Entscheidungsproblem》里提出的思想实验。它由三个部分组成:一条无限长的纸带(tape,分成格子,每格存一个符号,比如 0 或 1)、一个读写头(head,能读、写、移动一格)、一张规则表(rule table / program,每条规则形如「若当前处于状态 A 且读到 1,则写 0、向右移一格、切换到状态 B」)。一条规则只做一件事,把这一步做完之后再查下一条规则——这就是「每步只做一件事」的工程落实Turing machine。

下面这张快照能帮你把抽象的三部分钉在一张静态画面上:

图注:Wikipedia 上的图灵机单帧快照(仿 Kleene 1952 p.375 风格)。水平方向上一串 tape cell,每个格子填一个抽象符号 s₁, s₁, s₃, s₁, s₀, s₁;head 当前位置上方标注 q₄,代表「读写头正停在第 4 格、机器当前处于状态 4」。两端的 tape 没有画边界,意思是「按惯例无限延展,并不是真有无限长的纸」。注意 s₀…s₃ 只是抽象的符号名,不要把它们当作二进制位或具体数值。

光看一张快照还不够——「规则表」到底是什么?来看一张把抽象规则可视化的状态图:

图注:3-state busy beaver 的有限状态机表示。四个节点 A、B、C、H(H 是终止态,画双圆圈),六条带标签的有向边。每条边的标签形如「读 0 / 写 1 / 头向左移 L / 切到下一个状态」或「读 1 / 写 1 / 头向右移 R」——这正是图灵机单步的最小工作示例。把状态表里有几条规则、每条规则在什么条件下做什么,全部压缩到这一张图里,读到这里你就能回答 Slide 31 的第二道 Retrieval Check:说出图灵机的三个基本组成部分(tape + head + rule table)。

这里需要记两个图灵机的关键术语,方便后面念课件不卡壳:

  • Turing computable:若一个函数的值可以用图灵机算出,则称该函数是图灵可计算的。
  • Turing complete(图灵完备):若一个系统能用来模拟图灵机,即能在足够的时间和内存下执行任何计算,则称该系统是图灵完备的。课件 Slide 25 给出的例子:Python、Java、C++ 等几乎所有现代编程语言都是图灵完备的;让人意外的是,PowerPoint 和 Minecraft 里的红石也是。

2.2 冯诺依曼模型:把抽象落地为一台真机器

图灵机回答了「什么算可计算」,但它没有回答「怎么把这台机器造出来」。1945 年前后,John von Neumann 写了一篇内部报告 First Draft of a Report on the EDVAC,把图灵机的思想落成了一台能造的真机器——后来被称为冯诺依曼模型或冯诺依曼架构Von Neumann architecture。

冯诺依曼模型把一台数字计算机拆成五部件:

部件英文一句话作用
算术逻辑单元Arithmetic Logic Unit (ALU)做加减乘除、AND/OR 等运算
控制单元Control Unit决定每一步先做什么后做什么
存储器Storage / Memory存程序和数据
输入Input把数据从外面送进来(键盘、鼠标等)
输出Output把结果送到外面(显示器、打印机等)

下面这张课件原图就是五部件的中文教学版,结构与 Wikipedia 英文标准图完全同构:

图注:冯诺依曼五部件结构示意图。深色背景框内,浅绿色的「凹」字形外层模块标注为 Input/output;内部三个相互连接的矩形模块——橙色矩形 Arithmetic Logic Unit(左上)、浅蓝色矩形 Control Unit(左下)、绿色大正方形 Storage(右侧)——通过白色连接条互相连通。读图时请直接对位五条:ALU、Control、Storage、Input、Output,把它们填回上表。

到这里你应该能独立回答 Slide 30 的 Quiz:「根据冯诺依曼模型,______ 存放在内存中?」答案是 3,数据和程序都是——这就是 stored-program(存储程序)思想:冯诺依曼模型把「程序」和「数据」用同一种二进制机制编码到同一个可寻址的内存里。换句话说,程序本身也是一种数据,CPU 可以像读写数据一样读写它。这是计算机能「自己改写自己」的根本原因。

2.3 关键澄清:图灵机 ≠ 冯诺依曼模型

最常踩坑的一题就是这一层。课件 Slide 28 给的对照表如下:

维度图灵机(Turing model)冯诺依曼模型(Von Neumann model)
角色抽象地定义「什么是计算」组织一台实用的存储程序计算机
所属学科可计算性理论(数学/逻辑)硬件体系结构(工程)
核心思想规则作用于「存放在内存中的符号」规则作用于「存放在内存中的符号」
不要做的事不要把它当电脑品牌不要把它当电脑品牌

读法:两者共享「规则作用于内存中的符号」这条思想,但目的完全不同。图灵机回答的是理论问题——给定一条规则序列,什么样的函数可以被算出来;冯诺依曼模型回答的是工程问题——怎么把规则、内存、运算器、控制器、输入输出拼成一台可以批量生产的机器。一个是数学模型,一个是工程蓝图。

这一讲我们搞定的问题:图灵机是「可计算性的理论模型」,冯诺依曼是「真实机器的组织蓝图」,二者共享「规则作用于内存中的符号」这一思想,但角色不同。那么问题又来了:蓝图画得再漂亮,机器什么时候真的造出来、长什么样?第三讲就把这条时间线拉起来。


第 3 讲:从齿轮到芯片——计算机怎么一步步长成今天这样

这一讲要回答的问题:冯诺依曼模型只是蓝图,那第一台真机器什么时候造出来?中间经历了哪些阶段?今天我们看到的电脑和当年的机器相比,变了什么、没变什么?

3.1 贯穿历史的「重复模式」

课件 Slide 33 给了一条分析历史节点的统一框架,叫 Need → Representation → Mechanism → Improvement(需求 → 表示 → 机制 → 改进)。每一个时代的人在面对一个具体需求时,会发明一种表示方法,再造出实现这种表示的机械装置,然后不断改进这个装置。下面三个节点都用这条模式串起来。

  • 算盘(8 世纪,北宋):需求是把数字算得快;表示是「每档用上下两组珠子代表不同权重的十进制位」;机制是木质框架 + 拨珠规则;改进是出现了不同的珠数配置(例如常见的二五珠算盘)。
  • Jacquard 提花机(1804):需求是用同一台机器织出不同花纹的布;表示是打孔卡片——卡片上的每个孔代表「这一根线要不要提起」;机制是机械读取装置逐行扫描卡片;改进是这套「用一张卡控制一台机器」的思路成了后来 stored-program 思想的史前引线——「换卡就等于换程序」History of computing hardware。
  • 针轮计算器(17–19 世纪):需求是做更复杂的乘除法;表示是「用拨盘位置表示数字」;机制是针轮机构 + 手摇曲柄;改进是加上清零杆和多位累加寄存器,逐步逼近今天计算器的形态。

3.2 电子计算机登场:ENIAC / EDVAC / EDSAC 三个节点

时间线跳到 20 世纪中叶,三台机器把冯诺依曼模型一步步造出来。

  • ENIAC(1945 年建成,1946 年 2 月落成):第一台可编程、电子、通用、图灵完备的数字计算机。它有 18,000 支真空管,重 30 多吨,占地约 28 平方米(300 平方英尺),算力约 500 FLOPS——比今天的手机慢了几十亿倍。但 ENIAC 不是 stored-program 计算机,编程靠插线板 + 三个可移动函数表(共 3,600 个十位开关),改一次程序往往要好几天ENIAC。

来看一张 ENIAC 时代真实有人编程的照片:

图注:1947–1955 年间的美国军方照片。背景是 Glenn A. Beck,前景是 Betty Snyder,两人在弹道研究实验室(BRL)328 号楼里为 ENIAC 编程。注意主体是人而不是机器面板——它把「ENIAC 是真实存在、真实有人编程的电子计算机」这一历史事实直观地钉在读者眼前。课件 Slide 34 原本配的是一张机械硬盘内部结构的照片(错配),用这张图替换更贴近内容。

  • EDVAC(1945 年草案 / 1949 年交付):冯诺依曼执笔的 First Draft of a Report on the EDVAC(1945-06-30)把它从蓝图变成设计书。与 ENIAC 不同,EDVAC 采用二进制 + 串行 + 自动校验,主存用 mercury acoustic delay lines,容量 1,024 个 44-bit 字(约 5.6 KB)。它第一次按 stored-program 思想设计,但交付周期被拖到 1949 年EDVAC。
  • EDSAC(1949 年 5 月 6 日首次运行):剑桥大学 Maurice Wilkes 团队直接按 EDVAC 草案造出来的英国机器。它是第一本编程教科书(Wilkes/Wheeler/Gill 1951 年合著)所对应的硬件;David Wheeler 在 EDSAC 上拿到了全球第一个计算机科学 PhD,并发明了 subroutine 与 index registerEDSAC。

3.3 五代计算机:物理技术在变,核心任务没变

五代划分是课件 Slide 36 的标准答案,与主流计算机史的分期一致History of computing hardware:

代际时间窗口标志性物理技术
第 1 代1950–1959真空管
第 2 代1959–1965晶体管
第 3 代1965–1975集成电路(IC)
第 4 代1975–1985微计算机(1975 Altair 8800,首台桌面计算机)
第 5 代1985–1995+集群、向量处理器、工作站、多核、GPGPU、HPC

下面这张照片直观对比了「一代比一代小」:

图注:1962 年两位女士各手持一块电路板,从左到右分别是 ENIAC、EDVAC、ORDVAC、BRLESC-I 四代板件,尺寸依次缩小。这不是「四代计算机的正面照」,而是「四代计算机各取一块板件并排对比」——视觉上把五代划分中的硬件微型化趋势一次讲透。

3.4 现代设备分类

课件 Slide 38 给出的现代设备分类是:超算 / HPC、大型机(正逐步被集群替代)、微型计算机(PC)、工业控制计算机。Slide 39 的 Quiz 第一题答案:是的,台式机和笔记本都属于个人计算机。匹配题的标准答案是:a) Server → iii. 网络数据管理;b) Supercomputers → i. 科学研究与复杂计算;c) Embedded system → ii. 控制家电。

3.5 这一讲我们搞定的问题

物理技术在变(齿轮 → 真空管 → 晶体管 → IC → 微处理器 → 集群 / GPGPU),但核心任务没变:输入、处理、存储、输出。现代设备的差异主要体现在规模、专业化与工作负载上。课件 Slide 40 把这一句点成了金句:物理技术在变,核心任务没变——这正是从「历史」过渡到「体系结构」的桥。

那么问题又来了:冯诺依曼模型把存储器当作五部件之一,但实际上一台机器里有好几种速度差好几个数量级的存储器,它们是怎么组织的?第四讲把这一格拆开。


第 4 讲:硬件与存储层次——CPU、内存、磁盘为什么要有金字塔

这一讲要回答的问题:冯诺依曼模型里的「Memory」到底是什么?CPU 为啥要等内存?内存为什么要分层?

4.1 硬件三层分类

课件 Slide 42 给出了今天一台计算机的硬件骨架——三大族:

硬件族包含一句话作用
中央处理器(CPU)ALU + Control Unit + Registers执行指令
存储器(Memory)Cache(SRAM)+ ROM + RAM(DRAM)临时或长期保存程序与数据
外设(Peripheral)输入设备 + 输出设备 + 外存(SSD、硬盘、U 盘等)+ 网络设备联通外部世界

下面这张课件原图把这三大族的子项和功能一次画清楚:

图注:课件 Slide 42 的硬件组成结构图。从根节点 Hardware 出发,分出 Central Processing Unit (CPU)、Memory、Peripheral 三个主分支。CPU 下含 ALU(Mathematical operations)、Control Unit(Instruction execution)、Registers(Temporary storage);Memory 下含 Cache(Store frequently accessed data)、ROM(Store permanent system software)、RAM(Temporary storage)、DRAM(Main memory);Peripheral 下含输入设备、输出设备、外存(SSD/硬盘/软盘/CD/U 盘等)、网络设备(网卡/调制解调器等)。把它和第二讲冯诺依曼五部件对位:CPU ≈ ALU + Control;Memory ≈ Storage;Peripheral ≈ Input + Output——抽象蓝图就这样落到真实硬件家族上。

4.2 CPU 指令周期:Fetch → Decode → Execute → Store

CPU 每执行一条指令都要走四步循环:

  1. Fetch(取指):从内存读下一条指令。
  2. Decode(译码):确定这条指令要做什么、操作数是什么。
  3. Execute(执行):执行运算。
  4. Store(存储):把结果存回内存或寄存器,继续下一条。

这个循环每秒重复数百万到数十亿次——也就是说,CPU 大部分时间在做的事情是「从内存里搬数据」。这一步的瓶颈不在 CPU 本身,而在内存。问题来了:内存也要分层吗?为什么要分层?

4.3 内存金字塔:书桌—书架—图书馆

课件 Slide 44 给出的六层金字塔是今天一台计算机最常见的内存层次。把它读懂,你就理解了为什么程序员的直觉「我刚用的数据很可能再用」值得被硬件显式利用Memory hierarchy。

图注:课件 Slide 44 的内存金字塔(中文版)。从顶到底共六层:Register → Cache inside core L1 cache (SRAM) → Cache outside core: L2 cache (SRAM) → DRAM → Local Disk → Remote Storage。左侧「容量增大」箭头与右侧「速度与价格升高」箭头反向——顶部小、快、贵;底部大、慢、便宜。这是一个「又快又便宜还大容量在物理上做不到」的取舍图:想快就要付出容量与价格的代价。

Wikipedia 英文权威版给出了同一结构的标准图,对照看能加深印象:

图注:Wikipedia 上的 Computer Memory Hierarchy 标准英文版。顶到底六层分别是 processor registers / processor cache / random access memory / flash+USB memory / hard drives / tape backup;每层带容量(容量/尺寸)、power on/off(持续供电与否 + 存储时长)、speed+price(速度 + 价格)三组标签。注意 Wikipedia 多了一层 flash/USB memory,课件把它并入 Local Disk 一类——结构同构,命名口径有差异。

为什么要有金字塔?课件 Slide 44 的解释很直接:高速内存昂贵且物理上有限;大容量内存便宜但离处理器远。程序往往会重复访问最近用过的数据与指令——这就是局部性原理。Wikipedia 给的两条规律可以记下来:temporal locality(时间局部性,最近用过的很可能再用)+ spatial locality(空间局部性,附近地址的数据很可能也要用)。

打个比方:你写论文的时候,正在写的那段、正在翻的那本书就摆在桌上(Register + L1/L2 cache),快得很;常用的几本书放在书架上(DRAM),稍微走两步就能拿到;偶尔要查的资料塞在抽屉里或家里另一个房间的柜子里(Local Disk);更冷门的资料要去图书馆调(Remote Storage)——速度越快、容量越小、价格越贵。

4.4 这一讲我们搞定的问题

CPU 指令周期每秒钟重复数百万到数十亿次;内存层次的存在是因为「又快又便宜还大容量」在物理上做不到——金字塔解释了为什么程序员的直觉「我刚用的数据很可能再用」值得被硬件显式利用,能回答 Slide 58 的第二道 Retrieval Check。

那么问题又来了:硬件这么复杂,CPU + 内存金字塔得有人来协调吧?第五讲就把这个协调层——操作系统——拉进来。


第 5 讲:程序、软件与操作系统——代码怎么在这台机器上跑起来

这一讲要回答的问题:高级语言写出来的那几行代码,怎么一步步变成 CPU 能跑的东西?操作系统到底在管什么?

5.1 程序 = 一组按顺序执行的指令

课件 Slide 48 给的定义:程序是一组告诉计算机如何完成特定任务的指令,这些指令按特定顺序编写,计算机逐步执行它们以达成期望的功能。早期的程序员只能直接用位模式(bit patterns)写机器语言——后来他们用符号代替位模式,这才有了汇编语言;再往后才有 C、C++、Java、Python 这些更接近人类语言的高级语言。

来看一张图,把语言层次讲透:

图注:课件 Slide 51 的语言抽象层次。左侧一根双色箭头,从底部的红色 Machine Language 渐变到顶部的绿色 Natural Language。中间堆叠三层模块:顶层 Python/C++/Java/C(绿色,归为 High-level Language);中层 Assembly Language(黄绿色渐变);底层 Machine Language(红色),后两层共同归为 Low-level Language。每一层都隐藏细节、保留语义——这是「为什么我们需要高级语言」的最小证据。

光看层次还不够,把同一件事用 Python 和汇编各写一遍,对比最直观:

图注:x86 汇编代码编辑器的截图,主体是寻找并打印素数的程序。从 11 行到 53 行,单这一个任务就要写 43 行汇编;同样的事在课件 Slide 50 里用 Python 只用 6 行就能搞定。汇编要把寄存器(eax、ebx)、内存寻址、跳转、条件判断全显式写出来——读者一眼看到「为什么需要高级语言」,这是「高级 vs 低级」对比的最直接证据。

5.2 编译 vs 解释:先翻译好再演 vs 现场同传

课件 Slide 56 给了一条比喻,把两种翻译策略讲得清楚:

  • 编译(Compilation):执行前一次性翻译整个程序为机器码,再去运行。改一次源代码就要重新编译一次,但运行时更快。典型语言:C、C++、Java、Rust、Go。
  • 解释(Interpretation):运行时由另一程序(解释器)逐条执行源代码。改完立刻就能试,但运行更慢。典型语言:Python、JavaScript、Ruby、PHP。

下面两张图把两种流程画出来:

图注:编译流程图。顶部 Source Code Files (Text Format) 向下箭头指向 Compiler(绿色圆角矩形框),再向下箭头指向 Object File (Executable File),并向右分出「Reusable」分支,最后向下指向 Execution。右上角蓝色文字「整体一起执行」点题。右侧并列的红色文字列出 C/C++、Java、Rust、Go——这些语言的典型归属是「先翻译好再演」。

图注:解释流程图。顶部 Source Code (Text Format) 向下箭头指向 Interpreter(绿色圆角矩形框),再向下箭头指向 Execution。右上角水印「一行一行来」点题。左侧红色文字列出 Python、JavaScript、Ruby、PHP——这些语言的典型归属是「现场同传」。

课件强调:真实的语言实现往往二者结合(比如 Java 是先编译成字节码再由 JVM 解释执行),所以真正该问的不是「这门语言是编译还是解释」,而是「这种实现在哪些权衡之间做选择」。

5.3 操作系统:四个层 + 三件事

课件 Slide 55 给出了 OS 的定义:管理计算机硬件与软件资源,并为计算机程序提供公共服务的系统软件。它有四个核心职责Operating system:

  1. 资源管理:给应用分配 CPU 时间与内存空间,避免单个程序独占。
  2. 应用隔离:出于安全考虑让一个程序无法独占资源或读到另一个程序的数据。
  3. 硬件抽象:简化编程,并借助虚拟化扩展资源(比如虚拟内存让程序以为自己有几乎无限的内存)。
  4. 公共服务:统一提供网络与磁盘访问,使应用无需修改即可在不同硬件上运行。

OS 在系统里的位置——既是应用程序调用的服务提供者,也是硬件暴露给应用的抽象层——可以画在一张四层图里:

图注:课件 Slide 55 的 User / Application / OS / Hardware 四层结构图。自顶向下:User(橙色矩形)→ Application(绿色矩形)→ Operating System(蓝色矩形)→ Hardware(红色矩形)。各层之间用双向箭头连接——User 与 Application 互调,Application 通过 OS 调用硬件资源,OS 抽象后向上提供公共服务。注意蓝色箭头额外从 Application 直接连到 Hardware——这是图里简化出来的一条「应用程序理论上也能直接调硬件」路径,实际现代系统都会拦在 OS 这一层。

5.4 程序的生命周期:七步走到屏幕

课件 Slide 57 用一张七步流程图把程序从双击图标到显示器反馈的整个过程钉死:

图注:程序生命周期七步流程图。组件含显示器(左上,屏幕显示 .exe 文件并被点击)、OS(中上,黑底命令行窗口图标)、File System(右上,硬盘图标)、Memory(中下,内存条图标)、Program(底部中央,代码符号 </>)。七步编号依次是:① 从显示器到 OS 的 Signal;② OS 指示 File System「Read this file」;③ File System 把文件内容返回给 OS;④ OS 分配内存空间并将程序写入内存;⑤ 内存运行程序;⑥ 程序执行结果反馈到显示器;⑦ OS 同时改变显示器显示。

把这一节和课件 Slide 57 的文字结合起来就是六阶段:编辑 → 编译/解释 → 链接 → 装入 → 执行 → 终止。OS 既是翻译官也是调度员——它把多个程序对同一台机器的争夺安排得互不打架。

5.5 这一讲我们搞定的问题

高级语言先被编译/解释成机器能懂的二进制,然后由 OS 装入内存再交给 CPU 执行。Slide 58 的 Retrieval Check 现在全能答上:Fetch → Decode → Execute 三步(Store 这一步在第 4 讲 CPU 指令周期的四步框架里展开,但 Slide 58 本身只要求三步);内存分层是因为物理上「又快又便宜还大容量」做不到;OS 至少给应用分配 CPU 与内存、提供网络与磁盘访问这两项服务。

那么问题又来了:单台机器讲完了,但你和同学之间是怎么把数据发过去的?第六讲把视野从一台机器拉到整个互联网。


第 6 讲:计算机网络——从 LAN 到 Internet,OSI 七层与 TCP/IP 是怎么搭起来的

这一讲要回答的问题:电脑连上 Wi-Fi 之后,到底发生了什么?「OSI 七层」到底是哪七层?TCP/IP 又是怎么来的?

6.1 LAN、WAN、Internet:范围从小到大

课件 Slide 63 给了一张按跨越距离划分的网络范围表。这里只挑最容易混的三档记:

网络类型范围互联的对象例子
LAN(局域网)1 m–1 km(房间、楼宇、园区)主机办公网络、家庭 Wi-Fi
WAN(广域网)10–1000 km(城市、国家、洲)LAN、交换机、路由器企业分支互联
Internet(互联网)全球全球互联的网络Web、邮件、云服务

来看两张课件原图,把 LAN 与 WAN 的形态讲透:

图注:课件 Slide 64 的家庭 LAN 拓扑。左半边是六台终端设备:台式机、Smart TV、游戏机三台有线(红色实线)接入中央的 Router;Notebook、智能手机、打印机三台无线(蓝色虚线,Wi-Fi)也接入 Router。右半边 Router 通过 Modem 接到墙壁插座(DSL/电缆/光纤),再到室外基础设施,最终连到 ISP(信号塔图标)。注意 Router 和 Modem 现在常常合并成一个叫 gateway 或 hub 的设备。家庭就是最小的 LAN 形态——你家里的台式机、手机、智能电视、打印机就是这么连起来的。

图注:课件 Slide 65 的 WAN 拓扑。中央是一朵绿色的「广域网云」(WAN),云内五个青色立方体(mesh 结构)互连成核心网络。云外四个站点:左上 Data Center(数据中心)、右上 Remote Office(远程办公室)、左下 Branch Office(分支办公室)、右下 Regional Office(区域办公室)。每个站点用红色锯齿状线连到 WAN 云。和 LAN 的关键区别:LAN 互联主机,WAN 互联 LAN——它跨越城市/国家/全球,由电信公司创建运营,再租给使用它的组织。

6.2 IP 地址:IPv4 是 32 bit,IPv6 是 128 bit

课件 Slide 70 给出 IP 地址的定义:分配给每个连入计算机网络、通过 IP 协议通信的设备的数字标签。IPv4 地址是点分十进制 xxx.xxx.xxx.xxx,每段 8 bit,共 32 bit。下面这张图把它和二进制的对应关系画了出来:

图注:IPv4 地址结构图。第一行点分十进制 192 . 168 . 43 . 241,下标依次为 1st/2nd/3rd/4th Octet;第二行对应二进制 11000000 . 10101000 . 00101011 . 11110001。每个二进制段下面用括号标注 8 Bits (1 Byte);底部总括 32 Bits (4 Bytes)。32 bit = 2³² ≈ 43 亿——听起来很多,但全球联网设备数早已超过这个数字,所以 IPv6 出现了,地址长度扩到 128 bit ≈ 3.4×10³⁸IPv4。

IPv6 的额外好处(课件 Slide 71):地址长度扩到 128 bit;头部从 IPv4 的 13 个字段大幅简化到 8 个固定字段(依据 RFC 8200 标准),路由器处理更快;原来在 IPv4 里是必需字段的若干选项在 IPv6 里变成可选(因为它们本来就不常用)。

6.3 DNS:互联网的电话簿

课件 Slide 73 把 DNS 比喻为互联网的电话簿:人类记域名(如 google.com),浏览器之间通过 IP 地址通信,DNS 把域名翻译成 IP 地址OSI model。

图注:课件 Slide 74 的 DNS 查询流程简化图。左是带显示器、主机、键盘和鼠标的台式计算机;右是 DNS Server(右下角带文档+地球图标)。步骤 (2):左侧计算机用「Enquiry」向 DNS Server 查询;步骤 (3):DNS Server 用「return IP address: xxx.xxx.xxx.xxx」返回 IP;步骤 (4):浏览器用返回的 IP 直接访问 google 服务器。四步流程:浏览器请求域名 → DNS 查找对应 IP → 浏览器联系服务器 → 服务器返回网页数据。

6.4 TCP/IP 与 OSI:概念模型 vs 实际架构

课件 Slide 69 给的核心区分:OSI 是概念参考模型,TCP/IP 才是 Internet 实际使用的架构。OSI 由 ISO 在 1984 年发布为 ISO/IEC 7498;TCP/IP 起源于 1974 年 Cerf/Kahn 的设计,1978 年被 Postel 拆成 IP + TCP 两层,1983 年 1 月 1 日 ARPANET 完成从 NCP 到 TCP/IP 的切换(这一天被叫做 Flag Day),RFC 1122/1123(1989)把四层抽象模型定型Internet protocol suite。

来看 OSI 七层结构的中文课件版与英文权威版:

图注:课件 Slide 75 的 OSI 七层中文版。从下到上七块蓝色长方体,颜色由底部深蓝渐变到顶部浅蓝:1 Physical → 2 Data Link → 3 Network → 4 Transport → 5 Session → 6 Presentation → 7 Application。每层右侧给一句话功能描述。

图注:Wikipedia 上的 OSI 七层英文官方版(OSI_Model_v1.svg)。每行含层名 + 一句话功能 + PDU 名:1 Physical(Bits/Symbol)、2 Data Link(Frames)、3 Network(Packets)、4 Transport(Segments)、5 Session(Data)、6 Presentation(Data)、7 Application(Data)。左侧把 1–4 层圈为 Media Layers、5–7 层圈为 Host Layers——这是教学传统分组,不是 ISO 硬性命名。可以与课件中文版逐行对照,把每层的中英文和 PDU 名一次记住。

6.5 分层思想:每层只干一类任务

OSI 七层不是七种独立的技术,而是一条分工协作链。Wikipedia 的原话是:「Each layer has well-defined functions and semantics and serves a class of functionality to the layer above it and is served by the layer below it.」——每一层只干一类任务,向上一层提供服务,向下一层要服务;同层两端之间通过协议(Protocol)交换数据单元(PDU)。

来看一张讲透这条思想的抽象图:

图注:OSI 分层通信示意图(example with layers 3 to 5)。左右两台机器各画三层(N=3,4,5),每层一个矩形,称为 (N) Instance;左右同一层之间用横线相连,称为 (N)-Protocol——这是对等层协议。本机内层与层之间各有一条贯穿的垂直实线,表示数据在本机内从一层传到下一层——这是垂直数据流。图中只画了三层、用省略号表示延伸到完整七层,但分工思想(对等层横线 + 垂直数据流)一次讲透。

为什么要分层?因为一层只管一类任务,允许局部改动而不必整体重设计——比如把 Wi-Fi 换成光纤只动物理层和数据链路层,上面五层可以原样复用。这就是为什么 Slide 75 把这一句点成核心考点。

6.6 Internet ≠ World Wide Web

课件 Slide 67 给了一个容易踩坑的区分:Internet ≠ World Wide Web。Internet 是连接网络的全球基础设施;Web 是构建在互联网上的一种应用——邮件、文件传输、网游、通话都跑在 Internet 上,但和 Web 是并列的应用。课件给的类比:路是基础设施,快递服务使用路;Web 是快递的一种,邮件、网游是另一种。

6.7 这一讲我们搞定的问题

Internet 是「网络之网络」,跑的是 TCP/IP;OSI 是概念参考模型;分层思想是「每层只干一类任务、向上一层提供服务、向下一层要服务」——你可以用这一句直接答 Slide 74 的核心考点,也能向同学讲清「为什么 HTTP 报错时 OSI 报哪一层比浏览器显示的 404 更值得程序员关心」。

到这里,整本 UFUG1601 第 1 章课件的六讲连成了一条线:computation 的契约 → 图灵机(什么算可计算)与冯诺依曼(怎么组织一台真机器)→ 真机器怎么从齿轮一步步长成今天的芯片 → 真机器里的内存金字塔 → 真机器上的操作系统与程序生命周期 → 多台真机器怎么互联成 Internet。抽象 → 硬件 → 软件 → 网络,每一步都为下一步铺路。


参考文献

本专题引用的核心资料如下,建议深入学习时阅读原文:

  1. Forouzan, Foundations of Computer Science, 4th Edition (2018) — Cengage Asia(ACM CS2013 课程模型覆盖的 CS 导论教材,第 1 章给出 computation 的标准定义与图灵/冯诺依曼模型介绍)
  2. Turing machine (Wikipedia) — https://en.wikipedia.org/wiki/Turing_machine(图灵机三部分定义、Turing 1936 论文、3-state busy beaver 状态表)
  3. Von Neumann architecture (Wikipedia) — https://en.wikipedia.org/wiki/Von_Neumann_architecture(冯诺依曼五部件、First Draft of the EDVAC 1945、stored-program 思想)
  4. History of computing hardware (Wikipedia) / ENIAC / EDVAC / EDSAC — History of computing hardware、ENIAC、EDVAC、EDSAC(ENIAC / EDVAC / EDSAC 三大节点、五代计算机划分与现代设备分类)
  5. Memory hierarchy (Wikipedia) — https://en.wikipedia.org/wiki/Memory_hierarchy(内存金字塔 Internal/Main/On-line/Off-line 四层框架与 Zen 4 实例延迟表)
  6. Operating system (Wikipedia) — https://en.wikipedia.org/wiki/Operating_system(OS 的 three main purposes、Kernel 保护职能、User/App/OS/Hardware 四层结构)
  7. OSI model (Wikipedia) — https://en.wikipedia.org/wiki/OSI_model(OSI 七层定义、分层思想、IPv4 32 bit / IPv6 128 bit 地址长度)
  8. Internet (Wikipedia) + Internet protocol suite (Wikipedia) — Internet、Internet protocol suite(Internet = network of networks、TCP/IP 起源 ARPANET → Cerf/Kahn 1974 → Postel 1978 → Flag Day 1983 → RFC 1122/1123)
零基础图解 CS 导论:从「计算」到「能上网的机器」