返回专栏
· 5 分钟阅读

什么是计算机?它究竟能做什么?


一、计算机的定义与本质

1. 什么是计算机?

计算机(Computer)是一种能够按照预先定义的指令,对数据进行自动处理、存储、传输和输出的电子设备。

从计算机科学的角度看,计算机并不只是一个执行数学运算的机器,而是一个可编程的通用信息处理系统。

理解计算机,需要先明确几个基本概念:

概念

定义

数据(Data)

计算机处理的对象,可以是数字、文字、图像、声音等

指令(Instruction)

告诉处理器执行什么操作的基本命令

程序(Program)

按照一定规则组织起来的一组指令

硬件(Hardware)

计算机中可以实际运行和工作的物理设备

软件(Software)

程序、数据及相关文档的集合

计算(Computation)

根据一定规则对输入数据进行变换并产生结果的过程

这几个概念构成了理解计算机系统的基础。

2. 计算机的核心特征

计算机区别于普通电子设备的关键,不是它能否进行计算,而是它具备以下能力:

  1. 可编程性: 可以通过修改程序改变设备的行为。

  2. 自动执行: 能够按照指令序列自动执行任务。

  3. 数据处理: 能够对不同类型的数据进行编码、运算和转换。

  4. 存储能力: 能够保存程序和数据,并在需要时读取。

  5. 通用性: 在硬件能力允许的范围内,可以通过不同程序完成不同任务。

其中,最重要的是可编程性和通用性。

一台计算机不需要为每一种任务重新设计硬件。只要硬件指令集和系统资源能够支持,通过更换或运行不同的软件,就可以完成完全不同的工作。

例如,同一台电脑可以运行浏览器、数据库、编译器、图像处理软件和人工智能模型。

这就是通用计算机与专用计算设备之间最重要的区别。

二、计算机究竟能做什么?

从计算机系统的功能来看,其核心能力可以归纳为以下几个方面。

能力

主要内容

典型场景

计算

算术运算、逻辑运算、数值分析

科学计算、金融计算

存储

数据读取、写入和持久化

文件系统、数据库

信息处理

编码、转换、压缩、检索

图片处理、数据分析

控制

根据程序和条件控制执行过程

自动化控制、设备管理

通信

数据发送、接收和交换

网络通信、分布式系统

人机交互

接收输入并输出处理结果

图形界面、命令行、语音交互

这些能力并不是相互独立的。

例如,一个 Web 应用处理用户请求时,通常会涉及:

  • 网络模块接收 HTTP 请求;

  • CPU 执行应用程序指令;

  • 内存保存运行时数据;

  • 数据库读取或写入业务信息;

  • 网络模块将处理结果返回给客户端。

因此,实际的软件系统通常是多种计算能力协同工作的结果。

三、计算机的基本工作原理

理解计算机,不能只停留在它能做什么,还需要理解它为什么能够完成这些任务。

现代通用计算机的核心思想之一,是存储程序(Stored-program)。

1. 什么是存储程序?

存储程序思想的核心是:

程序指令和待处理的数据,都可以以编码形式存储在计算机的存储器中,处理器从存储器中读取指令并执行。

这意味着程序不再是固定在硬件电路中的功能,而是可以被加载、存储、替换和执行的数据。

例如:

一台计算机可以先加载浏览器程序,执行网页浏览任务;随后退出浏览器,加载数据库程序,执行数据管理任务。

硬件没有发生根本改变,改变的是被加载和执行的程序。

这使得计算机具有了高度的灵活性和通用性。

2. 冯·诺依曼体系结构

经典的冯·诺依曼体系结构(Von Neumann Architecture)将计算机划分为几个核心组成部分:

  • 运算器(ALU):执行算术和逻辑运算。

  • 控制器(Control Unit):控制指令执行过程。

  • 存储器(Memory):保存程序和数据。

  • 输入设备(Input):向计算机提供数据。

  • 输出设备(Output):输出计算结果。

现代教学中通常将运算器和控制器合称为中央处理器(CPU)。

可以用下面的结构理解它们之间的关系:

 flowchart TB
    IN(["输入设备<br/>Input"]) 
    OUT(["输出设备<br/>Output"])

    subgraph COMPUTER["计算机系统"]
        direction TB

        subgraph CPU["中央处理器 CPU"]
            direction LR
            CU["控制器<br/>Control Unit"]
            ALU["运算器<br/>ALU"]
            CU <--> ALU
        end

        MEM[("存储器<br/>Memory<br/><br/>程序与数据")]

        CPU <-->|"指令与数据"| MEM
    end

    IN -->|"输入数据"| MEM
    MEM -->|"处理结果"| OUT

    classDef io fill:#E0F2FE,stroke:#0284C7,color:#0C4A6E,stroke-width:1.5px
    classDef cpu fill:#DBEAFE,stroke:#2563EB,color:#1E3A8A,stroke-width:1.5px
    classDef memory fill:#DCFCE7,stroke:#16A34A,color:#14532D,stroke-width:1.5px

    class IN,OUT io
    class CU,ALU cpu
    class MEM memory

    style COMPUTER fill:#F8FAFC,stroke:#64748B,stroke-width:1.5px
    style CPU fill:#EFF6FF,stroke:#2563EB

