计算机系统概论
凡是决心取得胜利的人是永远不说不可能的
笔记框架
-
- 学习计算机组成原理应该学什么
-
- 软件+硬件
- 计算机系统的层次结构
-
- 1.2.1 冯诺依曼计算机的 6个 特点 + 计算机的硬件图
- 1.2.2 计算机工作的步骤
- 1.2.3 计算机的各个部分如何工作
0.0 学习计算机要学什么
这是一个计算机的学习框架


徐文浩老师给出的框架

计算机组成原理就是围绕着计算机如何组织运作展开的
1.1计算机系统组成及结构
软件+硬件

计算机是由软件与硬件组成的,而这门课程主要针对硬件实现进行学习
二者之间的关系:
1.硬件和软件具有逻辑上的等效性
2.硬件具有较高的执行速度,软件更灵活
计算机系统的层次结构
要想知道计算机的硬件是如何实现我们所编写的代码功能的就必须知道计算机系统的层次结构

这个图如果是从底层向上可以这么理解:
1.在对硬件进行操作的时候首先要将机器指令在存储器中取出
M0:控制部件通过控制线向执行部件发出各种控制指令,从而对硬件操作
2在控制计算机硬件时计算机的硬件只能识别机器语言,也就是 0,1 表示的二进制代码
M1 : 用微指令解析机器指令,看看让硬件做什么操作
4.操作系统提供了一些汇编语言和机器语言使用实现中所需的基本操作,还能控制软件和硬件的作用
M2: 实现软件硬件的控制与交互
5.但是二进制代码很难让人理解,于是出现了 汇编语言,他用符号 ADD,SUB,MUL,DIV 进行一些加减乘除的操作,然后再将汇编语言翻译成机器可以识别的机器语言
M3: 将汇编语言翻译成机器语言
6.由于每台机器都有一种对应的汇编语言,这就要求开发者必须掌握不同系统的指令进行开发,这时高级语言就产生了,如 C,BASIC 都是高级语言
M4: 用编译程序将高级语言翻译成汇编语言程序
上下层之间的关系:
1.上层与下层是可以分割的,只有下层没有上层也可以
2.上层是下层的功能实现,上层在下层的基础上实现更加丰富的功能
翻译程序:将高级语言翻译成机器语言程序的软件称为翻译程序。
翻译程序有两种:
1.编译程序:将用户编写的高级语言程序(源程序)的全部语句一次全部翻译成机器语言程序,最终会生成与一个目标文件然后再执行机器语言程序.如:C,C++
2.解释程序:将源程序的一条语句翻译成对应机器语言的一条语句,并立刻执行这条语句,接着翻译源程序的下一条语句并执行下一条语句,因此不会生成目标文件速度较慢。如:java,python
编译与汇编的区别:
将高级语言转变成汇编语言----编译
将汇编语言转变成机器语言----汇编
1.2 冯·诺依曼计算机的特点
1945年冯·诺依曼在研究 EDVAC机时提出存储程序的概念,以此概念为基础的各类计算机成为 冯·诺依曼机
冯·诺依曼机最根本特征是 存储程序“原理,基本控制方式是 驱动流控制方式
特点如下:
1. 计算机由 运算器 、存储器 、控制器 、输入设备 、 输出设备 五大部件组成
2. 机器已运算器为中心,输入输出设备与存储器之间的数据传送通过存储器完成
3. 指令和数据以同等地位存放在存储器内,可按地址寻访
4. 指令和数据均用二进制表示
5. 指令由操作码和地址构成,操作码表示操作的性质,地址码表示存储数在存储器中的地址
6. 指令在存储器内按顺序存放
1.2.1 计算机的硬件框图
下面给出了三个不同的时期计算机硬件的划分
1.以运算器为中心的硬件图

(实线:数据线,代表数据传输。虚线:控制线和反馈线)
各个部件的功能如下:
运算器(ALU): 用来完成算数运算和逻辑运算,并将运算的结果暂存在运算器内
控制器(CU): 控制,指挥程序和数据的输入,运行以及处理运算的结果
存储器: 用于存放数据和程序,CPU可以直接访问主存,辅存信息要先调入到主存,CPU才可访问
输入设备: 将人们熟悉的信息形式转换为机器可以识别的信息形式
输出设备: 将机器运算结果转化为人们熟悉的信息形式
这是典型的冯·诺依曼 计算机是以运算器为中心的,但是这就导致了所有的数据传输都要经过运算器,运算器快,I/O 慢,比较耽误时间,于是有了下面的以存储器为中心的计算机结构
2.以存储器为中心的硬件图

(实线:控制线。虚线:反馈线。双实线:数据线)
这样在进行数据传输的过程就更加的简单便捷
3.现代计算机硬件的进一步划分
现代的计算机又将模块进行进一步的层次化的划分


