初探计算机脉络
📚 这是小技能区的第一篇,动笔于大一下:用文科生看历史的眼光,把计算机里的因果串成一条线。 💡 感悟先行。想要严谨版的知识体系,配合 计算机速览 一起看。
从需求说起:计算机为什么长这样
首先要知道,计算机是为模拟人脑做计算而生的。但在当时,肯定没有人会因为日常的加减乘除去专门研究发明一台计算机——它一定是投入军用,用于武器的精密计算。所以当时的需求大部分是数字、加减乘除。
由此可以去理解冯·诺依曼提出的计算机体系——它是存储程序结构的机器,指令和数据都存放在存储器中。顺着需求推,五大件一个都少不了:
- 要计算 → 运算器
- 进行何种运算(加/减/乘除)→ 控制器
- 指令和数据得有地方放 → 存储器
- 数据、程序从哪来 → 输入设备
- 一切都是为了得到结果,结果如何让人知道 → 输出设备
现代电脑:细化再组合
从这个角度回到现在,会发现电脑跟这个结构有区别——更具层次性:
- 运算器 + 控制器 组成 CPU(CPU 里还有寄存器——正好模拟了大脑的三大功能:思考、控制、记忆)
- 存储器拓展划分成主存、辅存,也就是内存与外存(外存常见的是硬盘,机械/固态,固态好些贵些)
- 写的程序在硬盘里,执行时送到内存,再送到 CPU——所以应用的启动快慢看硬盘,运行快慢看 CPU 和内存
- 内存分 RAM(可读可写,断电丢包)与 ROM(只读,放 BIOS)
- 未装操作系统时的体系:CPU + ROM + CMOS(相当于硬盘,但断电就没,又因耗电极少,电池即可维持);启动后管家交出权力给操作系统:CPU + RAM + 硬盘
- 内存与外存、内存与 CPU 之间还加了高速缓存(中转站,即常说的一级、二级缓存)
以上 CPU 和存储器组成了主机;输入输出设备统称 I/O 设备;再往上统称硬件。扬声器、显卡等也是硬件,但锦上添花而非必要。
会发现现代计算机把各个硬件拆分细化又重新组合——这种"细化再组合"的方法叫 3Y:层次化、模块化、规则性。
🔗 这套"装系统前的 BIOS / CMOS"故事,速览篇里有更完整的版本:从按下电源到桌面。
插一个:为什么用二进制
计算机基于电工作,内存里放的其实是高低电平,不是数字——只是为了便于理解,把它等效成 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-小技能 ➡️ 01-Markdown与Typora
💬 评论