计算机基本知识概览¶
约 2749 个字 预计阅读时间 9 分钟
作者:000lbh 许可协议:CC BY-NC-SA
软件与硬件¶
什么是软件?什么是硬件?相信刚接触计算机的同学也不会不清楚这个问题,我们在这里并不打算给软件和硬件一个正式的定义,而是通过举例介绍各种软件和硬件,从而使得同学们获得一个直观的认识。
硬件¶
各位刚刚接触计算机的同学可能还没有来得及拆开过你心爱的计算机。没关系,我们为大家提供了一些图片,同时通过这些图片进行介绍。
冯诺依曼架构¶
冯诺依曼提出了一种计算机架构,由运算器、控制器、存储器、输入输出设备组成,不区分代码和数据。现代计算机基本都基于这个架构进行设计。
CPU¶
CPU 是整个计算机的核心,具有运算和控制的功能。CPU 从存储设备中读取代码和数据,尽管现代处理器对代码和数据会有不同的处理,但是其本质上并没有严格的区分。代码由一条一条的指令组成,CPU 按照顺序一条一条执行从存储设备中读取的指令(至少让软件和程序员看到的必须是这样),指令可以是修改 CPU 的状态,进行运算,或者是从其他硬件读取信息或者输出信息。
图 1. 这是 Intel 8086 处理器,和现在的处理器“长相”很不一样,但是你案头的计算机用的处理器很可能与之兼容(除非你是新版 Apple 或者你自己知道你用的不是 x86 架构的处理器)。图源自 wiki,获 CC BY-SA 授权
目前市面上的处理器拥有很多种不同的 ISA(Instruction Set Architecture),ISA 定义了处理器有哪些指令、指令编码方式和功能、怎么寻找和读取数据、能暂存多少数据、每个暂存的数据有多大、数据存放的顺序如何等等内容,并不是指令的简单集合。一般来说,为其他 ISA 编译好的程序是不能够直接在当前 ISA 上运行的,需要转译,或者(在有源代码的情况下)重新按照当前 ISA 进行编译。同学们在下载软件时,也要注意 ISA 的信息。下面是一些常见的 ISA:
- x86: 最经典最常见的 ISA,同学案头计算机的处理器基本都基于此,历史兼容性好(换句话说就是历史包袱重)
- ARM: 移动端(包括手机)常见的 ISA,不管是苹果还是遥遥领先,处理器都使用该 ISA。苹果 M 系列计算机也使用该处理器
- RiscV: 新兴的开源 ISA,嵌入式设备中有使用,学校也喜欢用于教学
- Loongarch: 国产 ISA
- 还有其他诸如 MIPS、PowerPC 等架构不再赘述
现代的 ISA 一般都设计保护功能。保护功能提供不同的模式,在特权模式下,代码有对处理器和硬件的(几乎)完全的控制权;而在非特权模式(用户模式)下,代码只能控制有限的资源,进行“安全”的操作,而其他操作需要通过切换到特权模式完成。同时,ISA 提供了虚拟内存的功能,也就是将物理内存地址(也就是前文提到的“存储空间的编号”)映射到虚拟地址,并设置访问权限。
历史的注记:Intel 当年开发了一个全新的 64 位架构,IA64,该架构具有很多让人眼前一亮的特性,然而与之前 Intel 的 x86 完全不兼容。后来 AMD 开发了与之前 x86 架构兼容的 AMD64 架构,迅速抢占市场份额,Intel 后来慢慢放弃了 IA64 架构,转而采用 AMD64 架构,或者更中立的名称,x86-64 架构。
内存¶
这里说的内存是 RAM,断电丢失数据的随机存储器。然而在不同语境下,内存也可以指下文中的“硬盘”,请注意区分。
内存是处理器 CPU 能够直接访问到的数据存储器。内存被划分为一个个存储单元,每个存储单元大小一个字节,或者说 8 比特,也就是 8 个数字 0 或者 1,每个存储单元都有唯一编号。CPU 通过存储单元的编号拿出存储单元中的数据或者向存储单元写入数据。随机存储器的“随机”意思是不论拿什么编号来找数据,所需时间总是差不多的。
内存访问速度比其他外部存储要快,但是随着处理器的发展,内存速度的提升却跟不上处理器速度提升的步伐。从内存中找一个数据所需的典型时间大概够处理器执行几十甚至上百条指令,因此缓存被放入了处理器内部。关于这一点,我们将在本章节第二部分讲述。
现在大家可以把内存理解成一个大数组(实际上也差不多),数组的每个元素都是一个字节,每个元素都有一个编号,CPU 可以通过编号找到对应的元素。
硬盘¶
有时候也被称作“内存”或者“外存”(是不是有些混乱?),不过你只需要记住我们这里讲的是断电数据不丢失的可以反复改写的存储设备即可。目前市面上主要有两种硬盘,一种是机械硬盘 HDD,里面有一组镜子一样的盘片,旁边有一个磁头。机械硬盘工作时,盘片高速运转,磁头读写其中的内容;另一种是固态硬盘 SSD,里面没有高速运转的机械结构,取而代之的是储存芯片和控制电路。固态硬盘具有较为明确的寿命特点,其写入次数有限,且长时间不通电时不能保证数据稳定(以年为单位计算)。为了最大化固态硬盘寿命,其一般有较为复杂的控制电路,保证写入均匀地发生在固态硬盘的不同部位。一般来说,固态硬盘较贵,速度较快,长时间存放稳定性较差,但是个人日常使用的实际寿命并不一定比机械硬盘差。总之,重要数据应该做好备份。
图 2. 机械硬盘内部结构。图源自 wiki,获 CC BY-SA 授权
提示:如果你在比较早的时候接触过或者从长辈口中听说过“磁盘碎片”这回事,请注意,固态硬盘不要整理磁盘碎片。
其他存储设备¶
- 光盘:以前常见的存储设备,一般只能写入一次,存储容量在几百 M 到几十 G 不等。
- 软盘:更古董的设备,存储容量在几个 M 左右。
- 磁带:顺序存储器,意味着找数据的时间和当前读写位置的距离成正比(而不像随机存储器,基本无关),用于长时间保存大量数据,需要特定的仪器和环境。
存储层次结构¶
存储器有很多种类,速度、容量单价、稳定性都各有不同。根据其响应速度,存储器可被划分为多级结构:
处理器中的寄存器,通常用于存储计算中的临时数据,速度要求极高,单位容量价格自然也是十分高。在寄存器和内存中间,一般还存在多级缓存,缓存对一般程序员不可见。常用的数据将被放入速度快很多的缓存中。缓存单位容量的价格也比较高,目前个人计算机缓存的容量普遍在数十 MB 以内。内存先前已经介绍过了,在此不再赘述。
以上三种存储都属于易失性存储(volatile),也就是断电后数据将会在短时间内消失。前两种存储是静态随机存储,意味着在通电状态下其状态可保持,制造所需晶体管较多,而后者是动态随机存储,即使通电,数据也会随时间流逝而消失,需要每几个毫秒去刷新全部存储单元。
你可能会想问,缓存为什么能够在程序员不参与的情况下完成内存访问的提速,这就涉及到一个重要的概念:局部性原理。这个原理主要说的是,一个程序在总是倾向于访问最近访问过的存储单元或者与之相邻的存储单元,缓存可以据此将最近访问过的存储单元放入自身当中,或者预测将要访问的存储单元,将其提前放入自身当中。当然这种预测并不会百发百中,而基于缓存的工作原理,提升自己程序的局部性,是改善程序性能的一个好方法。
GPU¶
也叫做显卡,大量并行处理,最开始用于图形处理,目前也可用于 AI,科学计算等等。一般来说,GPU 的计算能力远远大于 CPU,但是单核处理能力还是 CPU 更强,GPU 则以核数和专为并行设计的独特的架构取胜。
主板¶
将各种硬件连接在一起,方便更换、扩展,提供固件进行硬件自我检查和系统初始化,保存各个硬件的配置等。
电源¶
为各种硬件供电。大部分硬件需要 5 V 以内的直流供电,而一般家庭供电是 220 V, 50 Hz 交流,因此需要此模块。
计算机的发展历程¶
1945 年(1946 年 2 月 14 日对外公布),第一台计算机 ENIAC 诞生了。
软件¶
软件根据其功能不同也可以分为很多种,有一些软件是直接跟硬件打交道的,而另一些软件则直接跟用户打交道,中间还有连接两者的桥梁。他们分别是操作系统和硬件驱动程序,应用程序,和“库”。操作系统提供了对各种资源,比如处理器、内存、网络、各种外部设备如打印机等的统一抽象,使得大部分应用程序在大部分不同的硬件上都能正确运行,简化了应用程序员的工作,同时也将不同资源进行隔离,尽可能防止有缺陷或者恶意的程序影响其他程序运行。