这里需要注意:

冯·诺依曼体系结构是理解计算机的经典模型,并不意味着现代计算机的所有部件都严格按照这个简单结构连接。

现代计算机还包含高速缓存、内存控制器、总线、DMA 控制器、GPU、I/O 控制器等大量部件。实际架构远比这个模型复杂。

但这个模型仍然非常重要,因为它解释了现代通用计算机最基本的工作思想:程序和数据进入存储系统,处理器按照指令执行计算,最终产生结果。

3. 指令是如何执行的?

CPU 并不是直接理解我们编写的 Java、Python 或 C++ 代码。

这些高级语言需要经过编译或解释等过程,转换成处理器能够执行的机器指令,或者由运行时环境进一步执行。

从处理器的基本工作机制来看,一条指令的执行通常可以抽象为以下阶段:

  1. 取指(Fetch):从指令存储位置读取下一条指令。

  2. 译码(Decode):解析指令,确定需要执行的操作及其操作数。

  3. 执行(Execute):执行算术、逻辑、访存或控制转移等操作。

  4. 访存(Memory Access):根据指令需要读取或写入数据。

  5. 写回(Write Back):将执行结果写入寄存器等目标位置。

并不是所有指令都会经历完全相同的阶段。不同处理器架构、不同指令类型的具体执行流程也有所不同。

一个简化的指令执行过程如下:

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'fontFamily': 'Inter, Microsoft YaHei, sans-serif',
    'fontSize': '14px',
    'lineColor': '#A3B8AC',
    'primaryTextColor': '#334155',
    'mainBkg': '#FFFFFF'
  },
  'flowchart': {
    'nodeSpacing': 20,
    'rankSpacing': 22,
    'padding': 8,
    'htmlLabels': true,
    'curve': 'linear'
  }
}}%%

flowchart TB
    A(["程序加载到内存"])
    B["CPU 获取指令<br/>Fetch"]
    C["指令译码<br/>Decode"]
    D["执行操作<br/>Execute"]
    E["读取或写入数据<br/>Memory Access"]
    F["保存执行结果<br/>Write Back"]
    G["获取下一条指令"]

    A --> B
    B --> C
    C --> D
    D --> E
    E --> F
    F --> G
    G --> B

    %% 统一节点尺寸和间距
    classDef base min-width:220px,padding:9px,stroke-width:1.5px,rx:8,ry:8

    %% 清新自然配色
    classDef start fill:#DCFCE7,stroke:#86CDA0,color:#166534
    classDef fetch fill:#E0F0FE,stroke:#93BCE8,color:#1E4976
    classDef decode fill:#F0EAFE,stroke:#B9A5E4,color:#59427D
    classDef execute fill:#DDF5EE,stroke:#85CBB5,color:#245E4D
    classDef memory fill:#FFF4D9,stroke:#E8C77D,color:#79551D
    classDef writeback fill:#F1F4F2,stroke:#B4C1B9,color:#47574D

    class A,B,C,D,E,F,G base
    class A start
    class B,G fetch
    class C decode
    class D execute
    class E memory
    class F writeback

    linkStyle default stroke:#A3B8AC,stroke-width:1.5px

CPU 会不断重复这个过程,直到程序结束、发生异常或执行控制转移。

现代处理器为了提高性能,还采用了流水线、乱序执行、分支预测、多核并行等技术。因此,实际执行并不总是简单地逐条串行完成。

这也是后续学习 CPU 架构时需要深入理解的内容。

四、计算机为什么能够处理不同类型的信息?

计算机内部主要由数字电路构成,其基础是二进制。

1. 二进制:计算机的数据基础

计算机内部使用二进制(Binary)表示数据。

二进制只有两个基本数字:

  • 0

  • 1

在数字电路中,可以使用不同的电压状态表示逻辑 0 和逻辑 1。

例如,一个二进制位(Bit)可以表示为 0 或 1。

多个二进制位组合起来,就可以表示更丰富的信息。

单位

含义

bit

二进制位,最小的信息表示单位

Byte

字节,通常为 8 bit

KB

通常表示 1024 Byte(部分场景使用十进制定义)

MB

通常表示 1024 KB(部分场景使用十进制定义)

GB

通常表示 1024 MB(部分场景使用十进制定义)

TB

通常表示 1024 GB(部分场景使用十进制定义)

严格来说,国际单位制中的 KB、MB、GB、TB 是十进制单位,分别对应 1000 的倍数;KiB、MiB、GiB、TiB 才是 1024 的倍数。

2. 不同类型的数据如何表示?

计算机并不直接理解文字、图片或声音。

它需要通过编码规则,将这些信息转换成二进制数据。

例如:

  • 数字:使用二进制数值表示。

  • 文字:通过字符编码表示,例如 UTF-8。

  • 图片:通过像素、颜色通道等数据表示。

  • 声音:通过采样、量化和编码形成数字音频。

  • 视频:通常由连续图像帧和音频数据组成,再经过编码压缩。

因此,计算机处理不同类型的信息,本质上都是在处理二进制数据。

需要特别注意:

二进制只是数据的表示方式,不等于数据本身的业务含义。

同样的一串二进制数据,如果采用不同的编码规则解释,可能代表数字、字符、指令或图像数据。