跳转至

计算集系统层次结构

完整的计算机系统应包括配套的硬件设备和软件系统。

软件的功能可以用硬件取代。软件更灵活,硬件更快。

输入输出设备

熟知的键盘鼠标显示器打印机等。

存储器

分为主存储器和辅助存储器。CPU 能直接访问的是主存储器。

主存储器的基本组成


flowchart LR
    %% ========== CPU部分 ==========
    subgraph CPU["中央处理器 CPU"]
        MAR["地址寄存器<br/>(MAR)"]
        MDR["数据寄存器<br/>(MDR)"]
    end

    %% ========== 主存储器部分 ==========
    subgraph MEM["主存储器"]
        MEMCELL["存储体<br/>(Memory Cells)"]
        ADDRDEC["地址译码器<br/>(Address Decoder)"]
    end

    %% ========== 连接关系 ==========
    MAR -- 地址总线 --> ADDRDEC
    MDR -- 数据总线 <--> MEMCELL
    ADDRDEC --> MEMCELL

MAR(Memory Address Register):存放 CPU 想要访问的主存地址。

地址译码器:根据 MAR 的内容,选中主存中对应的存储单元。

存储体:真正存放数据的存储单元集合。

MDR(Memory Data Register):CPU 与主存之间数据传送的缓冲寄存器。

地址总线 / 数据总线:实现 CPU 与主存的通信。

相联存储器

相联存储器(Associative Memory / CAM)定义:按内容(关键字)访问的存储器,而不是按地址访问。

但一般也可以按地址寻址。

特点:查询时并行比较所有单元,访问速度快;容量通常较小,硬件复杂

类型:

  • 全相联:数据可存放在任意单元,灵活但硬件复杂

  • 直接映射:固定位置存放,硬件简单,但命中率低

  • 组相联:折中方案,每组内全相联,每组外固定

应用:

  • CPU Cache

  • TLB(页表快表)

  • 网络路由表

运算器


flowchart LR
    %% ===== 运算器 =====
    subgraph "运算器"
        REG["通用寄存器组<br/>(Registers)"]
        ACC["ACC<br/>(累加器)"]
        ALU["ALU<br/>(算术逻辑单元)"]
        FLAG["标志寄存器<br/>(FLAGS)"]
    end

    subgraph "控制器"
        CU["CU<br/>(控制单元)"]
    end

    subgraph "主存接口"
        MDR2["MDR<br/>(数据寄存器)"]
    end

    MDR2 -- "数据总线" --> ACC
    REG --> ALU
    ACC --> ALU
    ALU --> ACC
    ALU --> FLAG
    CU -- "控制信号" --> ALU
    CU -- "控制信号" --> REG

通用寄存器组:用于暂存运算操作数与结果。

ACC(累加器):常作为算术逻辑运算的一个操作数或结果的存放处。

ALU(Arithmetic Logic Unit):执行加减乘除、逻辑运算、移位等。

标志寄存器(FLAGS):记录运算结果状态(如零标志、进位标志、溢出标志等)。

CU(控制单元):发出控制信号,指挥 ALU 和寄存器的操作。

MDR:主存与运算器的数据接口。

项目 程序状态寄存器(PSR / PSW) 标志寄存器(Flags Register)
本质 保存 CPU 状态信息的寄存器 其中的一部分字段
主要内容 各类状态位(标志位)、中断控制位、模式位、特权级等 算术逻辑运算的结果标志位(如 Z、C、N、V)
功能 控制程序执行流程、中断响应、工作模式切换 反映上一次运算的结果,供条件跳转或异常判断使用
包含关系 ✅ 通常包含标志寄存器的所有标志位 ❌ 只包含 PSR 的一部分(标志位部分)
示例 ARM 的 PSR、x86 的 EFLAGS x86 的 FLAGS、ARM 的条件标志位 N Z C V

控制器


flowchart LR
    subgraph Controller["控制器"]
        CU["CU(控制单元)"]
        IR["IR(指令寄存器)"]
        PC["PC(程序计数器)"]
        Clock["时序系统"]
        Bus["控制总线"]
    end

    CU --> IR
    CU --> PC
    CU --> Clock
    CU --> Bus

CU(Control Unit,控制单元): 控制器的核心部件,负责分析指令并发出控制信号,协调计算机各部件的工作。

IR(Instruction Register,指令寄存器): 存放当前正在执行的指令,由 CU 解码后发出相应控制信号。

PC(Program Counter,程序计数器): 存放下一条将要执行的指令地址,在每条指令取出后自动加一或由转移指令修改。

时序系统(Timing System): 产生各种时钟脉冲和控制节拍,为 CU 发出控制信号提供时间基准。

控制总线(Control Bus): 将 CU 产生的控制信号传送给运算器、主存储器、I/O 接口等部件,实现统一协调。

CPU

一般运算器和控制器会被集成在一个芯片上,称为中央处理器 CPU。

主机

CPU 和主存储器共同构成主机。

CPU 和主存储器之间通过一组总线相连,总线中有地址、控制和数据三组信号线。

MAR 中的地址信息会直接送到地址线上,用于指向读 or 写操作的主存储器储存单元。

控制线中有读 or 写信号线,指出数据是从 CPU 写入主存储器(还是相反),进而控制将 MDR 中的数据送到数据线上(还是相反)。

外设

除主机外的其它硬件统称外部设备。

冯诺依曼结构的模型机

基本思想:存储程序。而不是根据每个程序独立设计硬件。


%%{init: {'theme': 'default', 'flowchart': { 'curve': 'basis', 'rankSpacing': 50, 'nodeSpacing': 30 }}}%%
flowchart TD
    %% ========== CPU 结构 ==========
    subgraph CPU ["中央处理器 (CPU)"]
        subgraph CU ["控制器 (CU)"]
        end
        subgraph ALU ["算术逻辑单元 (ALU)"]
        end
        subgraph REG ["寄存器组 (Registers)"]
            PC["PC<br/>程序计数器"]
            IR["IR<br/>指令寄存器"]
            MAR["MAR<br/>存储器地址寄存器"]
            MDR["MDR<br/>存储器数据寄存器"]
            GPR["GPRs<br/>通用寄存器组"]
            FLAG["Flag<br/>标志寄存器"]
        end
    end

    %% ========== 其他部件 ==========
    MEM["主存储器<br/>(Memory)"]
    BUS["系统总线<br/>(Bus)"]
    INPUT["输入设备<br/>(Input)"]
    OUTPUT["输出设备<br/>(Output)"]

    %% ========== CPU 内部连线 ==========
    CU --> ALU
    ALU --> FLAG
    %% ALU 执行后更新标志寄存器,影响 CU 控制流
    FLAG --> CU
    %% 控制器控制跳转
    CU --> PC
    CU --> IR
    CU --> MAR
    CU --> MDR
    CU --> GPR

    %% GPR 与 ALU 之间双向
    GPR --> ALU
    ALU --> GPR

    %% 取指过程
    PC --> MAR
    MAR --> MDR
    MDR --> IR

    %% ========== CPU 外部连线 ==========
    REG --- BUS
    BUS --- MEM
    INPUT --- BUS
    BUS --- OUTPUT

    %% ========== 存取流程连线 ==========
    PC -->|地址| MAR
    MAR -->|取指| MEM
    MEM -->|数据| MDR
    MDR -->|指令| IR
    IR -->|译码| CU
    CU -->|执行控制| ALU
    ALU -->|结果| MDR
    MDR -->|写回| MEM
    INPUT -->|中断/数据| CU