--- title: "01-初探计算机脉络" created: 2025-11-28 tags: - 小技能 --- # 初探计算机脉络 > 📚 这是小技能区的第一篇,动笔于大一下:用文科生看历史的眼光,把计算机里的因果串成一条线。 > 💡 感悟先行。想要严谨版的知识体系,配合 [[00-计算机速览|计算机速览]] 一起看。 ## 从需求说起:计算机为什么长这样 首先要知道,计算机是为模拟人脑做计算而生的。但在当时,肯定没有人会因为日常的加减乘除去专门研究发明一台计算机——它一定是投入军用,用于武器的精密计算。所以当时的需求大部分是**数字、加减乘除**。 由此可以去理解冯·诺依曼提出的计算机体系——它是**存储程序**结构的机器,指令和数据都存放在存储器中。顺着需求推,五大件一个都少不了: - 要计算 → **运算器** - 进行何种运算(加/减/乘除)→ **控制器** - 指令和数据得有地方放 → **存储器** - 数据、程序从哪来 → **输入设备** - 一切都是为了得到结果,结果如何让人知道 → **输出设备** ## 现代电脑:细化再组合 从这个角度回到现在,会发现电脑跟这个结构有区别——更具**层次性**: - 运算器 + 控制器 组成 **CPU**(CPU 里还有寄存器——正好模拟了大脑的三大功能:思考、控制、记忆) - 存储器拓展划分成主存、辅存,也就是**内存**与**外存**(外存常见的是硬盘,机械/固态,固态好些贵些) - 写的程序在硬盘里,执行时送到内存,再送到 CPU——所以**应用的启动快慢看硬盘,运行快慢看 CPU 和内存** - 内存分 RAM(可读可写,断电丢包)与 ROM(只读,放 BIOS) - 未装操作系统时的体系:CPU + ROM + CMOS(相当于硬盘,但断电就没,又因耗电极少,电池即可维持);启动后管家交出权力给操作系统:CPU + RAM + 硬盘 - 内存与外存、内存与 CPU 之间还加了**高速缓存**(中转站,即常说的一级、二级缓存) 以上 CPU 和存储器组成了**主机**;输入输出设备统称 **I/O 设备**;再往上统称**硬件**。扬声器、显卡等也是硬件,但锦上添花而非必要。 会发现现代计算机把各个硬件拆分细化又重新组合——这种"细化再组合"的方法叫 **3Y**:**层次化、模块化、规则性**。 > 🔗 这套"装系统前的 BIOS / CMOS"故事,速览篇里有更完整的版本:[[02-从按下电源到桌面|从按下电源到桌面]]。 ## 插一个:为什么用二进制 计算机基于电工作,内存里放的其实是高低电平,不是数字——只是为了便于理解,把它等效成 01 代码。 CPU 每次从内存读取的 01 代码是一定数量的,于是有了 **32 位**(一次取 32 位)、**64 位**(一次取 64 位)CPU 的概念。同时 CPU 有**向下兼容性**:64 位可以拆成高 32 位、低 32 位,从而能运行 32 位的程序(高位数 CPU 能跑低位数程序,反之不行)。 为什么低位数跑不了高位数?每次只读 32 位,而某段代码要 64 位才表达一个功能——一句话被对半拆开,意思自然表达不清楚了。 ## 软件与语言层次 换个角度:从小规模的传感器,到手机、笔记本、PC、服务器、HPC、物联网,内核都是**硬件 + 软件**两部分。离开了软件,硬件就是一堆废铁。 - **系统软件**:帮助操作者与底层"废铁"交互——语言处理系统、操作系统(系统软件的主要部分,有人直接把软件二分为操作系统 + 应用软件)、服务型程序、数据库管理系统、网络软件等。它利用硬件提供的接口,管理软硬件资源、给人机交互界面 - **应用软件**:常用的应用程序,利用系统软件提供的接口完成自己的功能 人机交互还需要"语言":机器语言(01 代码)是电脑所用,英汉等语言是人类所用,中间要翻译——这就引出**计算机系统的层次结构**,它是一个向上向下两头的发展: - **向上**:机器语言反人类(谁记得住一串 0101)→ 发明**汇编语言**与 01 一一对应 → 还是很繁琐(代码量太大)→ 再往上发明**高级语言**(C、C++、Java、Go、Python……)。注意:语言越往上越简单,但**效率理论上越低**——高级语言要编译成汇编、再翻译成 01,转换过程越多效率越低 - **向下**:发展出**微指令系统**——硬件直接执行微指令,多条微指令构成微程序,一个微程序对应一条机器指令(这大概与 CPU 指令集有关,当时还没学透) ## 网络的缘起 回到历史线。美苏冷战时期,美国国防部设想:打起仗来信息至关重要,如何在破坏别人信息链的同时保障自己的?假若一条链路被摧毁,有其他链路可以取代替换而不影响大局(可以用**串联并联**去理解)——于是萌生了**计算机网络**,最初就是阿帕网,互联网的雏形。 我们所用的电脑手机都是一个个**终端**。计算机内部的数据传输用总线;计算机与计算机之间靠电磁波和光纤线缆。终端有各自唯一的 IP 地址,这是**资源子网**的事;交流靠**通信子网**——路由器、交换机等,提供"安检分流"功能。 举个例子:手机发电子邮件到电脑,邮件转换成 bit,在链路上以电磁波传送,中途经过路由器等转发节点——它要检查信息是否出错、要送去哪里,像地铁安检一样,然后送上对应的线路送往接收设备。 小范围沟通如此,跨国呢?中国人跟英国人各说各的谁也听不懂——计算机也分品牌、分系统,各有各的"母语",所以需要标准:**协议**(如 TCP/IP、HTTP)。 ## 数据结构的雏形 信息越来越发达,计算机不再只算数字——字符、日期等都要存储运用,即**信息处理**。于是需要**数据库**存储管理数据、需要**数据结构**把数据条理化。 个体的数据元素按性质构成**数据对象**,数据对象加上关系(很像 E-R 图)就组成**数据结构**。现实中我们把它理解成**逻辑结构**: - Excel 表、数据库的表——线性、一对一 - 文件夹套子文件夹——树形(一对多,有且仅有一个父节点、n 个子节点) - 地图上 A 到 B 的最短路径——网状、图状 但逻辑结构只是思维层面的。从现实映射到思维产生逻辑结构,再从思维映射到计算机(要真正存储运算),就产生了**存储结构**:数组、栈等**顺序结构**;C 语言中指针、链表构成的**链式结构**;数据库中像目录一样的**索引结构**;还有散列结构(当时不太清楚,后来知道就是哈希)。 这些结构加上操作,就涉及**数据类型**:**数据对象 + 数据关系 + 基本操作**的总称。比如 C 里的 int,在 16 位计算机上表示 [-32768, 32767] 范围的整数,在这个整数集上可做加减乘除取余。 那非数值的数据怎么办?得利用数据结构的知识自己定义——这里有个重要概念:**抽象**。凸显主要、忽略次要,模糊出一个大概样子,用的就是**伪代码**:不在意语法细节,只给出框架——要做什么、该怎么做。这很像算法欸。 **算法**就是解决问题的方法和步骤,描述方式有:自然语言、流程图/NS 图、伪代码类语言、程序设计。 > 类语言:介于伪码语言和程序设计语言之间的表示形式。以类 C 语言为例——保留 C 的精华,不拘泥语法细节,又添加了些 C++ 的成分。 有句话叫**程序 = 数据结构 + 算法**:数据结构通过算法实现操作,算法根据数据结构设计程序。检验算法效率常用估算法——找到嵌套最深、执行最多的语句,算出执行次数,以它的函数增率类比整个程序执行次数之和的增长率(即后来的大 O 思想)。 ## 学习足迹与展望 - 大一下:了解了 HTML、CSS,做好了一个网站框架(不太完善) - 学会了翻墙、逛 GitHub、使用 ChatGPT - 合理使用 AI,抓住时代机遇 - 希望大二能实现前中后结合,自己实现增删改查的小项目 对整个计算机学习的脉络有了大致掌握,剩下的就是把每个节点学透——这正是 [[00-计算机速览|计算机速览]] 与整个 [[00-基础与理论|基础与理论]] 区在做的事。 --- ⬅️ 🏠 [[00-小技能]] ➡️ [[01-Markdown与Typora]]