于是计算机就分为了 主机 + I/O 设备
1.2.2计算机的工作步骤
比如要计算
a
x
2
+
b
x
+
c
ax^{2}+bx+c
ax2+bx+c
计算机的运行步骤是怎样的
操作码与操作性质的对应表(拍照)

指令=操作码(6位)+地址码(10位)
以存储在 0 位置的指令为例 :000001 00000010000
000001 代表取数的操作,取数操作是将存储单元中操作的数送到运算器的累加器 ACC中(后面介绍 ACC)
00000010000 是取数的地址,是存储器位置 8 的 x 的值 ,可以与程序清单中一一对应
从存储的内容可以得到:我们将指令和数据都保存在存储器当中,这可以验证 冯·诺依曼 计算机的一个特点,指令和数据具有相同的地位
下面根据五大件的具体组成看一个操作是如何实现的
1.2.3计算机5大组成部分的具体概述
细化的计算及组成框图(拍照)
1.主存储器


主存储器由:存储体M ,MDR, MAR 组成
存储体由许多存储单元组成,每个存储单元包含若干个存储元件,每个存储元件一个存储 一位 0/1 的二进制数
一个存储单元可以存储一串二进制代码,称这串二进制代码为一个存储字 (000001 00000010),这串二进制代码的位数称为存储字长 (16位)
如果将一个存储体看做一个大楼,存储单元就是一个个房间,每个存储单元可以看做一个个床位,床位有人就是1,没有人就是 0
| 名称 | 作用 | 反映 | 举例 |
|---|---|---|---|
| MAR | 存储器地址寄存器,用来存放欲访问的存储单元的地址(如 0111011) | 其位数对应的存储单元的个数 | MAR 10位,则有 210=1024 个存储单元(即多少个房间) |
| MDR | 存储器数据寄存器,用来存放从存储体某单元取出的代码或者准备往存储单元存入的代码(如 M 的值) | 与存储字节相同 | MDR 16 位,共有16个床 |
(虽然说 MAR,MDR 为存储器,但是现代计算机他们是放在CPU 中的)
MAR 可以接收来自 PC 的地址号(在控制器中讲述),MDR 接收来自 总线上的数据,最终实现对于数据的按地址存取
2.运算器
运算数据:算术运算( + -* / )+逻辑预算(与或非)

运算器包含 3个 寄存器(还有其它寄存器,但这三个是必须的) + 一个算术逻辑单元
不同的寄存器放置的操作数也不一样
以加减乘除为例,不同的寄存器存放不同的操作数

