前言
-
内容及用途:学习笔记系列用于记录本人的一个学习过程,每篇文章篇幅较短,内容仅包含某一部分知识点,基础且不全面。主要用于本人日后当工具书查阅以及给和我一样刚开始学习的同学提供一个理解的角度,所以语言表达上追求通俗易懂而不是简明扼要,会用一些奇奇怪怪的例子来类比理解
(也就是废话较多),如果内容有误欢迎评论区指正。 -
记号说明:对于部分第一次出现的名词,会以“注脚”的方式在文末对其进行一个解释,注脚的内容为名词的定义或对该词的个人理解。 斜体 表示前面部分或之前的文章已经解释过的名词。 加粗 表示需要强调的内容。 标记 表示之后会用到或以后会解释的内容。
-
内容来源主要为《微处理器系统结构与嵌入式系统设计(第3版)》,章节为“2.2”。需要一定的数字逻辑电路知识。
正文
冯·诺依曼计算机架构
冯·诺依曼计算机主要特征
1、计算机由存储器、运算器、控制器、输入设备、输出设备5大部分组成,其中存储器是核心。
2、计算机内部的 控制信息1(下图虚线) 和 数据信息2(下图实线)均采用二进制数表示,存放在同一个存储器中。
3、计算机按存储程序原理工作。
(下图为“冯·诺依曼计算机架构”)
存储程序原理的基本点是指令(控制)驱动:先将程序(包括指令和数据)放入存储器,计算机运行时,控制器从存储器中取出指令并执行。
模型机3 系统结构
(下图为“基于总线的冯·诺依曼体系结构模型机”)
- 总线:
- 功能:由上图可以看出,总线与模型机的各个子系统相连,与各个子系统都能进行双向的数据或信息的交换。因此,各个子系统之间虽然不能直接进行数据的交换,但可以通过总线这一公共通道来进行。
- 分类:一句总线上传输的信息不同,可以 将总线分成 3 类:
- 地址总线(Address Bus, AB):通常为单向,由主设备发出,用于选择 读写对象4。
- 数据总线(Data Bus, DB):通常为双向,用于 数据信息 交换。
- 控制总线(Control Bus, CB):包括控制信号线,状态信号线。用于实现对设备的监视和控制。
(总线分类个人速记方式:ADC)
- 存储器子系统:
- 功能:存放当前的运行程序和数据(本质是一堆二进制数)。
- 组成:由许多有着 唯一编号(这个编号也就是常说的地址) 的字节单元组成。
注意:“字节单元”并不是存储器中的最小单元,也不代表一个存储单元只存储 1 位二进制数。 - “访问”: 访问存储器就是只要对指定的存储单元进行 读或写5 操作。
- 输入/输出子系统:
- 功能:用于完成计算机与外部的信息交换。
- 实例:计算机的输入/输出设备,如鼠标、键盘、显示器之类的就是 “输入/输出子系统” 的具体设备。
- CPU子系统:
- CPU:中央处理单元(Central Processing Unit),一般是一片超大规模集成电路芯片(VLSI),上面集成了运算器,控制器和寄存器。
- 运算器:
- 功能:完成各种数据的运算和处理。
- 组成:一般由算术逻辑单元(Arithmetic Logical Unit, ALU)(核心)、累加器(ACCumulator, ACC)、标志寄存器(Flag Register, FR)和暂存器等组成。
- 控制器:
- 功能:操作控制系统各部分,使计算机有序地工作。
- 组成:由指令寄存器(Instruction Register, IR)、指令译码器(Instruction Decoder, ID)和操作控制器(Operation Controller, OC)组成。
- 寄存器阵列:
- 功能:CPU内部的临时存储单元,用来暂时存放数据和地址。
- 分类:专用寄存器,即有固定作用的寄存器,如堆栈指针(Stack Pointer, SP)、程序计数器(Program Counter, PC);通用寄存器,可以有多个功能的寄存器。
结束语
这一部分的内容大部分是一些名词的解释,属于“记住就行”的知识点,当然记不住也正常,只要之后遇到的时候有“我在xx地方见过这个东西”的印象就够了,到时候再查资料就行,多查几次也就记住了。
为了便于记忆,在描述计算机里的具体部件(如总线,运算器等)时,我尽量以统一的格式描述(功能,分类,组成),并且只挑了比较核心的点进行说明,这些部分都会在之后的章节进行详细讨论。
控制信息:控制某个硬件进行某个操作的信息。如让加法器进行加法操作。 ↩︎
数据信息:被操作的数据。如被传入加法器进行加法的数字。 ↩︎
模型机:理论中的计算机,简要描述了计算机的组成部分及各部分之间的关系,不探究具体细节及实现方式。 ↩︎
读写对象:某个特定的存储单元或外部设备。 ↩︎
读或写:“读” 指获取存储器中的数据。例如 “存储器A” 中存放着一个整数 “7” ,通过对 “存储器A” 进行 “读” 操作可以获取“整数7”;“写” 指将数据写入存储器,也就是修改存储器中的值。例如对 “存储器A”进行 “写” 操作,可以将 “存储器A” 中的整数 “7” 改为整数“8”(写入内容自定)。(没学过数电或其他相关知识的话可能会对“读写”的定义不太清楚,所以稍作补充) ↩︎