具体的加减乘除的计算过程可见连接
运算过程
表中要声明的是,乘除法与加减法的过程不同,乘除法因为存储数据长度的改变所以需要 MQ 寄存器对数据进行存储于串接(//为串接过程)
串接过程,在进行乘法操作时,结果位数会加倍,16位*16位=32位,就放不下了,所以把前16为称为高位放在累加器ACC中,后低位放于乘商寄存器MQ中
寄存器的速度>Cache
3.控制器
控制器是计算机的神经中枢,指挥各个部件自动协调的操作,完成一个指令主要由以下三个阶段进行控制
控制器处理操作的三个阶段:


PC: 存放当前欲执行指令的地址,它与主存的 MAR 之间有一条通路,它将要执行的操作赋给 MAR ,MAR 再根据地址向 主存中去操作的内容。 (PC)+1–>PC 进行指令的跳转,就是执行下一条指令
IR: 存放当前的指令,IR内容来自主存 MDR
IR 中的操作码送往 CU ,表示为 OP(IR) --> CU,让 CU 分析指令。
其地址码送往存储器的MAR,作为操作数的地址,表示为 Ad(IR)–>MAR
CU: 分析当前指令需要完成的操作,发送微操作命令序列,控制所有被控制对象
一条指令是如何执行的
那么一条指令是如何通过上面的三个阶段执行的

比如
“取存储单元 M 中的值 ” 指令:
1.取指令操作
获取指令
1:从 PC 保存的指令中得到要执行的指令地址,送往存储器的 MAR
2:由 MAR 中存储的指令地址在存储体中寻找指令
3:得到 “取M的值的指令” 将指令存储在 MDR 中
4:将 MDR 中的指令传送给控制的 IR
可以表示为 : PC -->MAR --> M --> MDR --> IR
2.分析指令
当我们得到一个指令之后我们只是有这个字符串,这个指令具体的操作需要通过分析指令才能知道
5:将指令的操作码传给 CU,再由 CU 上方的信号去分析相应的指令,应该执行什么样的操作 OP(IR)–> CU
【分析,取M值指令的操作是将内存中存储单元M的数值放入ACC 寄存器当中】
3.执行指令
6:M 的地址是放在 IR 的后半部分, 也就是上面讲的地址码, 将 IR 指令中 M 的地址取出送给 MAR (用 OP(IR)–>MAR表示)
7:再由 MAR 将地址送给存储体
8:存储体将取出来的数值传给 MDR
9:将数值送给 ACC 后就完成了值的读取
这样一个取值指令就完成了
如果我们想再进行下一个指令可以执行 (PC)+1–>PC
同理
“存储单元 M 中的值 ” 指令:

这里有几点声明一下:
1.取指令和分析指令的步骤相同
2.执行的时候一个是 ACC 向 主存写入,一个是读取 ACC 中的值写入 主存,所以第9步就是将 MDR 中的数据保存在存储体中
1.3计算机硬件的主要技术指标
衡量计算机性的优劣的主要由三个指标:机器字长,存储容量,运算速度
机器字长: CPU 一次能处理数据的位数,通常与 CPU 寄存器的位数有关。一般来讲字长越长,运算速度越快。通常说的计算机为 8位就是指一次可处理 8位数据
存储容量: 存储容量一般是指主存中存放的二进制代码的总位数
存储容量=存储单元个数 * 字长
如:MAR =16位 216=65536 (64K) 个存储单元
如果 MDR 为 32位 那么内存的大小为 216 *32 = 2M

但是计算机中常常用 字节 表示容量大小,一个字节 = 8个 二进制位
所以 容量为 218B/256 K
运算速度: 运算速度与许多因素有关

主频和核数都是数值越高代表性能越好
如何计算运算速度:
以前,计算一个计算机的性能是通过计算一个程序中每一条指令的时间,再求平均值,便得到运算速度。但是会出现一些耗时的指令也许 出现的次数比较少,这样会使真实值变大,于是出现了吉普森法
吉普森法: Tm 为机器运行速度,fi 代表 第 i 种指令占得操作的百分比数,ti 代表第 i 种指令的执行时间,这样就会避免上述问题
CPI: 执行一条指令需要的时钟周期。但是有的计算机在单位时间内可以执行多条指令,那么 IPC 值便可代表一个时钟周期执行的指令数
MIPS: 是一个计量单位,如 某机 200W条/s 的速度执行指令,可记作 2MIPS
FLOPS: 也是一种计量单位
这是课本中给出的办法,这种办法比较书面化,那么怎样更好的理解一个计算机的性能呢?(延伸)
1.衡量计算机性能的两个因素
1.相应时间
响应为执行时间,代表执行一个程序所花费的时间。
2.吞吐率
又称为带宽,是指在一定的时间范围内,到底可以处理多少数据或者执行的程序指令。
如何提高计算机的性能:
1.对于响应时间
增加 CPU 核数,增加 CPU 的核数相当于更多的 CPU 来处理同一个数据。好比搬冰箱,两个人抬同一个冰箱所用的时间自然就少了。
但是 对于 CPU 性能上的提升远没有那么容易,技术受到很大的限制。
2.对于吞吐率
提升吞吐率的办法有很多,只要添加一些硬件,多添加一些机器就好
2.CPU 时钟
常常用 CPU 时钟去作为程序执行时间的一个测量单位
测试一个软件从开始执行到最后执行结束所消耗的时间成为他的 Wall Clock Time
显然不能只从 Wall Clock Time 去评价一个程序的执行速度好坏,因为影响一个程序运行时长的因素有很多,如:
1.线程切换不同程序时各自的执行时间
2.从网络,硬盘读取所用数据的时间
3.功耗
$ time seq 1000000 | wc -l
1000000
real 0m0.101s
user 0m0.031s
sys 0m0.016s
在 Linux 中有对于指令的计时功能,执行这段代码,它大体是说打印 1~100000 这些数,并统计它的个数(我的理解也许有误)
real 就是所谓的 Wall Clock Time
user CPU 执行程序时在用户指令中运行的时间
sys CPU 执行程序在系统内核中执行的时间
user + sys 就是程序实际运行的时长,可以看出程序真正运行的时间是少于 Wall Clock Time 的
总结
本章学习了:
1.计算机学习与计算机组成原理学习的整体框架
2.计算机的层次结构
3.冯·诺依曼 计算机的特点
4.一个指令是如何在计算机中执行的
5.衡量计算机性能的指标
{ 笔记声明:
我是一名大四的学生,写这个笔记是为了考研而准备的。红字是出题点
课本使用的是唐朔飞老师编写的《计算机组成原理》
笔记借鉴了慕课的 刘宏伟 老师以及极客时间的 徐文浩 老师的课程
}
本文深入探讨了冯·诺依曼计算机架构的核心特点,包括计算机系统的组成、硬件与软件的关系、指令执行流程以及衡量计算机性能的关键指标。通过详细的硬件框图和指令执行步骤,读者能够全面理解计算机的工作原理。
1228

被折叠的 条评论
为什么被折叠?



