完成基础栏目的图片webp更换
|
@ -66,7 +66,7 @@ typedef struct
|
||||||
|
|
||||||
时间复杂度为O(mn)
|
时间复杂度为O(mn)
|
||||||
|
|
||||||
![](../../images/408/《数据结构》栈、队列和数组/暴力匹配算法.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/18/b5/f500351c7d0ba7458d819dba5da2.webp)
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ int Index_BF(string s, string t)
|
||||||
|
|
||||||
时间复杂度为O(m + n)
|
时间复杂度为O(m + n)
|
||||||
|
|
||||||
![](../../images/408/《数据结构》栈、队列和数组/模式匹配算法.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/c0/f8/645da91bde5614ec0d33cce0ee6f.webp)
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,7 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
* G = (V,E)
|
* G = (V,E)
|
||||||
* V = {1,2,3,4,5,6}
|
* V = {1,2,3,4,5,6}
|
||||||
* E = {(1,2),(2,3),(3,4),(4,5),(1,5),(5,6),(2,6),(3,6)}
|
* E = {(1,2),(2,3),(3,4),(4,5),(1,5),(5,6),(2,6),(3,6)}
|
||||||
* ![](../../images/408/《数据结构》图/无向图实例.png)
|
* ![](https://lychee.inksoul.top/uploads/original/77/b9/283696a390f9c052b5fa0c68faa1.webp)
|
||||||
|
|
||||||
### 常考结论
|
### 常考结论
|
||||||
|
|
||||||
* 无向图边数*2 = 各顶点度数之和
|
* 无向图边数*2 = 各顶点度数之和
|
||||||
|
@ -49,22 +48,22 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
|
|
||||||
* 无向图
|
* 无向图
|
||||||
* 全部由无向边构成的图
|
* 全部由无向边构成的图
|
||||||
* ![](../../images/408/《数据结构》图/无向图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/6b/8b/7e1765ce9a59df2ebbae314d57c5.webp)
|
||||||
* 有向图
|
* 有向图
|
||||||
* 全部由有向边构成的图
|
* 全部由有向边构成的图
|
||||||
* ![](../../images/408/《数据结构》图/有向图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/66/0e/61b3ddab0122a96a925d4f46f2b0.webp)
|
||||||
* 简单图、多重图
|
* 简单图、多重图
|
||||||
* 简单图:不存在重复边,不存在顶点到自身的边
|
* 简单图:不存在重复边,不存在顶点到自身的边
|
||||||
* 多重图:两个顶点之间的边数大于1
|
* 多重图:两个顶点之间的边数大于1
|
||||||
* 完全图(简单完全图)
|
* 完全图(简单完全图)
|
||||||
* 完全无向图:边数$\frac{n(n-1)}{2}$
|
* 完全无向图:边数$\frac{n(n-1)}{2}$
|
||||||
* 完全有向图:边数为$n(n-1)$
|
* 完全有向图:边数为$n(n-1)$
|
||||||
* ![](../../images/408/《数据结构》图/完全无向图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/ef/f5/c44c4f84ea1bd9d8e7a9a1092626.webp)
|
||||||
* ![](../../images/408/《数据结构》图/完全有向图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/4f/04/fa6e340c91aa6e18d40e96150279.webp)
|
||||||
* 子图、生成子图
|
* 子图、生成子图
|
||||||
* G的子图:所有顶点和边
|
* G的子图:所有顶点和边
|
||||||
* G的生成子图:含有G的所有顶点
|
* G的生成子图:含有G的所有顶点
|
||||||
* ![](../../images/408/《数据结构》图/生成子图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/3a/87/875dce9272a99f310ad4496e81db.webp)
|
||||||
* 连通、连通图、连通分量【无向图】
|
* 连通、连通图、连通分量【无向图】
|
||||||
* V和W连通:无向图中,V到W的路径存在
|
* V和W连通:无向图中,V到W的路径存在
|
||||||
* 连通图:图中任意两个顶点都是连通的
|
* 连通图:图中任意两个顶点都是连通的
|
||||||
|
@ -79,15 +78,15 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
* 出度:从该顶点出去的边的数目
|
* 出度:从该顶点出去的边的数目
|
||||||
* 顶点的度 = 出度 + 入度
|
* 顶点的度 = 出度 + 入度
|
||||||
* 对于具有n个顶点,e条边的有向图,出度和 = 入度和 = e对于具有n个顶点,e条边的无向图,度和 = 2e
|
* 对于具有n个顶点,e条边的有向图,出度和 = 入度和 = e对于具有n个顶点,e条边的无向图,度和 = 2e
|
||||||
* ![](../../images/408/《数据结构》图/顶点的度.png)
|
* ![](https://lychee.inksoul.top/uploads/original/8d/77/25346c33c718549c7a308f13bb44.webp)
|
||||||
* 边的权和网
|
* 边的权和网
|
||||||
* 权Weight:边上的数值
|
* 权Weight:边上的数值
|
||||||
* 网Network:边上标识权的图
|
* 网Network:边上标识权的图
|
||||||
* ![](../../images/408/《数据结构》图/边的权和网.png)
|
* ![](https://lychee.inksoul.top/uploads/original/15/9f/e06ebcd1e871f4968b873fac60c6.webp)
|
||||||
* 稠密图,稀疏图
|
* 稠密图,稀疏图
|
||||||
* 稠密图:边多
|
* 稠密图:边多
|
||||||
* 稀疏图:边少
|
* 稀疏图:边少
|
||||||
* ![](../../images/408/《数据结构》图/稠密图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/4f/39/00f7bb124924ea56a50451281312.webp)
|
||||||
* 路径、路径长度和回路
|
* 路径、路径长度和回路
|
||||||
* 路径Path:在一个图中,路径是从顶点u到顶点v所经过的顶点序列
|
* 路径Path:在一个图中,路径是从顶点u到顶点v所经过的顶点序列
|
||||||
* 路径长度:该路径上边的数目
|
* 路径长度:该路径上边的数目
|
||||||
|
@ -113,7 +112,7 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
* 用两个数组来表示图
|
* 用两个数组来表示图
|
||||||
* 一个一位数组存储图中顶点信息
|
* 一个一位数组存储图中顶点信息
|
||||||
* 一个二维数组存储图中的边或弧的信息
|
* 一个二维数组存储图中的边或弧的信息
|
||||||
* ![](../../images/408/《数据结构》图/邻接矩阵.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/08/22/e84787d27169f0eff573258b36fa.webp)
|
||||||
* 邻接表
|
* 邻接表
|
||||||
* 邻接表是由两部分组成
|
* 邻接表是由两部分组成
|
||||||
* 顶点用一个一维数组存储
|
* 顶点用一个一维数组存储
|
||||||
|
@ -121,17 +120,17 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
* 由于邻接点的个数不定,所以用单链表存储
|
* 由于邻接点的个数不定,所以用单链表存储
|
||||||
* 无向图称为顶点Vi的边表
|
* 无向图称为顶点Vi的边表
|
||||||
* 有向图则称为顶点Vi作为弧边的出边表
|
* 有向图则称为顶点Vi作为弧边的出边表
|
||||||
* ![](../../images/408/《数据结构》图/邻接表.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/0b/54/6df8e89c0870597808a455927803.webp)
|
||||||
* 十字链表【针对有向图】
|
* 十字链表【针对有向图】
|
||||||
* 把邻接表和逆邻接表整合在了一起
|
* 把邻接表和逆邻接表整合在了一起
|
||||||
* 既容易找到以Vi为尾的弧,也容易找到以Vi为头的弧
|
* 既容易找到以Vi为尾的弧,也容易找到以Vi为头的弧
|
||||||
* 容易求得顶点的出度和入度
|
* 容易求得顶点的出度和入度
|
||||||
* 创建图算法的时间复杂度和邻接表相同
|
* 创建图算法的时间复杂度和邻接表相同
|
||||||
* ![](../../images/408/《数据结构》图/十字链表.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/b8/67/d55424e7749adb7a853423e70cc0.webp)
|
||||||
* 邻接多重表【针对无向图】
|
* 邻接多重表【针对无向图】
|
||||||
* 仿照十字链表的方式,对边表结点的结构进行一些改造
|
* 仿照十字链表的方式,对边表结点的结构进行一些改造
|
||||||
* 同一条边在邻接表中用两个结点表示,而在邻接多重表中只有一个结点
|
* 同一条边在邻接表中用两个结点表示,而在邻接多重表中只有一个结点
|
||||||
* ![](../../images/408/《数据结构》图/邻接多重表.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/21/39/9402e8d84fa1f436e980c10bbf30.webp)
|
||||||
|
|
||||||
### 图的基本操作
|
### 图的基本操作
|
||||||
|
|
||||||
|
@ -163,11 +162,11 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
* 最好情况:O(1)
|
* 最好情况:O(1)
|
||||||
* 最坏情况:O(n)
|
* 最坏情况:O(n)
|
||||||
* 遍历过程
|
* 遍历过程
|
||||||
* ![](../../images/408/《数据结构》图/DFS遍历过程.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/a7/a3/616882c6e2d97d797a6418daa51b.webp)
|
||||||
* 生成树
|
* 生成树
|
||||||
* ![](../../images/408/《数据结构》图/DFS生成树.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/52/15/76241f6590ff16ca7d460cc56719.webp)
|
||||||
* 生成森林
|
* 生成森林
|
||||||
* ![](../../images/408/《数据结构》图/DFS生成森林.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/42/f7/ad6128ac9bc4b166de89e8eadeb5.webp)
|
||||||
|
|
||||||
### 广度优先搜索BFS
|
### 广度优先搜索BFS
|
||||||
|
|
||||||
|
@ -180,11 +179,11 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
* 空间复杂度
|
* 空间复杂度
|
||||||
* O(n)
|
* O(n)
|
||||||
* 遍历过程
|
* 遍历过程
|
||||||
* ![](../../images/408/《数据结构》图/BFS遍历过程.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/88/d6/3165fb392db9222ddcf2a851a833.webp)
|
||||||
* 生成树
|
* 生成树
|
||||||
* ![](../../images/408/《数据结构》图/BFS生成树.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/70/3e/5b9f3e24824154384e2aaec1cea4.webp)
|
||||||
* 生成森林
|
* 生成森林
|
||||||
* ![](../../images/408/《数据结构》图/BFS生成森林.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/aa/64/09d3d114c24f1bd10556b4e5f096.webp)
|
||||||
|
|
||||||
### 遍历次数
|
### 遍历次数
|
||||||
|
|
||||||
|
@ -217,34 +216,34 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
* 算法1:Prim算法
|
* 算法1:Prim算法
|
||||||
* 类似于寻找图的最短路径的Dijkstra算法【以自我为中心】
|
* 类似于寻找图的最短路径的Dijkstra算法【以自我为中心】
|
||||||
* 当带权连通图的任意一个环中所包含的边权值不同时,最小生成树是唯一的
|
* 当带权连通图的任意一个环中所包含的边权值不同时,最小生成树是唯一的
|
||||||
* ![](../../images/408/《数据结构》图/Prim算法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/69/d4/8ed8e09ec6926743c503e5824eab.webp)
|
||||||
* 算法2:Kruskal算法
|
* 算法2:Kruskal算法
|
||||||
* 按权值的递增次序选择合适的边来构造最小生成树【不以自我为中心】
|
* 按权值的递增次序选择合适的边来构造最小生成树【不以自我为中心】
|
||||||
* ![](../../images/408/《数据结构》图/Kruskal算法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/5f/8a/72eaae800232716c687e79b68fbb.webp)
|
||||||
|
|
||||||
### 最短路径
|
### 最短路径
|
||||||
|
|
||||||
* BFS
|
* BFS
|
||||||
* 求无权图的单源最短路径问题
|
* 求无权图的单源最短路径问题
|
||||||
* ![](../../images/408/《数据结构》图/求无权图的单源最短路径问题.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/57/c9/73c810c4f3175ae2fa5d11b7aa3f.webp)
|
||||||
* Dijkstra
|
* Dijkstra
|
||||||
* 求有向图的单源最短路径问题
|
* 求有向图的单源最短路径问题
|
||||||
* ![](../../images/408/《数据结构》图/求有向图的单源最短路径问题.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/f5/aa/eb516c0e8598b7092aea72984680.webp)
|
||||||
* Floyd算法
|
* Floyd算法
|
||||||
* 求任意两顶点的最短路径
|
* 求任意两顶点的最短路径
|
||||||
* ![](../../images/408/《数据结构》图/求任意两顶点间的最短路径.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/4c/31/238fce29679f324dd7437d332bfc.webp)
|
||||||
|
|
||||||
### 有向无环图描述表达式
|
### 有向无环图描述表达式
|
||||||
|
|
||||||
* 有向无环图定义
|
* 有向无环图定义
|
||||||
* 若一个有向图中不存在环,则称为有向无环图,简称DAG图
|
* 若一个有向图中不存在环,则称为有向无环图,简称DAG图
|
||||||
* 利用有向无环图描述表达式【顶点中不能出现重复操作数】
|
* 利用有向无环图描述表达式【顶点中不能出现重复操作数】
|
||||||
* ![](../../images/408/《数据结构》图/利用有向无环图描述表达式.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/22/61/41fba34d2216231ea63fa3a44d89.webp)
|
||||||
|
|
||||||
### 拓扑排序(优先入度为0)
|
### 拓扑排序(优先入度为0)
|
||||||
|
|
||||||
* 核心算法
|
* 核心算法
|
||||||
* ![](../../images/408/《数据结构》图/拓扑排序.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/73/d0/4dd761f97a5933755b0e6457afec.webp)
|
||||||
* 时间复杂度
|
* 时间复杂度
|
||||||
* 采用邻接矩阵存储,时间复杂度为$O(|V|^2)$
|
* 采用邻接矩阵存储,时间复杂度为$O(|V|^2)$
|
||||||
* 采用邻接表存储,时间复杂度为O(|V|+|E|)
|
* 采用邻接表存储,时间复杂度为O(|V|+|E|)
|
||||||
|
@ -252,7 +251,7 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
### 逆拓扑排序(优先出度为0)
|
### 逆拓扑排序(优先出度为0)
|
||||||
|
|
||||||
* 核心算法
|
* 核心算法
|
||||||
* ![](../../images/408/《数据结构》图/逆拓扑排序.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/a5/8f/e41d4fa8dc4b3a4adc166d15bcad.webp)
|
||||||
|
|
||||||
### 关键路径
|
### 关键路径
|
||||||
|
|
||||||
|
@ -264,10 +263,10 @@ date: 2023-08-01T11:26:56+08:00
|
||||||
* 有多条关键路径的时候,减少关键活动的时间不一定会缩短工程的工期
|
* 有多条关键路径的时候,减少关键活动的时间不一定会缩短工程的工期
|
||||||
* 求关键路径的快速方法:找起点到终点的最长路径
|
* 求关键路径的快速方法:找起点到终点的最长路径
|
||||||
* AOE网
|
* AOE网
|
||||||
* ![](../../images/408/《数据结构》图/AOE网.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/68/bd/0bc4e7c1cf02bb82afe47aa82b2a.webp)
|
||||||
* 计算过程
|
* 计算过程
|
||||||
|
|
||||||
![](../../images/408/《数据结构》图/计算过程.jpg)
|
![](https://lychee.inksoul.top/uploads/original/a2/12/0fe30c94b2e605792005f105d378.webp)
|
||||||
|
|
||||||
1. 求所有事件的最早发生事件Ve()
|
1. 求所有事件的最早发生事件Ve()
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ date: 2023-08-03T19:21:43+08:00
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题1.jpg)
|
![](https://lychee.inksoul.top/uploads/original/0f/a6/5c2c2be56ba35074ec35e9f1e910.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ date: 2023-08-03T19:21:43+08:00
|
||||||
|
|
||||||
(2)
|
(2)
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题1图1.png)
|
![](https://lychee.inksoul.top/uploads/original/55/73/2c1a3a2102f46457b32ea7522f41.webp)
|
||||||
|
|
||||||
front为队首指针,rear为队尾指针
|
front为队首指针,rear为队尾指针
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ front,rear均指向空闲结点
|
||||||
|
|
||||||
(3)
|
(3)
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题1图2.png)
|
![](https://lychee.inksoul.top/uploads/original/0f/fe/54022ec9a15f65bffd26fc9832af.webp)
|
||||||
|
|
||||||
(4)
|
(4)
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ front = front -> next;
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题2.jpg)
|
![](https://lychee.inksoul.top/uploads/original/c8/ed/783b99dace3f08544cfbda5e9499.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ $01011010\cdots$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题3.jpg)
|
![](https://lychee.inksoul.top/uploads/original/4e/9b/a33f6529a002a422fd84f90d94f4.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ $01011010\cdots$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题4.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/41/56/06759881b450f2b119712a9d3a93.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ $01011010\cdots$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题5.jpg)
|
![](https://lychee.inksoul.top/uploads/original/36/38/3eabd76e81f215b28a09c7e33b73.webp)
|
||||||
|
|
||||||
(2)
|
(2)
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ $01011010\cdots$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题6.jpg)
|
![](https://lychee.inksoul.top/uploads/original/2b/ce/02c26da04e858259100b90a0f131.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -184,7 +184,7 @@ $$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题7.jpg)
|
![](https://lychee.inksoul.top/uploads/original/1f/38/14a70faa16bf16537045584e6d12.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ typedef struct hNode
|
||||||
|
|
||||||
(3)
|
(3)
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题7图1.jpg)
|
![](https://lychee.inksoul.top/uploads/original/2d/14/48cc62c6082fde50901c1fc2eb05.webp)
|
||||||
|
|
||||||
|目的网络|路径|代价|
|
|目的网络|路径|代价|
|
||||||
|:---:|:---:|:---:|
|
|:---:|:---:|:---:|
|
||||||
|
@ -273,7 +273,7 @@ typedef struct hNode
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题8.jpg)
|
![](https://lychee.inksoul.top/uploads/original/bc/48/ed7f65b184de1b65e9f97a1c9ef0.webp)
|
||||||
|
|
||||||
不一定能求得最短路径
|
不一定能求得最短路径
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ typedef struct hNode
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题9.jpg)
|
![](https://lychee.inksoul.top/uploads/original/06/c8/a3d7a41c55e71530e2d1e76ef94f.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ $$
|
||||||
|
|
||||||
(2)
|
(2)
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题9图1.png)
|
![](https://lychee.inksoul.top/uploads/original/68/e7/3c650de926eeb42589fbe667450a.webp)
|
||||||
|
|
||||||
(3)
|
(3)
|
||||||
|
|
||||||
|
@ -311,7 +311,7 @@ $$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题10.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/80/a4/8d293a584a291378e1b43bef3be3.webp)
|
||||||
|
|
||||||
总费用均为16
|
总费用均为16
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ TTL = 5=>IP分组的最大传递距离 = 5
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题11.jpg)
|
![](https://lychee.inksoul.top/uploads/original/09/bf/04d26ad3c3821e12fe79987babb9.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -381,7 +381,7 @@ $ASL_{失败} = \frac{3+2+1+2+1+5+4}{7} = \frac{18}{7}$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题12.jpg)
|
![](https://lychee.inksoul.top/uploads/original/49/46/73af136cfe355173414bf9ab1549.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -409,7 +409,7 @@ $ASL=0.15\times1 + 0.35\times2 + 0.35\times2 + 0.15\times3 = 2.0$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《数据结构》大题/大题13.jpg)
|
![](https://lychee.inksoul.top/uploads/original/df/08/dbf667549d533781bf390ad24b4a.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ date: 2023-08-02T21:25:52+08:00
|
||||||
* 稳定性
|
* 稳定性
|
||||||
* 稳定
|
* 稳定
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《数据结构》排序/直接插入排序.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/b1/02/fcc30a48182ba9b9a6f09104b11a.webp)
|
||||||
* 代码
|
* 代码
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
@ -48,7 +48,7 @@ void insertion_sort(int arr[],int len)
|
||||||
* 常考点
|
* 常考点
|
||||||
* 计算希尔排序的增量大小
|
* 计算希尔排序的增量大小
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《数据结构》排序/希尔排序.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/2c/66/f4299334fdee0cb73dfa03ee49da.webp)
|
||||||
* 代码
|
* 代码
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
@ -104,7 +104,7 @@ void shell_sort(int arr[],int len)
|
||||||
* 元素从小到大时 = 最坏情况比较次数 = $\frac{n\times(n-1)}{2}$
|
* 元素从小到大时 = 最坏情况比较次数 = $\frac{n\times(n-1)}{2}$
|
||||||
* 元素从小到大时 = 最好情况比较次数 = n-1
|
* 元素从小到大时 = 最好情况比较次数 = n-1
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《数据结构》排序/冒泡排序.png)
|
* ![](https://lychee.inksoul.top/uploads/original/ea/2d/4e67479ef086f0bd9793377364e2.webp)
|
||||||
|
|
||||||
代码
|
代码
|
||||||
|
|
||||||
|
@ -161,10 +161,10 @@ int main()
|
||||||
* 最小递归深度 = 枢纽值每次都是子表的最大值或最小值 = 单链表 = 树高为n
|
* 最小递归深度 = 枢纽值每次都是子表的最大值或最小值 = 单链表 = 树高为n
|
||||||
* 例图
|
* 例图
|
||||||
* 三位取中【通常取最左边的元素为枢纽值】
|
* 三位取中【通常取最左边的元素为枢纽值】
|
||||||
* ![](../../images/408/《数据结构》排序/三位取中.png)
|
* ![](https://lychee.inksoul.top/uploads/original/06/0c/9a32cd20a3bc619f77d55c130fef.webp)
|
||||||
* 根据枢纽值进行分割【通常先从右到左交换比枢纽值小的,再从左到右交换比枢纽值大的
|
* 根据枢纽值进行分割【通常先从右到左交换比枢纽值小的,再从左到右交换比枢纽值大的
|
||||||
* ![](../../images/408/《数据结构》排序/根据枢纽值进行分割1.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/0d/ff/285a7cae710440f3f8d349f8f724.webp)
|
||||||
* ![](../../images/408/《数据结构》排序/根据枢纽值进行分割2.png)
|
* ![](https://lychee.inksoul.top/uploads/original/76/dc/333065784345f9547c5a630cb51f.webp)
|
||||||
* 代码
|
* 代码
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
@ -212,7 +212,7 @@ void Qsort(int A[],L,R)//a数组保存数据,L和R是边界
|
||||||
* 常考点
|
* 常考点
|
||||||
* 比较次数数量级与序列初始状态无关
|
* 比较次数数量级与序列初始状态无关
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《数据结构》排序/简单选择排序.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/41/65/cbb276279f127a0317504d7e5aff.webp)
|
||||||
* 代码
|
* 代码
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
@ -310,15 +310,15 @@ void heapSort(int A[],int n)
|
||||||
|
|
||||||
### 建堆过程
|
### 建堆过程
|
||||||
|
|
||||||
![](../../images/408/《数据结构》排序/掌握建堆的过程.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/6d/9a/ce72c8eef75846451d074277bde3.webp)
|
||||||
|
|
||||||
### 掌握堆增加一个元素的过程
|
### 堆增加一个元素的过程
|
||||||
|
|
||||||
![](../../images/408/《数据结构》排序/掌握堆增加一个元素的过程.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/83/30/4955cd60251cbb88ea3df48217c5.webp)
|
||||||
|
|
||||||
### 掌握大顶堆和小顶堆的概念
|
### 掌握大顶堆和小顶堆的概念
|
||||||
|
|
||||||
![](../../images/408/《数据结构》排序/掌握大顶堆和小顶堆的概念.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/c2/12/d14667418b386b3292d187c8d9ee.webp)
|
||||||
|
|
||||||
|
|
||||||
## 归并排序和基数排序
|
## 归并排序和基数排序
|
||||||
|
@ -340,7 +340,7 @@ void heapSort(int A[],int n)
|
||||||
* 比较次数数量级与序列初始状态无关
|
* 比较次数数量级与序列初始状态无关
|
||||||
* 对于N个元素进行k路归并排序的趟数满足$k^m = N$
|
* 对于N个元素进行k路归并排序的趟数满足$k^m = N$
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《数据结构》排序/归并排序.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/61/0b/034ee4f6564660e05184f9958f35.webp)
|
||||||
* 代码
|
* 代码
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
@ -404,7 +404,7 @@ void mergeSort(vector<int>& arr,int l,int r)
|
||||||
* MSD是最高位优先,LSD是最低位优先
|
* MSD是最高位优先,LSD是最低位优先
|
||||||
* 基数排序不能对float和double类型的实数进行排序
|
* 基数排序不能对float和double类型的实数进行排序
|
||||||
* 例题
|
* 例题
|
||||||
* ![](../../images/408/《数据结构》排序/基数排序.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/1e/37/86dc8105114e46b9bad7fbed5c8b.webp)
|
||||||
* 代码
|
* 代码
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
@ -488,7 +488,7 @@ void radixSort(int data[],int n)
|
||||||
* 将整个文件等分为10个临时文件(每个文件有1000个记录)
|
* 将整个文件等分为10个临时文件(每个文件有1000个记录)
|
||||||
* 然后将这10个文件依次进入内存,采取适当的内存排序算法对其中的记录进行排序,将得到的有序文件(初始归并段)移至内存
|
* 然后将这10个文件依次进入内存,采取适当的内存排序算法对其中的记录进行排序,将得到的有序文件(初始归并段)移至内存
|
||||||
* 对得到的10个初始归并段进行如图的两两归并,直到得到一个完整的有序文件
|
* 对得到的10个初始归并段进行如图的两两归并,直到得到一个完整的有序文件
|
||||||
* ![](../../images/408/《数据结构》排序/外部排序举例.png)
|
* ![](https://lychee.inksoul.top/uploads/original/3f/ad/b87c271d2c291da5e39dfba85a75.webp)
|
||||||
* 如图有10个初始归并段到一个有序文件,共进行了4次归并,每次都由m个归并段得到[m/2]个归并段,这种归并方式被称为2-路平衡归并
|
* 如图有10个初始归并段到一个有序文件,共进行了4次归并,每次都由m个归并段得到[m/2]个归并段,这种归并方式被称为2-路平衡归并
|
||||||
* 效率分析
|
* 效率分析
|
||||||
* 影响整体排序效率的因素主要取决于读写外存的次数,即访问外存的次数越多,算法花费的时间越多,效率就越低
|
* 影响整体排序效率的因素主要取决于读写外存的次数,即访问外存的次数越多,算法花费的时间越多,效率就越低
|
||||||
|
|
|
@ -72,7 +72,7 @@ int Search.Seq(SSTable ST,ElemType key){
|
||||||
|
|
||||||
查找判定树
|
查找判定树
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/顺序查找的优化.jpg)
|
![](https://lychee.inksoul.top/uploads/original/6a/fb/77ca033e6fa21a74e72894e180a9.webp)
|
||||||
|
|
||||||
性质:
|
性质:
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ int Binary_Search(SSTable L,ElemType ket){
|
||||||
|
|
||||||
### 查找效率分析
|
### 查找效率分析
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/查找效率分析.jpg)
|
![](https://lychee.inksoul.top/uploads/original/59/d5/64fb4d2d77d60268a6ee80da8b24.webp)
|
||||||
|
|
||||||
$ASL_{成功} = (1 \cdot 1 + 2\cdot 2+3\cdot 4+4\cdot 4)/11 = 3$(有分支结点)
|
$ASL_{成功} = (1 \cdot 1 + 2\cdot 2+3\cdot 4+4\cdot 4)/11 = 3$(有分支结点)
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ $ASL_{失败} = (4\cdot 3+8\cdot 4)/12 = \frac{11}{3}$(叶子结点)
|
||||||
* 折半查找树是平衡二叉树(左右子树高度之差不大于1)
|
* 折半查找树是平衡二叉树(左右子树高度之差不大于1)
|
||||||
* 折半查找判定树可以用二叉排序树来判别,其中序序列是一个有序序列
|
* 折半查找判定树可以用二叉排序树来判别,其中序序列是一个有序序列
|
||||||
* 还有可能要判断取整方向是否一致
|
* 还有可能要判断取整方向是否一致
|
||||||
* ![](../../images/408/《数据结构》查找/折半查找判定树.jpeg)
|
* ![](https://lychee.inksoul.top/uploads/original/b7/1e/00c04636e392bd5a5bf9b6cb797f.webp)
|
||||||
|
|
||||||
### 常考结论
|
### 常考结论
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ $ASL_{失败} = (4\cdot 3+8\cdot 4)/12 = \frac{11}{3}$(叶子结点)
|
||||||
|
|
||||||
### 定义
|
### 定义
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/分块查找.jpg)
|
![](https://lychee.inksoul.top/uploads/original/3f/91/f7f27551e5adb0b088d5b2fc20ba.webp)
|
||||||
|
|
||||||
```c
|
```c
|
||||||
//索引表
|
//索引表
|
||||||
|
@ -158,7 +158,7 @@ ElemType List[100];
|
||||||
|
|
||||||
### 效率分析
|
### 效率分析
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/效率分析.jpg)
|
![](https://lychee.inksoul.top/uploads/original/f1/fe/4b844745aae42046059548a534d5.webp)
|
||||||
|
|
||||||
设长度为n的查找表被均匀低分为6块,每个块包含s个元素
|
设长度为n的查找表被均匀低分为6块,每个块包含s个元素
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ $ASL = [\log_2(b+1)]+\frac{s+1}{2}$
|
||||||
|
|
||||||
#### 查找
|
#### 查找
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/BST查找.png)
|
![](https://lychee.inksoul.top/uploads/original/6f/f5/fc3575e26a663e7db33af5d7feb4.webp)
|
||||||
|
|
||||||
```c
|
```c
|
||||||
typedef Struct BSTNode{
|
typedef Struct BSTNode{
|
||||||
|
@ -251,7 +251,7 @@ BSTNode *BSTSearch(BSTTree T,int key){
|
||||||
|
|
||||||
#### 插入
|
#### 插入
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/BST插入.jpg.png)
|
![](https://lychee.inksoul.top/uploads/original/5a/15/7635dbb009a75feae70bc2785eee.webp)
|
||||||
|
|
||||||
```c
|
```c
|
||||||
//在二叉排序树中插入关键字为key的新结点(递归)
|
//在二叉排序树中插入关键字为key的新结点(递归)
|
||||||
|
@ -276,7 +276,7 @@ int BST_Insert(BSTTree &T,int k){
|
||||||
|
|
||||||
按{50,66,60,26,21,30,70,68}建立BST
|
按{50,66,60,26,21,30,70,68}建立BST
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/BST构造.png)
|
![](https://lychee.inksoul.top/uploads/original/71/0e/e707bc9c6cd61ca9b40dc5bbf653.webp)
|
||||||
|
|
||||||
```c
|
```c
|
||||||
//按照str[]中的关键字序列建立二叉排序树
|
//按照str[]中的关键字序列建立二叉排序树
|
||||||
|
@ -292,18 +292,18 @@ void Create_BST(BSTTree &T,int str[],int n){
|
||||||
|
|
||||||
#### 删除
|
#### 删除
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/BST删除.png)
|
![](https://lychee.inksoul.top/uploads/medium/58/e9/3bf53790cbc080ce876605b49b6e.webp)
|
||||||
|
|
||||||
|
|
||||||
#### 查找效率分析
|
#### 查找效率分析
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/BST效率分析1.png)
|
![](https://lychee.inksoul.top/uploads/original/72/82/e0d94f12dfe68feee9006862b00a.webp)
|
||||||
|
|
||||||
$ASL_{成功} = \frac{(1\times1 + 2\times2 + 3\times4 +4\times1)}{8} = \frac{21}{8}$
|
$ASL_{成功} = \frac{(1\times1 + 2\times2 + 3\times4 +4\times1)}{8} = \frac{21}{8}$
|
||||||
|
|
||||||
$ASL_{失败} = \frac{(3\times7+2\times4)}{9} = \frac{29}{9}$
|
$ASL_{失败} = \frac{(3\times7+2\times4)}{9} = \frac{29}{9}$
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/BST效率分析2.png)
|
![](https://lychee.inksoul.top/uploads/original/5a/06/6b8b38bf1f02dbc4a3a32591ab94.webp)
|
||||||
|
|
||||||
$ASL_{成功} = \frac{(1\times1 + 2\times2 + 3\times1 +4\times1+5\times1+6\times1+7\times1)}{8} = \frac{30}{8}$
|
$ASL_{成功} = \frac{(1\times1 + 2\times2 + 3\times1 +4\times1+5\times1+6\times1+7\times1)}{8} = \frac{30}{8}$
|
||||||
|
|
||||||
|
@ -314,14 +314,14 @@ $ASL_{失败} = \frac{(3\times2+1\times3+1\times4+1\times5+1\times6+2\times7)}{9
|
||||||
|
|
||||||
#### 调整最小平衡子树
|
#### 调整最小平衡子树
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/调整最小不平衡子树.jpg)
|
![](https://lychee.inksoul.top/uploads/medium2x/34/15/1304aa2f6bc9eecebc2cbd99e414.webp)
|
||||||
|
|
||||||
|
|
||||||
#### 平衡二叉树生成案例
|
#### 平衡二叉树生成案例
|
||||||
|
|
||||||
{15,3,7,10,9,8}生成平衡二叉树的过程
|
{15,3,7,10,9,8}生成平衡二叉树的过程
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/平衡二叉树生成例子.png)
|
![](https://lychee.inksoul.top/uploads/original/30/ce/dcffccf906a5538b2503db0619dc.webp)
|
||||||
|
|
||||||
#### 平衡二叉树的查找
|
#### 平衡二叉树的查找
|
||||||
|
|
||||||
|
@ -335,7 +335,7 @@ $n_0 = 0,n_1 = 1,n_2 = 2,n_3 = 4$
|
||||||
|
|
||||||
#### 平衡二叉树的删除
|
#### 平衡二叉树的删除
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/BST删除.png)
|
![](https://lychee.inksoul.top/uploads/medium/58/e9/3bf53790cbc080ce876605b49b6e.webp)
|
||||||
|
|
||||||
1. 删除结点(二叉排序树)
|
1. 删除结点(二叉排序树)
|
||||||
2. 向上寻找最小不平衡子树
|
2. 向上寻找最小不平衡子树
|
||||||
|
@ -343,9 +343,9 @@ $n_0 = 0,n_1 = 1,n_2 = 2,n_3 = 4$
|
||||||
4. 依孙子位置调节平衡(LL/RR/LR/RL)
|
4. 依孙子位置调节平衡(LL/RR/LR/RL)
|
||||||
5. 调整后不平衡向上传导,重复第二步
|
5. 调整后不平衡向上传导,重复第二步
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/平衡二叉树生成例题1.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/77/c0/58231d773d2a56fb7426ab7a3565.webp)
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/平衡二叉树生成例题2.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/da/26/1c3d127702df22ab7aaede914538.webp)
|
||||||
|
|
||||||
|
|
||||||
### 红黑树
|
### 红黑树
|
||||||
|
@ -363,7 +363,7 @@ $n_0 = 0,n_1 = 1,n_2 = 2,n_3 = 4$
|
||||||
|
|
||||||
插入序列{20,10,5,30,40,57,3,2,4,35,25,18,22,23,24,19,18}
|
插入序列{20,10,5,30,40,57,3,2,4,35,25,18,22,23,24,19,18}
|
||||||
|
|
||||||
![](../../images/408/《数据结构》查找/红黑树.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/a0/db/1c379d7e63ac700ea28bc6963607.webp)
|
||||||
|
|
||||||
|
|
||||||
## B树(B-tree)
|
## B树(B-tree)
|
||||||
|
@ -380,7 +380,7 @@ $n_0 = 0,n_1 = 1,n_2 = 2,n_3 = 4$
|
||||||
* 所有叶节点都在同一层次上
|
* 所有叶节点都在同一层次上
|
||||||
* 概念图
|
* 概念图
|
||||||
* B树中一个节点的子节点数目的最大值,用m表示,假如最大值为4,则为4阶
|
* B树中一个节点的子节点数目的最大值,用m表示,假如最大值为4,则为4阶
|
||||||
* ![](../../images/408/《数据结构》查找/B树概念图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/36/af/8d729c22e1057f85aeca8d356a8c.webp)
|
||||||
|
|
||||||
|
|
||||||
## B+树
|
## B+树
|
||||||
|
@ -391,7 +391,7 @@ $n_0 = 0,n_1 = 1,n_2 = 2,n_3 = 4$
|
||||||
* 叶子结点本身依关键字的大小自小而大的顺序链接
|
* 叶子结点本身依关键字的大小自小而大的顺序链接
|
||||||
* 所有的非终端节点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字
|
* 所有的非终端节点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字
|
||||||
* 概念图
|
* 概念图
|
||||||
* ![](../../images/408/《数据结构》查找/B+树概念图.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/ef/c7/29bd05654427328e90b88701dd81.webp)
|
||||||
* B树和B+树的对比
|
* B树和B+树的对比
|
||||||
|
|
||||||
||m阶B树|m阶B+树|
|
||m阶B树|m阶B+树|
|
||||||
|
@ -437,12 +437,12 @@ $n_0 = 0,n_1 = 1,n_2 = 2,n_3 = 4$
|
||||||
* 一旦产生了冲突,就按某种规则去寻找另一空地址
|
* 一旦产生了冲突,就按某种规则去寻找另一空地址
|
||||||
* 发生聚集的原因主要是解决冲突的方法选择不当
|
* 发生聚集的原因主要是解决冲突的方法选择不当
|
||||||
* 线性探测
|
* 线性探测
|
||||||
* ![](../../images/408/《数据结构》查找/线性探测.png)
|
* ![](https://lychee.inksoul.top/uploads/original/13/21/fa10dfcec15e9bcadba17a6ee487.webp)
|
||||||
* ![](../../images/408/《数据结构》查找/散列表查找性能分析.png)
|
* ![](https://lychee.inksoul.top/uploads/original/bb/93/711a5c3ea743c2d3ad6a5583847a.webp)
|
||||||
* 平方探测
|
* 平方探测
|
||||||
* ![](../../images/408/《数据结构》查找/平方探测.png)
|
* ![](https://lychee.inksoul.top/uploads/original/05/e6/cdcea9aad80962426f9f27c210dc.webp)
|
||||||
* 有定理显示,如果散列表长度TableSize是某个4k+3(k是正整数)形式的素数时,平方探测就可以探查到整个散列表空间
|
* 有定理显示,如果散列表长度TableSize是某个4k+3(k是正整数)形式的素数时,平方探测就可以探查到整个散列表空间
|
||||||
* 链地址法
|
* 链地址法
|
||||||
* 将相应位置上冲突的所有关键词存储在同一单链表中
|
* 将相应位置上冲突的所有关键词存储在同一单链表中
|
||||||
* ![](../../images/408/《数据结构》查找/链地址法.png)
|
* ![](https://lychee.inksoul.top/uploads/original/b3/e9/60062f095c80bae66165ff02449e.webp)
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ bool GetTop(SqStack S,ElemType x)
|
||||||
* 利用栈底位置相对不变的特性,可让两个顺序栈共享一个一维数组空间
|
* 利用栈底位置相对不变的特性,可让两个顺序栈共享一个一维数组空间
|
||||||
* 将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸
|
* 将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸
|
||||||
* 特点
|
* 特点
|
||||||
* ![](../../images/408/《数据结构》栈、队列和数组/共享栈特点.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/21/84/4019169d03f65b6dcead496028bf.webp)
|
||||||
* 目的
|
* 目的
|
||||||
* 更有效地利用存储空间
|
* 更有效地利用存储空间
|
||||||
* 两个栈的空间相互调节,只有在整个存储空间都被占满时才发生上溢
|
* 两个栈的空间相互调节,只有在整个存储空间都被占满时才发生上溢
|
||||||
|
@ -180,13 +180,13 @@ typedef struct Linknode
|
||||||
|
|
||||||
后缀表达式和正常表达式的相互转换
|
后缀表达式和正常表达式的相互转换
|
||||||
|
|
||||||
![](../../images/408/《数据结构》栈、队列和数组/后缀表达式和正常表达式的相互转换.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/6e/d8/a5d11c72762137d57d26730d7fc1.webp)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
中缀到后缀表达式转换的过程
|
中缀到后缀表达式转换的过程
|
||||||
|
|
||||||
![](../../images/408/《数据结构》栈、队列和数组/中缀到后缀表达式转换的过程.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/7a/b6/dd98458478aa785b79610bbd0e3a.webp)
|
||||||
|
|
||||||
#### 递归
|
#### 递归
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ typedef struct Linknode
|
||||||
|
|
||||||
##### 顺序队列的实现
|
##### 顺序队列的实现
|
||||||
|
|
||||||
![](../../images/408/《数据结构》栈、队列和数组/顺序队列的实现.jpg)
|
![](https://lychee.inksoul.top/uploads/original/9a/9a/975843b998eab5bc7b4455e5a05e.webp)
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ typedef struct
|
||||||
|
|
||||||
##### 循环队列的实现
|
##### 循环队列的实现
|
||||||
|
|
||||||
![](../../images/408/《数据结构》栈、队列和数组/循环队列的实现.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/16/b5/1d5351019ea1fc9ad5717ab3ddab.webp)
|
||||||
|
|
||||||
##### 区分循环队列队空还是队满
|
##### 区分循环队列队空还是队满
|
||||||
|
|
||||||
|
@ -439,12 +439,10 @@ bool DeEmpty(LinkQueue &Q,ElemType &x)
|
||||||
|
|
||||||
### 队列的应用
|
### 队列的应用
|
||||||
|
|
||||||
#### 层次遍历
|
#### 层序遍历
|
||||||
|
|
||||||
使用队列是为了保存下一步的处理顺序
|
使用队列是为了保存下一步的处理顺序
|
||||||
|
|
||||||
![](../../images/408/《计网》应用层/层次域名空间.png)
|
|
||||||
|
|
||||||
#### 计算机系统中的应用
|
#### 计算机系统中的应用
|
||||||
|
|
||||||
* 解决主机与外部设备之间速度不匹配的问题
|
* 解决主机与外部设备之间速度不匹配的问题
|
||||||
|
|
|
@ -16,7 +16,7 @@ date: 2023-07-31T14:08:42+08:00
|
||||||
* 每一个非根节点有且只有一个父节点
|
* 每一个非根节点有且只有一个父节点
|
||||||
* 除了根节点外,每个子节点可以分为多个不相交的子树
|
* 除了根节点外,每个子节点可以分为多个不相交的子树
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/树的定义.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/88/84/4e693e032ccf0406228a5740e84b.webp)
|
||||||
* 树的高度、深度、层
|
* 树的高度、深度、层
|
||||||
* 节点的高度 = 节点到叶子节点的最长路径
|
* 节点的高度 = 节点到叶子节点的最长路径
|
||||||
* 节点的深度 = 根节点到这个节点所经历的边的个数
|
* 节点的深度 = 根节点到这个节点所经历的边的个数
|
||||||
|
@ -47,10 +47,10 @@ date: 2023-07-31T14:08:42+08:00
|
||||||
* 采用一组连续空间来存储每个节点
|
* 采用一组连续空间来存储每个节点
|
||||||
* 在每个节点中设置一个伪指针
|
* 在每个节点中设置一个伪指针
|
||||||
* 尾指针指示器双亲节点在数组中的位置
|
* 尾指针指示器双亲节点在数组中的位置
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/双亲表示法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/69/ce/bea153fece732ece822e3d219e5c.webp)
|
||||||
* 孩子表示法
|
* 孩子表示法
|
||||||
* 将每个节点的孩子节点用单链表连接
|
* 将每个节点的孩子节点用单链表连接
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/孩子表示法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/c3/6e/2a3fbd85f8c9689a1dd2ea811cb4.webp)
|
||||||
* 孩子兄弟表示法
|
* 孩子兄弟表示法
|
||||||
* 又叫二叉树表示法
|
* 又叫二叉树表示法
|
||||||
* 以二叉链表作为树的存储结构
|
* 以二叉链表作为树的存储结构
|
||||||
|
@ -58,7 +58,7 @@ date: 2023-07-31T14:08:42+08:00
|
||||||
* 孩子节点
|
* 孩子节点
|
||||||
* 数据
|
* 数据
|
||||||
* 兄弟节点
|
* 兄弟节点
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/孩子兄弟表示法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/e3/ad/d0fc5e3cd2ace3ba230d15d50393.webp)
|
||||||
|
|
||||||
### 树林和二叉树的转换
|
### 树林和二叉树的转换
|
||||||
|
|
||||||
|
@ -66,12 +66,12 @@ date: 2023-07-31T14:08:42+08:00
|
||||||
* 在兄弟节点之间加一连线
|
* 在兄弟节点之间加一连线
|
||||||
* 对每个节点,只保留它与第一个孩子的连线
|
* 对每个节点,只保留它与第一个孩子的连线
|
||||||
* 以树根为轴心,顺时针旋转45度
|
* 以树根为轴心,顺时针旋转45度
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/树与二叉树.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/0d/ee/3b21614c120705475c23a44cd731.webp)
|
||||||
* 树、树林与二叉树
|
* 树、树林与二叉树
|
||||||
* 将森林中的每棵树转换成相应的二叉树
|
* 将森林中的每棵树转换成相应的二叉树
|
||||||
* 每棵树的根也可以视为兄弟关系,在每棵树之间加一根连线
|
* 每棵树的根也可以视为兄弟关系,在每棵树之间加一根连线
|
||||||
* 以第一棵树的根为轴心旋转45
|
* 以第一棵树的根为轴心旋转45
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/树,树林与二叉树.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/e1/3a/cc44e46f435034b17ca1132c47e6.webp)
|
||||||
|
|
||||||
### 树和森林的遍历对应关系
|
### 树和森林的遍历对应关系
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ date: 2023-07-31T14:08:42+08:00
|
||||||
* 二叉树可以是空集
|
* 二叉树可以是空集
|
||||||
* 根可以有空的左子树或右子树
|
* 根可以有空的左子树或右子树
|
||||||
* 左、右子树皆为空
|
* 左、右子树皆为空
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/二叉树的定义.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/ba/93/c7a691a7ef221ee5e8eb49ec1180.webp)
|
||||||
* 性质
|
* 性质
|
||||||
* 二叉树第i层上的节点数目最多为$2^{i-1}$
|
* 二叉树第i层上的节点数目最多为$2^{i-1}$
|
||||||
* 深度为k的二叉树最多有$2^k-1$个节点(满二叉树)
|
* 深度为k的二叉树最多有$2^k-1$个节点(满二叉树)
|
||||||
|
@ -104,21 +104,21 @@ date: 2023-07-31T14:08:42+08:00
|
||||||
|
|
||||||
* 满二叉树
|
* 满二叉树
|
||||||
* 高度为h,并且有$2^h -1$个结点的二叉树
|
* 高度为h,并且有$2^h -1$个结点的二叉树
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/满二叉树.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/0e/ba/bf466277fb23d6c59e6cddb964fe.webp)
|
||||||
* 完全二叉树
|
* 完全二叉树
|
||||||
* 叶子结点只能出现在最下层和次下层,最下层的叶子结点集中在树的左部
|
* 叶子结点只能出现在最下层和次下层,最下层的叶子结点集中在树的左部
|
||||||
* 一棵满二叉树必定是一棵完全二叉树
|
* 一棵满二叉树必定是一棵完全二叉树
|
||||||
* 完全二叉树未必是满二叉树
|
* 完全二叉树未必是满二叉树
|
||||||
* 完全二叉树中,度为1的节点数 = 0个或者1个
|
* 完全二叉树中,度为1的节点数 = 0个或者1个
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/完全二叉树.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/26/df/340425bb85ff94708f25a089ba24.webp)
|
||||||
* 二叉查找树
|
* 二叉查找树
|
||||||
* 左子树节点比根节点值小
|
* 左子树节点比根节点值小
|
||||||
* 右子树节点比根节点值大
|
* 右子树节点比根节点值大
|
||||||
* 没有剑指相等的节点
|
* 左右子树页分别为二叉查找树
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/二叉查找树.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/a4/bf/c4b66ba00d38b9ef66e3bdc96b7c.webp)
|
||||||
* 平衡二叉树
|
* 平衡二叉树
|
||||||
* 树上任一结点的左子树和右子树的深度值差不超过1
|
* 树上任一结点的左子树和右子树的深度值差不超过1
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/平衡二叉树.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/30/f1/e2ab79c78644f72386e4dd08f223.webp)
|
||||||
|
|
||||||
### 二叉树的存储结构
|
### 二叉树的存储结构
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ date: 2023-07-31T14:08:42+08:00
|
||||||
* 完全二叉树
|
* 完全二叉树
|
||||||
* 满二叉树
|
* 满二叉树
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/顺序存储结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/fb/e8/c6b21fa396cec3e09719b1b80894.webp)
|
||||||
* 链式存储结构
|
* 链式存储结构
|
||||||
* 定义
|
* 定义
|
||||||
* 只要知道根节点,就可以通过左右子节点的指针把整棵二叉树串起来
|
* 只要知道根节点,就可以通过左右子节点的指针把整棵二叉树串起来
|
||||||
|
@ -148,7 +148,7 @@ date: 2023-07-31T14:08:42+08:00
|
||||||
* 适用于
|
* 适用于
|
||||||
* 二叉树
|
* 二叉树
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/链式存储结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/49/e4/b464d3916110bc449d0320435ca1.webp)
|
||||||
|
|
||||||
## 二叉树的实现
|
## 二叉树的实现
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ struct TreeNode
|
||||||
|
|
||||||
根节点->左节点->右节点
|
根节点->左节点->右节点
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/前序.jpg)
|
![](https://lychee.inksoul.top/uploads/original/a9/16/bd301c821224c25867d4943a6360.webp)
|
||||||
|
|
||||||
递归代码
|
递归代码
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ void PreOrderTraversal(BinTree BT)
|
||||||
|
|
||||||
左节点->根节点->右节点
|
左节点->根节点->右节点
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/中序.jpg)
|
![](https://lychee.inksoul.top/uploads/original/9a/b4/c41371da1fce66bfcde980c09970.webp)
|
||||||
|
|
||||||
|
|
||||||
递归代码
|
递归代码
|
||||||
|
@ -269,7 +269,7 @@ void InOrderTraversal(BinTree BT)
|
||||||
|
|
||||||
左节点->右节点->根节点
|
左节点->右节点->根节点
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/后序.jpg)
|
![](https://lychee.inksoul.top/uploads/original/af/f5/891ccc67009a6a8cdd02caa6ab48.webp)
|
||||||
|
|
||||||
递归方式
|
递归方式
|
||||||
|
|
||||||
|
@ -350,7 +350,7 @@ void LevelOrderTraversal(BinTree BT)
|
||||||
|
|
||||||
#### 三种遍历示例
|
#### 三种遍历示例
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/三种遍历实例.jpg)
|
![](https://lychee.inksoul.top/uploads/original/45/68/04be9ea2280cd71d4fc4d83b3de8.webp)
|
||||||
|
|
||||||
(01) 前序遍历结果 : 3 1 2 5 4 6
|
(01) 前序遍历结果 : 3 1 2 5 4 6
|
||||||
(02) 中序遍历结果 : 1 2 3 4 5 6
|
(02) 中序遍历结果 : 1 2 3 4 5 6
|
||||||
|
@ -365,7 +365,7 @@ void LevelOrderTraversal(BinTree BT)
|
||||||
* 前序序列与后序序列刚好相反的时候,二叉树的高度 = 节点数(即每层只有一个节点)
|
* 前序序列与后序序列刚好相反的时候,二叉树的高度 = 节点数(即每层只有一个节点)
|
||||||
* 后序遍历可以找到m到n的路径(其中m是n的祖先)
|
* 后序遍历可以找到m到n的路径(其中m是n的祖先)
|
||||||
* 根据两个序列确定二叉树的方法
|
* 根据两个序列确定二叉树的方法
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/例题.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/18/95/477d72bbb91fc63ec3de6f044673.webp)
|
||||||
|
|
||||||
### 线索二叉树
|
### 线索二叉树
|
||||||
|
|
||||||
|
@ -395,7 +395,7 @@ void LevelOrderTraversal(BinTree BT)
|
||||||
2. 节点右子节点为空的指针域指向它的后继节点
|
2. 节点右子节点为空的指针域指向它的后继节点
|
||||||
3. 节点左子节点为空的指针域指向它的前驱节点
|
3. 节点左子节点为空的指针域指向它的前驱节点
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/中序遍历.png)
|
![](https://lychee.inksoul.top/uploads/original/b1/b9/460dbe13a61e073457079a07f73c.webp)
|
||||||
|
|
||||||
## 树和二叉树的应用
|
## 树和二叉树的应用
|
||||||
|
|
||||||
|
@ -413,7 +413,7 @@ void LevelOrderTraversal(BinTree BT)
|
||||||
* 构造
|
* 构造
|
||||||
* 每次把队列中值最小的合并,合并后的值加入队列中再继续比较
|
* 每次把队列中值最小的合并,合并后的值加入队列中再继续比较
|
||||||
* 例题
|
* 例题
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/哈夫曼树例题.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/53/cd/9fb7bcaf2a7bf6a97f0bd5228325.webp)
|
||||||
|
|
||||||
### 哈夫曼编码
|
### 哈夫曼编码
|
||||||
|
|
||||||
|
@ -428,9 +428,9 @@ void LevelOrderTraversal(BinTree BT)
|
||||||
* 01 110 10 01 1111 00 00 10 01 110 10 01 111 00 00 10 11101 10 1110
|
* 01 110 10 01 1111 00 00 10 01 110 10 01 111 00 00 10 11101 10 1110
|
||||||
* 最终只需50位内存,比ascii码表示节省了2/3空间
|
* 最终只需50位内存,比ascii码表示节省了2/3空间
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/哈夫曼树.jpg)
|
![](https://lychee.inksoul.top/uploads/original/e9/32/fd3d40ca4f7f068207be6b0fed5a.webp)
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/对应的哈夫曼编码.jpg)
|
![](https://lychee.inksoul.top/uploads/original/bc/57/95a890b5003e0144734dac9fd605.webp)
|
||||||
|
|
||||||
最终编码表
|
最终编码表
|
||||||
|
|
||||||
|
@ -444,7 +444,7 @@ void LevelOrderTraversal(BinTree BT)
|
||||||
* 并查集是一种简单的集合表示,支持3种操作
|
* 并查集是一种简单的集合表示,支持3种操作
|
||||||
* 并查集的存储结构是双亲表示法存储的树,主要是为了方便两个主要的操作
|
* 并查集的存储结构是双亲表示法存储的树,主要是为了方便两个主要的操作
|
||||||
* 例题
|
* 例题
|
||||||
* ![](../../images/408/《数据结构》树与二叉树/并查集例题.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/5f/8f/00eaa07d3886d137f10b4463dc7d.webp)
|
||||||
|
|
||||||
#### 并查集操作
|
#### 并查集操作
|
||||||
|
|
||||||
|
@ -461,7 +461,7 @@ void Initial(int S[])
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/并查集初始化.jpg)
|
![](https://lychee.inksoul.top/uploads/original/b5/6a/06925a22f7f1ed3f9f7e89e95dc4.webp)
|
||||||
|
|
||||||
##### Union(S,Root1,Root2)
|
##### Union(S,Root1,Root2)
|
||||||
|
|
||||||
|
@ -476,7 +476,7 @@ void Union(int S[],int Root1,int Root2)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/并查集表示方法.jpg)
|
![](https://lychee.inksoul.top/uploads/original/40/71/d80b17f82c702036bd674d8d08c7.webp)
|
||||||
|
|
||||||
##### Find(S,x)
|
##### Find(S,x)
|
||||||
|
|
||||||
|
@ -491,4 +491,4 @@ int Find(int S[],int x)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
![](../../images/408/《数据结构》树与二叉树/用树表示并查集.jpg)
|
![](https://lychee.inksoul.top/uploads/original/80/2c/5392c8def7250529f38325db1581.webp)
|
||||||
|
|
|
@ -104,7 +104,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
### 控制器结构和功能
|
### 控制器结构和功能
|
||||||
|
|
||||||
* 结构
|
* 结构
|
||||||
* ![](../../images/408/《计组》中央处理器/控制器结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/e2/29/0047ac3cdf7f6e9e1b8f83e3f2c5.webp)
|
||||||
* 连接关系
|
* 连接关系
|
||||||
* 运算器
|
* 运算器
|
||||||
* 运算器部件通过数据总线与内存储器、输入设备和输出设备传送数据
|
* 运算器部件通过数据总线与内存储器、输入设备和输出设备传送数据
|
||||||
|
@ -134,7 +134,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 时序系统产生的机器周期信号和节拍信号
|
* 时序系统产生的机器周期信号和节拍信号
|
||||||
* 来自执行单元的反馈信号,即标志
|
* 来自执行单元的反馈信号,即标志
|
||||||
* 微操作控制信号的形成主要与指令译码信号和时钟信号有关
|
* 微操作控制信号的形成主要与指令译码信号和时钟信号有关
|
||||||
* ![](../../images/408/《计组》中央处理器/带指令译码器和节拍输入的控制单元.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/ec/1e/29de8afec66c9c964b7562f59ed7.webp)
|
||||||
* 时序系统及微操作
|
* 时序系统及微操作
|
||||||
* 时钟周期:用时钟信号控制节拍发生器,可产生节拍,每个节拍的宽度正好对应一个时钟周期
|
* 时钟周期:用时钟信号控制节拍发生器,可产生节拍,每个节拍的宽度正好对应一个时钟周期
|
||||||
* 机器周期:视为所有指令执行过程中的一个基准时间
|
* 机器周期:视为所有指令执行过程中的一个基准时间
|
||||||
|
@ -215,7 +215,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 用于产生初始微地址和后继微地址,以保证微指令的连续执行
|
* 用于产生初始微地址和后继微地址,以保证微指令的连续执行
|
||||||
* 微地址寄存器
|
* 微地址寄存器
|
||||||
* 接收微地址形成部件送来的微地址,为在CM中读取微指令做准备
|
* 接收微地址形成部件送来的微地址,为在CM中读取微指令做准备
|
||||||
* ![](../../images/408/《计组》中央处理器/微程序控制器结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/06/5b/a200b1e6727af3f3fe896c15be1d.webp)
|
||||||
* 工作过程
|
* 工作过程
|
||||||
* 执行取微指令公共操作
|
* 执行取微指令公共操作
|
||||||
* 由机器指令的操作码字段通过微地址形成部件产生该及其指令所对应的微程序的入口地址,并送入CMAR
|
* 由机器指令的操作码字段通过微地址形成部件产生该及其指令所对应的微程序的入口地址,并送入CMAR
|
||||||
|
@ -356,7 +356,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 主存$\rightarrow$数据总线MDR$\rightarrow$IR(存放指令)
|
* 主存$\rightarrow$数据总线MDR$\rightarrow$IR(存放指令)
|
||||||
* CU发出控制信号$\rightarrow$PC内容加1
|
* CU发出控制信号$\rightarrow$PC内容加1
|
||||||
* 流程图
|
* 流程图
|
||||||
* ![](../../images/408/《计组》中央处理器/取指周期的数据流.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/b0/e6/709eb07d5caa687b6db89400771a.webp)
|
||||||
* 间址周期
|
* 间址周期
|
||||||
* 取操作数的有效地址
|
* 取操作数的有效地址
|
||||||
* 数据流向
|
* 数据流向
|
||||||
|
@ -366,7 +366,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 主存$\rightarrow$数据总线$\rightarrow$MDR(存放有限地址)
|
* 主存$\rightarrow$数据总线$\rightarrow$MDR(存放有限地址)
|
||||||
* Ad(IR)表示取出IR中存放点饿指令字的地址字段
|
* Ad(IR)表示取出IR中存放点饿指令字的地址字段
|
||||||
* 流程图
|
* 流程图
|
||||||
* ![](../../images/408/《计组》中央处理器/一次间址周期的数据流.png)
|
* ![](https://lychee.inksoul.top/uploads/original/26/69/42d67ce529c586442840d57790a9.webp)
|
||||||
* 执行周期
|
* 执行周期
|
||||||
* 取操作数,并根据IR中的指令字的操作码通过ALU操作产生执行结果
|
* 取操作数,并根据IR中的指令字的操作码通过ALU操作产生执行结果
|
||||||
* 无统一的数据流向
|
* 无统一的数据流向
|
||||||
|
@ -379,7 +379,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* PC$\rightarrow$MDR$\rightarrow$数据总线$\rightarrow$主存(程序断电存入主存)
|
* PC$\rightarrow$MDR$\rightarrow$数据总线$\rightarrow$主存(程序断电存入主存)
|
||||||
* CU(中断服务程序的入口)$\rightarrow$PC
|
* CU(中断服务程序的入口)$\rightarrow$PC
|
||||||
* 流程图
|
* 流程图
|
||||||
* ![](../../images/408/《计组》中央处理器/中断周期的数据流.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/8a/12/2b8f4412214c7566634c897b2cf2.webp)
|
||||||
|
|
||||||
### 指令的执行方案
|
### 指令的执行方案
|
||||||
|
|
||||||
|
@ -448,13 +448,13 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 性能高
|
* 性能高
|
||||||
* 基本不存在数据冲突
|
* 基本不存在数据冲突
|
||||||
* 示例图
|
* 示例图
|
||||||
* ![](../../images/408/《计组》中央处理器/CPU内部总线的数据通路和控制信号.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/86/57/577da23cb27b797c350f427a2e52.webp)
|
||||||
* in表示该部件的允许输入控制信号,OUT表示该部件的允许输出控制信号
|
* in表示该部件的允许输入控制信号,OUT表示该部件的允许输出控制信号
|
||||||
* ALU只能有一个输入端与总线相连,另一个输入端要通过暂存器与总线相连
|
* ALU只能有一个输入端与总线相连,另一个输入端要通过暂存器与总线相连
|
||||||
|
|
||||||
### 数据传输举例
|
### 数据传输举例
|
||||||
|
|
||||||
![](../../images/408/《计组》中央处理器/CPU内部总线的数据通路和控制信号.jpg)
|
![](https://lychee.inksoul.top/uploads/original/86/57/577da23cb27b797c350f427a2e52.webp)
|
||||||
|
|
||||||
* 寄存器间的数据传输
|
* 寄存器间的数据传输
|
||||||
* 寄存器之间的数据传送可以通过CPU内部总线完成
|
* 寄存器之间的数据传送可以通过CPU内部总线完成
|
||||||
|
@ -676,7 +676,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 设一条指令有3条流水段,每段平均时间为t,度为4,单流水线处理机执行20条指令的时间 = $3t+\frac{20-4}{4}t$,度为4说明是超标量流水线处理机,一次可以发生4条指令
|
* 设一条指令有3条流水段,每段平均时间为t,度为4,单流水线处理机执行20条指令的时间 = $3t+\frac{20-4}{4}t$,度为4说明是超标量流水线处理机,一次可以发生4条指令
|
||||||
* 流水线吞吐量计算
|
* 流水线吞吐量计算
|
||||||
* 吞吐量 = $\frac{指令条数}{流水线执行时间}$
|
* 吞吐量 = $\frac{指令条数}{流水线执行时间}$
|
||||||
* ![](../../images/408/《计组》中央处理器/流水线吞吐量计算.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/da/84/2dd85a66706b6d6d43640cd6a1f6.webp)
|
||||||
|
|
||||||
|
|
||||||
### 流水线的基本概念
|
### 流水线的基本概念
|
||||||
|
@ -707,7 +707,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 数据和指令在存储器中对齐存放,有利于减少访存次数,使所需数据在一个流水段内就可以从存储器中找到
|
* 数据和指令在存储器中对齐存放,有利于减少访存次数,使所需数据在一个流水段内就可以从存储器中找到
|
||||||
* 流水线的表示方法
|
* 流水线的表示方法
|
||||||
* 采用时空图描述流水线的执行情况
|
* 采用时空图描述流水线的执行情况
|
||||||
* ![](../../images/408/《计组》中央处理器/一个5段流水线数据通路.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/fa/9b/3e5b56ff0a13351f3e00e5fb2c6b.webp)
|
||||||
|
|
||||||
### 流水线的性能指标
|
### 流水线的性能指标
|
||||||
|
|
||||||
|
@ -725,7 +725,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
### 流水线的分类
|
### 流水线的分类
|
||||||
|
|
||||||
* 超标量流水线技术
|
* 超标量流水线技术
|
||||||
* ![](../../images/408/《计组》中央处理器/超标量水线技术.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/80/7c/e37801461f94c62dd37093265931.webp)
|
||||||
* 特点
|
* 特点
|
||||||
* 一个时钟周期内一条流水线可执行一条以上的指令
|
* 一个时钟周期内一条流水线可执行一条以上的指令
|
||||||
* 不影响流水线功能段的处理时间
|
* 不影响流水线功能段的处理时间
|
||||||
|
@ -740,7 +740,7 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 静态流水线上下段连接方式固定
|
* 静态流水线上下段连接方式固定
|
||||||
* 超流水线技术
|
* 超流水线技术
|
||||||
* 提高主频来提高流水线性能
|
* 提高主频来提高流水线性能
|
||||||
* ![](../../images/408/《计组》中央处理器/超流水线技术.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/6a/96/f83448337822648631191559018b.webp)
|
||||||
* 特点
|
* 特点
|
||||||
* 流水线划分的段数越多,流水寄存器的开销越大
|
* 流水线划分的段数越多,流水寄存器的开销越大
|
||||||
|
|
||||||
|
@ -752,9 +752,9 @@ date: 2023-07-20T09:56:49+08:00
|
||||||
* 包括数据通路上流经的部件(如PC,ALU,通用寄存器,状态寄存器,异常和中断处理逻辑)
|
* 包括数据通路上流经的部件(如PC,ALU,通用寄存器,状态寄存器,异常和中断处理逻辑)
|
||||||
* 数据通路由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号
|
* 数据通路由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号
|
||||||
* 数据通路不包含生成控制信号的控制部件
|
* 数据通路不包含生成控制信号的控制部件
|
||||||
* ![](../../images/408/《计组》中央处理器/一个5段流水线数据通路.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/fa/9b/3e5b56ff0a13351f3e00e5fb2c6b.webp)
|
||||||
* 流水线的控制信号
|
* 流水线的控制信号
|
||||||
* ![](../../images/408/《计组》中央处理器/控制信号分类.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/b7/58/e746009d44edbc9820f3a1c3443b.webp)
|
||||||
* 流水线寄存器保存的信息
|
* 流水线寄存器保存的信息
|
||||||
* 后续流水段要用到的所有数据信息
|
* 后续流水段要用到的所有数据信息
|
||||||
* 包括PC+4、指令、立即数、目的寄存器、ALU运算结果、标志信息等
|
* 包括PC+4、指令、立即数、目的寄存器、ALU运算结果、标志信息等
|
||||||
|
|
|
@ -33,7 +33,7 @@ date: 2023-07-23T11:15:49+08:00
|
||||||
|
|
||||||
## 历年真题
|
## 历年真题
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/历年真题1.jpg)
|
![](https://lychee.inksoul.top/uploads/original/7a/29/d8f56894075ce243bb9aa7ea8e9d.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ CPU用于B输入输出时间 = $40000\times500 = 2\times10^7$个时钟周期
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/历年真题2.jpg)
|
![](https://lychee.inksoul.top/uploads/original/4e/34/cb5da298695a6180b1483d960937.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ CPU的时间 = $1000\times(10+20\times4) = 90000$个时钟周期
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/历年真题3.jpg)
|
![](https://lychee.inksoul.top/uploads/original/5d/71/45abe02773839b6a7c9aa410c8df.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ DMA的开销 = $1000\times500 = 0.5M$个时钟周期
|
||||||
|
|
||||||
## 存储系统相关
|
## 存储系统相关
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/存储系统1.jpg)
|
![](https://lychee.inksoul.top/uploads/original/41/bf/9680b76c5d024aba55906577dce6.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ Cache初始为空,Cache行有效位为0,Cache访问缺失
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/存储系统2.jpg)
|
![](https://lychee.inksoul.top/uploads/original/48/c2/92e1c8254ecba7da53be36d3b316.webp)
|
||||||
|
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
@ -177,7 +177,7 @@ Cache缺失的额外开销 = 平均访存次数 $\times$Cache缺失率$\times$1
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/存储系统3.jpg)
|
![](https://lychee.inksoul.top/uploads/original/c7/4a/4033e07b038cc451a8e45e9076c4.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ TLB表位数增加2位
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/存储系统4.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/8f/9a/3c5a340bcc1fcd458a7ca9e73b34.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -246,7 +246,7 @@ Cache总容量 = $2^3\times2(20+1b+1b+1b+23B) = 4464b = 558B$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/存储系统5.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/ef/c1/dd8666682e3217cde4ea7c0e323b.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -293,7 +293,7 @@ TLB有2个组 = 高11位为TLB标记,最低1位为TLB组号
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/存储系统6.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/5f/d8/a0e39035ff24fd4061960d3fe575.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ cache组号 = 0 0000 0011 = 3
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/存储系统7.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/d3/be/2cd37fd1c733133f066a44ddc002.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ a[1][1]地址 = $320+256\times4+1\times4 = 1348 = 10101000100_B$=>Cache行号为
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/存储系统8.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/bc/7b/593b3ea3468b63cf98371c037bee.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -400,7 +400,7 @@ Cache有$\frac{64}{4} = 16组 $=>组号占4位
|
||||||
|
|
||||||
## 数据运算相关
|
## 数据运算相关
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/数据运算1.jpg)
|
![](https://lychee.inksoul.top/uploads/original/28/60/fc401fc522cd6815e196676cdf25.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -431,7 +431,7 @@ $ n = 1111 0110_{[补]} = 1000 1010_{[原]} = -10$
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/数据运算2.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/a1/d9/4b811e89101396be998aa13693f0.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -452,7 +452,7 @@ a最长,c最短
|
||||||
## 指令执行相关
|
## 指令执行相关
|
||||||
|
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/指令执行1.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/80/3b/1460a64b07483d2fa24a3e72f247.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -483,8 +483,7 @@ f(13) > $2^{32} - 1$,发生了溢出的错误结果,可将$f_1$的返回值
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/指令执行2.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/5a/40/38d9e1688a2a07424e53ecb89ec3.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
CISC,M的指令长短不一,不符合RISC的指令系统的特点
|
CISC,M的指令长短不一,不符合RISC的指令系统的特点
|
||||||
|
@ -500,7 +499,7 @@ CISC,M的指令长短不一,不符合RISC的指令系统的特点
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/指令执行3.jpg)
|
![](https://lychee.inksoul.top/uploads/original/05/37/247b27d2b5b5d97bf4c316128e25.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
@ -538,7 +537,7 @@ I、J型:2^6 -1 = 63种操作
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
![](../../images/408/《计组》大题/指令执行4.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/9c/be/ee6f324b18df0fbbeb28f1ad9432.webp)
|
||||||
|
|
||||||
(1)
|
(1)
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
|
|
||||||
## 多级层次的存储系统
|
## 多级层次的存储系统
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/多级层次的存储系统.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/54/45/706da3a0cb3cb885f67812d9c4f0.webp)
|
||||||
|
|
||||||
* 层次结构:Cache$\rightarrow$主存层和主存$\rightarrow$辅存
|
* 层次结构:Cache$\rightarrow$主存层和主存$\rightarrow$辅存
|
||||||
* 前者解决CPU和主存速度不一致的问题
|
* 前者解决CPU和主存速度不一致的问题
|
||||||
|
@ -124,21 +124,21 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 片选线CS:确定哪个存储芯片被选中,可用于容量扩充
|
* 片选线CS:确定哪个存储芯片被选中,可用于容量扩充
|
||||||
* 引脚最低数目 = 片选线(1) + 控制线(2,读RD写WR) + 数据线 + 地址线
|
* 引脚最低数目 = 片选线(1) + 控制线(2,读RD写WR) + 数据线 + 地址线
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/存储器芯片的组成.jpg)
|
![](https://lychee.inksoul.top/uploads/original/a7/b0/21da0b8d775c9c6bfc67f0ec73f2.webp)
|
||||||
|
|
||||||
* 主存储器的组成部分
|
* 主存储器的组成部分
|
||||||
* 数据线的宽度 = MDR的宽度 = 存储字长
|
* 数据线的宽度 = MDR的宽度 = 存储字长
|
||||||
* 地址线的宽度 = MAR的宽度 = 存储字数
|
* 地址线的宽度 = MAR的宽度 = 存储字数
|
||||||
* 如下图的总容量为$2^{36} \times 64位 = 2^{39}B$
|
* 如下图的总容量为$2^{36} \times 64位 = 2^{39}B$
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/主存储器的组成部分.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/9e/ef/bfee996f6e30bccd01fffecbfedf.webp)
|
||||||
|
|
||||||
### 存储体的组成元素
|
### 存储体的组成元素
|
||||||
|
|
||||||
* 存储体 + 存储单元 + 存储元
|
* 存储体 + 存储单元 + 存储元
|
||||||
* 总容量 = 存储字数 + 存储字长
|
* 总容量 = 存储字数 + 存储字长
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/存储体的组成元素.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/82/9c/9728f21d435b9938991774001cbe.webp)
|
||||||
|
|
||||||
|
|
||||||
### 寻址方式
|
### 寻址方式
|
||||||
|
@ -228,7 +228,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 刷新时需要选中一行,即占用片选线,地址线,地址译码器
|
* 刷新时需要选中一行,即占用片选线,地址线,地址译码器
|
||||||
* 同理,刷新操作之间也不能够并行
|
* 同理,刷新操作之间也不能够并行
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/集中刷新.png)
|
![](https://lychee.inksoul.top/uploads/original/df/8e/ee32bab51efe790a4594520d7ce3.webp)
|
||||||
|
|
||||||
#### 分散刷新
|
#### 分散刷新
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 不存在停止读/写的死时间,但存取周期变长,整个系统速度都降低了
|
* 不存在停止读/写的死时间,但存取周期变长,整个系统速度都降低了
|
||||||
* 分散刷新的刷新周期为128us,但其实无需如此频繁,产生了浪费
|
* 分散刷新的刷新周期为128us,但其实无需如此频繁,产生了浪费
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/分散刷新.png)
|
![](https://lychee.inksoul.top/uploads/original/1a/18/e392a9216fe3904c819219e7b7e4.webp)
|
||||||
|
|
||||||
#### 异步刷新
|
#### 异步刷新
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 是存储周期加长且降低系统速度的缺点,又不会出现集中刷新的访存死区问题
|
* 是存储周期加长且降低系统速度的缺点,又不会出现集中刷新的访存死区问题
|
||||||
* 根本上提高了整机的工作效率
|
* 根本上提高了整机的工作效率
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/分散刷新.png)
|
![](https://lychee.inksoul.top/uploads/original/f9/dd/d52c2c56ac875d8677b462bef95e.webp)
|
||||||
|
|
||||||
### 多模块存储器
|
### 多模块存储器
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 缺点
|
* 缺点
|
||||||
* 各模块串行工作,存储器的带宽受到了限制,并不能提高吞吐量
|
* 各模块串行工作,存储器的带宽受到了限制,并不能提高吞吐量
|
||||||
* 示意图
|
* 示意图
|
||||||
* ![](../../images/408/《计组》存储系统/高位交叉编址(顺序方式).jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/b4/1b/38fdaf15f70dcddb0c8e9687da30.webp)
|
||||||
* 低位交叉编址(交叉方式)
|
* 低位交叉编址(交叉方式)
|
||||||
* 特点
|
* 特点
|
||||||
* 连续地址分布在相邻的不同模块内,同一模块内的地址是不连续的
|
* 连续地址分布在相邻的不同模块内,同一模块内的地址是不连续的
|
||||||
|
@ -301,10 +301,10 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 判断发送访问冲突的规则
|
* 判断发送访问冲突的规则
|
||||||
* 给定的访存地址在相邻的四次访问中出现在同一个存储模块中
|
* 给定的访存地址在相邻的四次访问中出现在同一个存储模块中
|
||||||
* 示意图
|
* 示意图
|
||||||
* ![](../../images/408/《计组》存储系统/低位交叉编址(交叉方式).jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/42/95/d2782e5174fe2cb169d06148f6e5.webp)
|
||||||
* ![](../../images/408/《计组》存储系统/低位交叉编址流水线方式存取示意图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/3f/76/dbaac1858f2541ad603b0587cfce.webp)
|
||||||
* 计算带宽
|
* 计算带宽
|
||||||
* ![](../../images/408/《计组》存储系统/多体并行存储器-计算带宽.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/4e/52/ef9a11fe1423391dd488c925db7f.webp)
|
||||||
* 常考
|
* 常考
|
||||||
* 模块数=4,存储周期T,字长W,数据总线宽度即为W,总线传输周期r,连续存取n个字,分别求带宽
|
* 模块数=4,存储周期T,字长W,数据总线宽度即为W,总线传输周期r,连续存取n个字,分别求带宽
|
||||||
* 有m个存储体,存储周期为T,字长为W,每隔r时间启动下一个存储体,连续存取n个字,分别求带宽
|
* 有m个存储体,存储周期为T,字长为W,每隔r时间启动下一个存储体,连续存取n个字,分别求带宽
|
||||||
|
@ -325,7 +325,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 8K * 8位的存储器 = 共8片 8K*1位的RAM组成
|
* 8K * 8位的存储器 = 共8片 8K*1位的RAM组成
|
||||||
* 地址线并行,数据线一一接上
|
* 地址线并行,数据线一一接上
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》存储系统/位扩展法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/50/aa/b131aa264c69e2ab33d4b8148cc9.webp)
|
||||||
* 字扩展法-线选法实现
|
* 字扩展法-线选法实现
|
||||||
* 18k * 8位的存储器 = 2片8K*8位的存储器
|
* 18k * 8位的存储器 = 2片8K*8位的存储器
|
||||||
* 由片选信号来区分芯片的地址范围
|
* 由片选信号来区分芯片的地址范围
|
||||||
|
@ -333,7 +333,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 谁工作,数据线就接送谁的数据吗,即将CS设置为1
|
* 谁工作,数据线就接送谁的数据吗,即将CS设置为1
|
||||||
* 2位二进制时,只能利用01,,0
|
* 2位二进制时,只能利用01,,0
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》存储系统/字扩展法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/5f/97/b7f31830c11d771bc560cce983d8.webp)
|
||||||
* 字扩展法-译码片实现
|
* 字扩展法-译码片实现
|
||||||
* 有4块芯片,不需要4条线而只需要两条
|
* 有4块芯片,不需要4条线而只需要两条
|
||||||
* 2位二进制时,可以利用00,01,10,11
|
* 2位二进制时,可以利用00,01,10,11
|
||||||
|
@ -341,14 +341,14 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 一个二进制转十进制的物理元件,将三根地址线表示的二进制意义映射到右边十进制的选通线
|
* 一个二进制转十进制的物理元件,将三根地址线表示的二进制意义映射到右边十进制的选通线
|
||||||
* 结构图
|
* 结构图
|
||||||
* 地址线应为A0~A11共12位,译码线位A12和A13共2位
|
* 地址线应为A0~A11共12位,译码线位A12和A13共2位
|
||||||
* ![](../../images/408/《计组》存储系统/字扩展法【译码片实现】.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/fd/1e/abb85780b4abcc66ee509ebaa674.webp)
|
||||||
* 字位同时扩展法
|
* 字位同时扩展法
|
||||||
* 一块芯片只有4位,因此通过两片叠加实现位扩展
|
* 一块芯片只有4位,因此通过两片叠加实现位扩展
|
||||||
* 等价于实现了一个8位的存储芯片
|
* 等价于实现了一个8位的存储芯片
|
||||||
* 在通过译码片选的方式实现字拓展
|
* 在通过译码片选的方式实现字拓展
|
||||||
* 在不同的地址线中选择不同的芯片组合进行工作
|
* 在不同的地址线中选择不同的芯片组合进行工作
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》存储系统/字位同时扩展法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/6f/1b/7c998358a5f6903329720b595797.webp)
|
||||||
|
|
||||||
|
|
||||||
线选法和译码片选法的比较
|
线选法和译码片选法的比较
|
||||||
|
@ -361,7 +361,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
|
|
||||||
例题:求字扩展法的地址
|
例题:求字扩展法的地址
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/求字扩展法的地址例题.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/7a/20/653dec5f9815d11d8ff3fd1243b1.webp)
|
||||||
|
|
||||||
## 外部存储器
|
## 外部存储器
|
||||||
|
|
||||||
|
@ -379,7 +379,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 抗震性好
|
* 抗震性好
|
||||||
* 缺点
|
* 缺点
|
||||||
* 易磨损
|
* 易磨损
|
||||||
* ![](../../images/408/《计组》存储系统/SSD.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/1d/b6/7a7ddafff116360cb98dd0ef2ece.webp)
|
||||||
|
|
||||||
|
|
||||||
## 高速缓存存储器
|
## 高速缓存存储器
|
||||||
|
@ -413,7 +413,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 让Cache读取主存,CPU再从Cache中读取
|
* 让Cache读取主存,CPU再从Cache中读取
|
||||||
* CPU一边直接访问主存读取,一边让Cache读取主存,CPU再从Cache中读取
|
* CPU一边直接访问主存读取,一边让Cache读取主存,CPU再从Cache中读取
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/Cache的读写过程.jpg)
|
![](https://lychee.inksoul.top/uploads/original/d8/67/584fe27f2dde3699f74376015479.webp)
|
||||||
|
|
||||||
### Cache的性能分析
|
### Cache的性能分析
|
||||||
|
|
||||||
|
@ -441,7 +441,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 计算方法
|
* 计算方法
|
||||||
* 全相联中的t,c,b,m和直接映射中的都一样
|
* 全相联中的t,c,b,m和直接映射中的都一样
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》存储系统/全相联映射.png)
|
* ![](https://lychee.inksoul.top/uploads/original/9c/c3/c3e86984778bdd8c14279b6c6e5c.webp)
|
||||||
* 优点
|
* 优点
|
||||||
* 映射灵活
|
* 映射灵活
|
||||||
* 块冲突概率比较低
|
* 块冲突概率比较低
|
||||||
|
@ -456,7 +456,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 而且相邻块之间映射的位置也是相邻的
|
* 而且相邻块之间映射的位置也是相邻的
|
||||||
* 因为主存的容量肯定比cache大得多,其实相当于一轮轮映射过去
|
* 因为主存的容量肯定比cache大得多,其实相当于一轮轮映射过去
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》存储系统/直接映射.png)
|
* ![](https://lychee.inksoul.top/uploads/original/74/44/e4c2bb22d52149dba26ff72b7302.webp)
|
||||||
* 计算方法
|
* 计算方法
|
||||||
* 主存地址长度
|
* 主存地址长度
|
||||||
* 主存中存储单元个数为$2^{10}$,则主存地址长度就是10
|
* 主存中存储单元个数为$2^{10}$,则主存地址长度就是10
|
||||||
|
@ -504,7 +504,7 @@ date: 2023-07-17T20:39:45+08:00
|
||||||
* 先按号分组【如8块Cache分为四组】
|
* 先按号分组【如8块Cache分为四组】
|
||||||
* 组内再任意放【组内为全相联映射】
|
* 组内再任意放【组内为全相联映射】
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》存储系统/组相联映射.png)
|
* ![](https://lychee.inksoul.top/uploads/original/31/5e/62f3910c4c176264d245d07ad22d.webp)
|
||||||
* 计算过程
|
* 计算过程
|
||||||
* $2^c$
|
* $2^c$
|
||||||
* Cache总块数
|
* Cache总块数
|
||||||
|
@ -679,18 +679,19 @@ q可以认为是Cache分为1024块,每组是$2^r$ = 4块,就能分$\frac{102
|
||||||
* 先入先出算法(FIFO)
|
* 先入先出算法(FIFO)
|
||||||
* 由于最先进入的是0号cache
|
* 由于最先进入的是0号cache
|
||||||
* 因此0号cache替换掉,标记位标记为2
|
* 因此0号cache替换掉,标记位标记为2
|
||||||
* ![](../../images/408/《计组》存储系统/替换算法-FIFO.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/5c/50/45003c6b8b7ef4e5fb6402b27481.webp)
|
||||||
* 近期最少使用(LRU)算法
|
* 近期最少使用(LRU)算法
|
||||||
* 从后往前,先把前面使用过的划去
|
* 从后往前,先把前面使用过的划去
|
||||||
* 没有被划去的意味着用的比较少
|
* 没有被划去的意味着用的比较少
|
||||||
* 然后从前往后看
|
* 然后从前往后看
|
||||||
* 看第一块没有被划去的就决定替换它
|
* 看第一块没有被划去的就决定替换它
|
||||||
* ![](../../images/408/《计组》存储系统/替换算法-LRU.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/1f/d4/bf2df1da1ddb28f1b050d9030d14.webp)
|
||||||
* 最不经常使用(LFU)算法
|
* 最不经常使用(LFU)算法
|
||||||
* 统计使用次数
|
* 统计使用次数
|
||||||
* 4号块用了3次,6号块用了2次
|
* 4号块用了3次,6号块用了2次
|
||||||
* 其他几块均用了1次,需要更多判断依据
|
* 其他几块均用了1次,需要更多判断依据
|
||||||
* 最终替换掉cache第2块(12号)
|
* 最终替换掉cache第2块(12号)
|
||||||
|
* ![](https://lychee.inksoul.top/uploads/original/2e/d0/59ae6c1ed41c366d128e7fbe8e84.webp)
|
||||||
|
|
||||||
### 写入/更新策略
|
### 写入/更新策略
|
||||||
|
|
||||||
|
@ -703,23 +704,23 @@ q可以认为是Cache分为1024块,每组是$2^r$ = 4块,就能分$\frac{102
|
||||||
* 在写的时候CPU将数据通过数据总线橙色箭头方向运输
|
* 在写的时候CPU将数据通过数据总线橙色箭头方向运输
|
||||||
* 由于CPU写给cache的速度和写入主存的速度会差很多
|
* 由于CPU写给cache的速度和写入主存的速度会差很多
|
||||||
* 所以需要设计一个缓冲,先写入缓冲块中,再慢慢写入
|
* 所以需要设计一个缓冲,先写入缓冲块中,再慢慢写入
|
||||||
* ![](../../images/408/《计组》存储系统/全写法写直达法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/58/d5/e3167652af1ad1e174980fb5002c.webp)
|
||||||
* 回写法
|
* 回写法
|
||||||
* 在CPU执行写操作时,先按橙色线写入cache存储体中
|
* 在CPU执行写操作时,先按橙色线写入cache存储体中
|
||||||
* 此时并没有修改主存的内容,会在cache中设计一个脏位
|
* 此时并没有修改主存的内容,会在cache中设计一个脏位
|
||||||
* 当一块中的任何一个单元被修改时,脏位(修改位)被置1
|
* 当一块中的任何一个单元被修改时,脏位(修改位)被置1
|
||||||
* 需要替换掉该块时,如果修改位为1,则必须先把这一块写回到主存中,然后才能再调入新的块
|
* 需要替换掉该块时,如果修改位为1,则必须先把这一块写回到主存中,然后才能再调入新的块
|
||||||
* 如果修改位为0,则这一块不必写回主存,只要用新调入的块覆盖这一块即可
|
* 如果修改位为0,则这一块不必写回主存,只要用新调入的块覆盖这一块即可
|
||||||
* ![](../../images/408/《计组》存储系统/回写法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/df/b6/3096c51a6ff8495bc52a6a61f3e8.webp)
|
||||||
|
|
||||||
#### cache写没命中
|
#### cache写没命中
|
||||||
|
|
||||||
* 写分配法
|
* 写分配法
|
||||||
* 先将数据从内存中调入到cache中
|
* 先将数据从内存中调入到cache中
|
||||||
* 再按回写法修改cache
|
* 再按回写法修改cache
|
||||||
* ![](../../images/408/《计组》存储系统/写分配法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/82/6e/76b4deb9597a3669d0a6b2c2f5e1.webp)
|
||||||
* 非写分配法
|
* 非写分配法
|
||||||
* 直接去内存修改
|
* 直接去内存修改
|
||||||
* ![](../../images/408/《计组》存储系统/非写分配法.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/56/66/9f9ea169effbf60ce63277406d2a.webp)
|
||||||
|
|
||||||
![](../../images/408/《计组》存储系统/四种方法的搭配.jpg)
|
![](https://lychee.inksoul.top/uploads/original/5b/56/548945b560ccee2e393ae2ccb2b6.webp)
|
|
@ -81,7 +81,7 @@ date: 2023-07-22T10:06:23+08:00
|
||||||
* 组成
|
* 组成
|
||||||
* 系统总线
|
* 系统总线
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》总线/单总线结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/80/4f/1e5eaa91b90ebe0a0dfec34b855e.webp)
|
||||||
* 双总线结构
|
* 双总线结构
|
||||||
* 优点
|
* 优点
|
||||||
* 将低速IO设备从单总线上分离出来
|
* 将低速IO设备从单总线上分离出来
|
||||||
|
@ -91,7 +91,7 @@ date: 2023-07-22T10:06:23+08:00
|
||||||
* 组成
|
* 组成
|
||||||
* 主存总线+IO总线
|
* 主存总线+IO总线
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》总线/双总线结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/9a/53/a29a50b370d2c2830b6b01ac354d.webp)
|
||||||
* 三总线结构
|
* 三总线结构
|
||||||
* 优点
|
* 优点
|
||||||
* 提高了IO设备的性能
|
* 提高了IO设备的性能
|
||||||
|
@ -102,7 +102,7 @@ date: 2023-07-22T10:06:23+08:00
|
||||||
* 组成
|
* 组成
|
||||||
* IO总线+主存总线+DMA总线
|
* IO总线+主存总线+DMA总线
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》总线/三总线结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/5e/86/53affae69346dc4dca1d7c3c4a5c.webp)
|
||||||
|
|
||||||
## 总线性能标准
|
## 总线性能标准
|
||||||
|
|
||||||
|
@ -130,10 +130,10 @@ date: 2023-07-22T10:06:23+08:00
|
||||||
### 例题
|
### 例题
|
||||||
|
|
||||||
* 计算传输数据所要的时间
|
* 计算传输数据所要的时间
|
||||||
* ![](../../images/408/《计组》总线/计算传输数据所要的时间.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/30/a2/05031b363b94093acf58c905b8dd.webp)
|
||||||
* 计算数据传输率/总线带宽
|
* 计算数据传输率/总线带宽
|
||||||
* ![](../../images/408/《计组》总线/计算数据传输率.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/a3/47/dd6c84a2c0c233b3afa0bdfb56c4.webp)
|
||||||
* ![](../../images/408/《计组》总线/计算总线带宽.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/75/39/02416f6c5dbcc21a73767135136e.webp)
|
||||||
|
|
||||||
|
|
||||||
## 总线事务和定时
|
## 总线事务和定时
|
||||||
|
@ -196,3 +196,4 @@ date: 2023-07-22T10:06:23+08:00
|
||||||
* 全互锁方式
|
* 全互锁方式
|
||||||
* 主设备发请求$\rightarrow$需要等从设备的回答,才能撤销请求信号
|
* 主设备发请求$\rightarrow$需要等从设备的回答,才能撤销请求信号
|
||||||
* 从设备收到回答$\rightarrow$需要等到主设备的回答,才能撤销回答信号
|
* 从设备收到回答$\rightarrow$需要等到主设备的回答,才能撤销回答信号
|
||||||
|
* ![](https://lychee.inksoul.top/uploads/original/59/a0/e181379c843140b9ed863c0687b0.webp)
|
||||||
|
|
|
@ -57,12 +57,12 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
|
|
||||||
操作码和地址码分组存放
|
操作码和地址码分组存放
|
||||||
|
|
||||||
![](../../images/408/《计组》指令系统/操作码和地址码分组存放.jpg)
|
![](https://lychee.inksoul.top/uploads/original/7b/04/3d202b6c3f591fd222833d164114.webp)
|
||||||
|
|
||||||
|
|
||||||
操作码和地址码放在一起
|
操作码和地址码放在一起
|
||||||
|
|
||||||
![](../../images/408/《计组》指令系统/操作码和地址码放在一起.jpg)
|
![](https://lychee.inksoul.top/uploads/original/a4/86/cb6ba6c0e416373768fbe580516f.webp)
|
||||||
|
|
||||||
### 地址码
|
### 地址码
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 跳跃的地址分为绝对地址【标记符直接得到】和相对地址【相对当前指令地址的偏移量】
|
* 跳跃的地址分为绝对地址【标记符直接得到】和相对地址【相对当前指令地址的偏移量】
|
||||||
* 跳跃的结果是当前指令修改PC值,所以下一条指令仍然通过PC给出
|
* 跳跃的结果是当前指令修改PC值,所以下一条指令仍然通过PC给出
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/指令寻址的种类例图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/c4/e9/db2d252eb3cc7e389fa5b1a44ae7.webp)
|
||||||
|
|
||||||
|
|
||||||
### 数据寻址
|
### 数据寻址
|
||||||
|
@ -262,7 +262,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 隐地址不给出明显的操作数地址,而在指令中隐含操作数的地址
|
* 隐地址不给出明显的操作数地址,而在指令中隐含操作数的地址
|
||||||
* 可以简化地址结构,如零地址指令
|
* 可以简化地址结构,如零地址指令
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/隐含寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/d3/35/c869a9918c0d30eae07d8c53571c.webp)
|
||||||
* 立即寻址
|
* 立即寻址
|
||||||
* 有效地址
|
* 有效地址
|
||||||
* A就是操作数
|
* A就是操作数
|
||||||
|
@ -285,7 +285,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 特点
|
* 特点
|
||||||
* 直接寻址主要执行取指令访存1次,还有执行指令访存1次
|
* 直接寻址主要执行取指令访存1次,还有执行指令访存1次
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/直接寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/f8/d7/49d32a04207cc4c463ef21b6500b.webp)
|
||||||
* 间接寻址
|
* 间接寻址
|
||||||
* EA=(A)
|
* EA=(A)
|
||||||
* 定义
|
* 定义
|
||||||
|
@ -295,7 +295,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 特点
|
* 特点
|
||||||
* 与直接寻址相比:间接寻址执行取指令访存1次,还要执行指令访存2次
|
* 与直接寻址相比:间接寻址执行取指令访存1次,还要执行指令访存2次
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/间接寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/b0/db/b69e93e3dbcc6fb317210f0789a5.webp)
|
||||||
* 访问寄存器的寻址
|
* 访问寄存器的寻址
|
||||||
* 寄存器寻址
|
* 寄存器寻址
|
||||||
* $EA = R_i$
|
* $EA = R_i$
|
||||||
|
@ -307,7 +307,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 访问寄存器会比访问主存快得多
|
* 访问寄存器会比访问主存快得多
|
||||||
* CPU中寄存器不是很多,用很短的编码就可以指令寄存器,能有效地缩短地址段的位数
|
* CPU中寄存器不是很多,用很短的编码就可以指令寄存器,能有效地缩短地址段的位数
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/寄存器寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/57/e2/9f68e69cf8f9aa14c0c8bf848854.webp)
|
||||||
* 寄存器间接寻址
|
* 寄存器间接寻址
|
||||||
* $EA = (R_i)$
|
* $EA = (R_i)$
|
||||||
* 定义
|
* 定义
|
||||||
|
@ -319,7 +319,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 寄存器间接寻址主要执行指令访存1次
|
* 寄存器间接寻址主要执行指令访存1次
|
||||||
* 还有一次是寄存器执行指令访存1次
|
* 还有一次是寄存器执行指令访存1次
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/寄存器间接寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/eb/e3/99543e9129a9e1ccce1ca71fbaf3.webp)
|
||||||
* 转/偏移类寻址
|
* 转/偏移类寻址
|
||||||
* 基址寻址
|
* 基址寻址
|
||||||
* EA = (BR)+A
|
* EA = (BR)+A
|
||||||
|
@ -334,8 +334,8 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 原先只能寻址A的位数范围内的地址,有了基址寻址的方式
|
* 原先只能寻址A的位数范围内的地址,有了基址寻址的方式
|
||||||
* 可以通过加上一个基地址从而在更大范围的空间内设计程序
|
* 可以通过加上一个基地址从而在更大范围的空间内设计程序
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/BR基址寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/ed/05/83ad60a759fdb3bf0e4ca8a23fc0.webp)
|
||||||
* ![](../../images/408/《计组》指令系统/通用基址寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/93/62/d36a49e5190e7c0ee4492f09c705.webp)
|
||||||
* 变址寻址
|
* 变址寻址
|
||||||
* EA = (IX) + A
|
* EA = (IX) + A
|
||||||
* 定义
|
* 定义
|
||||||
|
@ -345,7 +345,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 变址寻址常用在一些有规律的操作上,比如遍历字符串,遍历数组
|
* 变址寻址常用在一些有规律的操作上,比如遍历字符串,遍历数组
|
||||||
* 1条指令实现了基址寻址多条的功能
|
* 1条指令实现了基址寻址多条的功能
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/变址寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/df/3b/2d62ca25d806e09bf34457d7b5a5.webp)
|
||||||
* 相对寻址
|
* 相对寻址
|
||||||
* EA = (PC)+A
|
* EA = (PC)+A
|
||||||
* 定义
|
* 定义
|
||||||
|
@ -356,7 +356,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 相对寻址有利于程序浮动,广泛用于转移指令和多道程序设计中
|
* 相对寻址有利于程序浮动,广泛用于转移指令和多道程序设计中
|
||||||
* 所以相对寻址的相对地址是以下条指令在内存中首地址为基准位置的偏移量
|
* 所以相对寻址的相对地址是以下条指令在内存中首地址为基准位置的偏移量
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/相对寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/e3/99/129726c6e72c5c818edc57236e41.webp)
|
||||||
* 堆栈寻址
|
* 堆栈寻址
|
||||||
* 定义
|
* 定义
|
||||||
* 把操作数存放在堆栈中,隐含的使用堆栈指针(SP)作为操作数地址
|
* 把操作数存放在堆栈中,隐含的使用堆栈指针(SP)作为操作数地址
|
||||||
|
@ -365,7 +365,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* 入栈,先压入数据,再修改指针
|
* 入栈,先压入数据,再修改指针
|
||||||
* 出栈,先修改指针,再弹出数据
|
* 出栈,先修改指针,再弹出数据
|
||||||
* 例图
|
* 例图
|
||||||
* ![](../../images/408/《计组》指令系统/堆栈寻址.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/e3/41/2c5df80422a006b58485bf30a0d1.webp)
|
||||||
* 常考点
|
* 常考点
|
||||||
* 速度方面
|
* 速度方面
|
||||||
* $立即寻址\rightarrow寄存器寻址\rightarrow直接寻址\rightarrow寄存器间接寻址\rightarrow间接寻址$
|
* $立即寻址\rightarrow寄存器寻址\rightarrow直接寻址\rightarrow寄存器间接寻址\rightarrow间接寻址$
|
||||||
|
@ -381,7 +381,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
|
|
||||||
### 选择结构语句的机器级表示
|
### 选择结构语句的机器级表示
|
||||||
|
|
||||||
![](../../images/408/《计组》指令系统/过程调用示意图.png)
|
![](https://lychee.inksoul.top/uploads/original/1c/ea/21845e5bf1b07eacd48ffc242145.webp)
|
||||||
|
|
||||||
参数列表中越后面的参数越早压入,压完参数之后就是返回地址,以及旧的 ebp 数值
|
参数列表中越后面的参数越早压入,压完参数之后就是返回地址,以及旧的 ebp 数值
|
||||||
|
|
||||||
|
@ -429,7 +429,7 @@ date: 2023-07-18T22:48:35+08:00
|
||||||
* g(greater)、l(less)、e(equal)s(sign)
|
* g(greater)、l(less)、e(equal)s(sign)
|
||||||
|
|
||||||
|
|
||||||
![](../../images/408/《计组》指令系统/跳转指令.png)
|
![](https://lychee.inksoul.top/uploads/original/68/f9/fff167b8af8f0a8f5b37d805aba8.webp)
|
||||||
|
|
||||||
* 举例
|
* 举例
|
||||||
* 无符号的情况下 jb 就是 B 大,jae 就是 A 大于等于 B。
|
* 无符号的情况下 jb 就是 B 大,jae 就是 A 大于等于 B。
|
||||||
|
@ -457,12 +457,12 @@ ret
|
||||||
|
|
||||||
Switch 语法举例
|
Switch 语法举例
|
||||||
|
|
||||||
![](../../images/408/《计组》指令系统/switch指令为例.png)
|
![](https://lychee.inksoul.top/uploads/original/3e/8c/3db7b178f957a1e0dd4ba49b835c.webp)
|
||||||
|
|
||||||
|
|
||||||
### 循环结构语句的机器级表示
|
### 循环结构语句的机器级表示
|
||||||
|
|
||||||
![](../../images/408/《计组》指令系统/循环结构机器级表示.png)
|
![](https://lychee.inksoul.top/uploads/original/0e/e7/d1795418469588d0fac8902b6216.webp)
|
||||||
### 过程(函数)调用对应的机器级表示
|
### 过程(函数)调用对应的机器级表示
|
||||||
|
|
||||||
* 被保存的寄存器)函数P将要使用的“被调用者保存寄存器”通过push保存在函数的栈帧中。
|
* 被保存的寄存器)函数P将要使用的“被调用者保存寄存器”通过push保存在函数的栈帧中。
|
||||||
|
|
|
@ -24,11 +24,11 @@ date: 2023-07-07T16:48:40+08:00
|
||||||
* 范围:0~9 + ABCDEF
|
* 范围:0~9 + ABCDEF
|
||||||
* 数制的相互转换
|
* 数制的相互转换
|
||||||
* 二进制$\rightarrow$八进制或十六进制
|
* 二进制$\rightarrow$八进制或十六进制
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/二进制转八或十六.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/9e/66/9cf5681c038672d3138480f3f95a.webp)
|
||||||
* 任意进制$\rightarrow$十进制
|
* 任意进制$\rightarrow$十进制
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/任意进制转二.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/41/8e/46332e04964104209937018b54f1.webp)
|
||||||
* 十进制$\rightarrow$任意进制
|
* 十进制$\rightarrow$任意进制
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/十进制转任意.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/84/f8/91b9a656046bb99e80fd347e35e5.webp)
|
||||||
|
|
||||||
## 无符号数
|
## 无符号数
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ date: 2023-07-07T16:48:40+08:00
|
||||||
* 和表达式 = $A_i\bigoplus B_i \bigoplus C_i$
|
* 和表达式 = $A_i\bigoplus B_i \bigoplus C_i$
|
||||||
* 进位表达式$C_i = A_iB_i + (A_i \bigoplus B_i) C_{i-1}$
|
* 进位表达式$C_i = A_iB_i + (A_i \bigoplus B_i) C_{i-1}$
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/一位全加器结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/90/17/dbfc767d4bff362e71022287f928.webp)
|
||||||
|
|
||||||
### 串行进位加法器
|
### 串行进位加法器
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ date: 2023-07-07T16:48:40+08:00
|
||||||
* 串行进位加法器:把n个FA相连得到的n位加法器
|
* 串行进位加法器:把n个FA相连得到的n位加法器
|
||||||
* 每级进位直接依赖于前一级的进位,进位信号逐级形成
|
* 每级进位直接依赖于前一级的进位,进位信号逐级形成
|
||||||
* 最长运算时间由进位信号的传递时间决定
|
* 最长运算时间由进位信号的传递时间决定
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/串行进位加法器.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/12/a0/353117a5bbc6964c23e5e8b0c19b.webp)
|
||||||
|
|
||||||
### 并行进位加法器
|
### 并行进位加法器
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ date: 2023-07-07T16:48:40+08:00
|
||||||
* CF:进位/借位标志,$C_{in} = 0$时,$CF = C_{out};C_{in} = 1$时,$CF = C_{out}$取反
|
* CF:进位/借位标志,$C_{in} = 0$时,$CF = C_{out};C_{in} = 1$时,$CF = C_{out}$取反
|
||||||
* A - B < 0 时,CF = 1;溢出时 OF = 1
|
* A - B < 0 时,CF = 1;溢出时 OF = 1
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/带标志加法器.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/18/41/6f5c0c1c12919ad4ccd431f2b30b.webp)
|
||||||
|
|
||||||
### 算术逻辑单元ALU
|
### 算术逻辑单元ALU
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ date: 2023-07-07T16:48:40+08:00
|
||||||
* 在ALUop的控制下,由一个多路选择器MUX选择输出某种操作结果
|
* 在ALUop的控制下,由一个多路选择器MUX选择输出某种操作结果
|
||||||
* MUX是多路选择开关,它从多个输入信号中选择一个送到输出端
|
* MUX是多路选择开关,它从多个输入信号中选择一个送到输出端
|
||||||
* 结构图
|
* 结构图
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/算术逻辑单元ALU.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/ad/c9/5db24d35207e4db92d01115b4383.webp)
|
||||||
|
|
||||||
## C语言中的整数类型与类型转换
|
## C语言中的整数类型与类型转换
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ int main(){
|
||||||
* double 占8字节 = 64位
|
* double 占8字节 = 64位
|
||||||
* 大端方式:按MSB到LSB的顺序存储数据
|
* 大端方式:按MSB到LSB的顺序存储数据
|
||||||
* 小端方式:按LSB到MSB的顺序存储数据
|
* 小端方式:按LSB到MSB的顺序存储数据
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/数据的大端方式和小端方式存储.png)
|
* ![](https://lychee.inksoul.top/uploads/original/a6/2e/116285bae695ee3fa2cc03ce8349.webp)
|
||||||
* 如小端方式中,按字节编制
|
* 如小端方式中,按字节编制
|
||||||
* 设int变量i的地址为0800H,i的机器数为01234567H,则地址0800H表示的内容为67H
|
* 设int变量i的地址为0800H,i的机器数为01234567H,则地址0800H表示的内容为67H
|
||||||
|
|
||||||
|
@ -278,9 +278,9 @@ int main(){
|
||||||
* 存储字长为32位时,半字是2的整数倍,字地址是4的整数倍,字节大小为8位
|
* 存储字长为32位时,半字是2的整数倍,字地址是4的整数倍,字节大小为8位
|
||||||
* 边界对齐虽然浪费了一些存储空间,但是可以提高取指令和取数的速度
|
* 边界对齐虽然浪费了一些存储空间,但是可以提高取指令和取数的速度
|
||||||
* 边界不对齐可以充分利用存储空间,但是效率低
|
* 边界不对齐可以充分利用存储空间,但是效率低
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/数据按边界对齐方式存储.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/ef/8b/b233d01c35ed39742b310cfa75e0.webp)
|
||||||
* 例题
|
* 例题
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/数据存储和排列例题.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/a2/52/e1bc2046abc8bc1a4262f8e38f60.webp)
|
||||||
|
|
||||||
|
|
||||||
## 定点数
|
## 定点数
|
||||||
|
@ -296,7 +296,7 @@ int main(){
|
||||||
* 符号位和数值位一起参与运算
|
* 符号位和数值位一起参与运算
|
||||||
* 运算结果的高位被丢弃
|
* 运算结果的高位被丢弃
|
||||||
* 实例
|
* 实例
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/补码加减法运算实例.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/23/56/1a94dbe41abf0445bf04d15c82b8.webp)
|
||||||
* 运算电路信号解释
|
* 运算电路信号解释
|
||||||
* |记忆方法|解释|是否有意义|
|
* |记忆方法|解释|是否有意义|
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
|
@ -336,9 +336,9 @@ int main(){
|
||||||
* 积和被乘数采用双符号位
|
* 积和被乘数采用双符号位
|
||||||
* 最多进行n次加法运算,n次移位
|
* 最多进行n次加法运算,n次移位
|
||||||
* 计算过程
|
* 计算过程
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/原码一位乘法计算过程.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/98/6a/76dd46c4799d46a3627b1d964981.webp)
|
||||||
* 电路图
|
* 电路图
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/原码一位乘法流程图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/42/c7/5dfd153c7b89f8c0806f353cc3a6.webp)
|
||||||
* 补码一位乘法
|
* 补码一位乘法
|
||||||
* 定义和概念
|
* 定义和概念
|
||||||
* 一种有符号数的乘法
|
* 一种有符号数的乘法
|
||||||
|
@ -351,9 +351,9 @@ int main(){
|
||||||
|1|0|部分积加$[-a]_补$,右移一位|
|
|1|0|部分积加$[-a]_补$,右移一位|
|
||||||
|1|1|部分积右移一位|
|
|1|1|部分积右移一位|
|
||||||
* 计算过程
|
* 计算过程
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/补码一位乘法计算过程.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/07/6f/7bb2b85e44f1d2b4875869f7cb5a.webp)
|
||||||
* 电路图
|
* 电路图
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/补码一位乘法电路图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/27/1b/979ac1e4025438462e3e23c06b67.webp)
|
||||||
|
|
||||||
|
|
||||||
### 除法
|
### 除法
|
||||||
|
@ -369,9 +369,9 @@ int main(){
|
||||||
* 该方法商符和商值分开进行
|
* 该方法商符和商值分开进行
|
||||||
* 商符由两个操作数的符号位异或形成
|
* 商符由两个操作数的符号位异或形成
|
||||||
* 计算过程
|
* 计算过程
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/原码除法计算过程.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/28/a3/19da076d726ac42e7739920bd72d.webp)
|
||||||
* 电路图
|
* 电路图
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/原码除法运算电路图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/72/22/6037401a25e098aee68e327354cc.webp)
|
||||||
* 补码除法运算(加减交替法)
|
* 补码除法运算(加减交替法)
|
||||||
* 该方法符号位和数值位一起参与运算,商符自然形成
|
* 该方法符号位和数值位一起参与运算,商符自然形成
|
||||||
* 根据被除数和除数的符号决定加法还是减法
|
* 根据被除数和除数的符号决定加法还是减法
|
||||||
|
@ -380,9 +380,9 @@ int main(){
|
||||||
* 异号上商0
|
* 异号上商0
|
||||||
* 最后一步商置1
|
* 最后一步商置1
|
||||||
* 计算过程
|
* 计算过程
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/补码除法运算计算过程.png)
|
* ![](https://lychee.inksoul.top/uploads/medium/41/1f/3440bac11a4224ff0d4f9c63e255.webp)
|
||||||
* 电路图
|
* 电路图
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/补码除法运算电路图.png)
|
* ![](https://lychee.inksoul.top/uploads/original/96/3f/521ec34ccd347049077b17280cf4.webp)
|
||||||
|
|
||||||
|
|
||||||
## 移位运算
|
## 移位运算
|
||||||
|
@ -423,7 +423,7 @@ int main(){
|
||||||
* d中,数据位连同CF一起左移
|
* d中,数据位连同CF一起左移
|
||||||
* 数据的最高位移入CF
|
* 数据的最高位移入CF
|
||||||
* CF则移入数据的最低位
|
* CF则移入数据的最低位
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/循环移位流程.png)
|
* ![](https://lychee.inksoul.top/uploads/original/ad/39/c2f22aaa4113231e2be59b8d5bc3.webp)
|
||||||
|
|
||||||
|
|
||||||
## 浮点数
|
## 浮点数
|
||||||
|
@ -452,12 +452,12 @@ int main(){
|
||||||
* 基数为2时,将小数点前面的值固定为1,基数为4时,尾数的最高两位不全为0
|
* 基数为2时,将小数点前面的值固定为1,基数为4时,尾数的最高两位不全为0
|
||||||
* 指数(阶码)部分
|
* 指数(阶码)部分
|
||||||
* 阶码的位数反映浮点数的表示范围
|
* 阶码的位数反映浮点数的表示范围
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/浮点数结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/d0/85/4efe201fa4183c794a62fa055506.webp)
|
||||||
|
|
||||||
|
|
||||||
### 表示范围
|
### 表示范围
|
||||||
|
|
||||||
![](../../images/408/《计组》数据的表示和运算/浮点数范围.jpg)
|
![](https://lychee.inksoul.top/uploads/original/7e/1a/67374c9d3c254ccd450b656eccd3.webp)
|
||||||
|
|
||||||
* 【正上溢】:大于最大正数
|
* 【正上溢】:大于最大正数
|
||||||
* 【负上溢】:小于绝对值最大负数
|
* 【负上溢】:小于绝对值最大负数
|
||||||
|
@ -479,7 +479,7 @@ int main(){
|
||||||
* 规格化:规定尾数的最高数位必须是一个有效值(1)
|
* 规格化:规定尾数的最高数位必须是一个有效值(1)
|
||||||
* 目的
|
* 目的
|
||||||
* 提高数据的表示精度
|
* 提高数据的表示精度
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/浮点数规格化.png)
|
* ![](https://lychee.inksoul.top/uploads/original/40/b0/92d04218a669adc1825a1afdcca2.webp)
|
||||||
* 左规
|
* 左规
|
||||||
* 当浮点数运算的结果为非规格化时要进行规格化处理
|
* 当浮点数运算的结果为非规格化时要进行规格化处理
|
||||||
* 将尾数算术左移一位,阶码减一
|
* 将尾数算术左移一位,阶码减一
|
||||||
|
@ -522,7 +522,7 @@ int main(){
|
||||||
### IEEE754标准浮点数范围
|
### IEEE754标准浮点数范围
|
||||||
|
|
||||||
* IEEE754中尾数使用原码表示,阶码用移码表示
|
* IEEE754中尾数使用原码表示,阶码用移码表示
|
||||||
* ![](../../images/408/《计组》数据的表示和运算/IEE754浮点数结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/e2/40/8bc6f40ea4df6c369020b3a31643.webp)
|
||||||
|
|
||||||
|以正数为例|最小值|最大值|
|
|以正数为例|最小值|最大值|
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|
@ -538,11 +538,11 @@ int main(){
|
||||||
|
|
||||||
#### 浮点数转十进制
|
#### 浮点数转十进制
|
||||||
|
|
||||||
![](../../images/408/《计组》数据的表示和运算/将浮点数转为十进制例题.jpg)
|
![](https://lychee.inksoul.top/uploads/medium/29/ad/fb3b42539e8279facd2aa4ad9598.webp)
|
||||||
|
|
||||||
#### 十进制转浮点数
|
#### 十进制转浮点数
|
||||||
|
|
||||||
![](../../images/408/《计组》数据的表示和运算/将十进制转为浮点数例题.png)
|
![](https://lychee.inksoul.top/uploads/medium/c8/be/453bd4a5312a4ece1308291535ae.webp)
|
||||||
|
|
||||||
|
|
||||||
## 浮点数和定点数区别
|
## 浮点数和定点数区别
|
||||||
|
|
|
@ -61,7 +61,7 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
## 计算机应用层次结构
|
## 计算机应用层次结构
|
||||||
|
|
||||||
* 层次结构图
|
* 层次结构图
|
||||||
* ![](../../images/408/《计组》计算机系统概述/计算机应用层次结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/0b/f1/3f2d4d2fd5777c32f650214d86a4.webp)
|
||||||
* 三种程序转换
|
* 三种程序转换
|
||||||
* 高级语言$\underrightarrow{编译}$汇编语言$\underrightarrow{汇编}$机器语言
|
* 高级语言$\underrightarrow{编译}$汇编语言$\underrightarrow{汇编}$机器语言
|
||||||
* 高级语言$\underrightarrow{解释}$机器语言
|
* 高级语言$\underrightarrow{解释}$机器语言
|
||||||
|
@ -89,7 +89,7 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
### 冯诺依曼结构
|
### 冯诺依曼结构
|
||||||
|
|
||||||
* 组成示例图
|
* 组成示例图
|
||||||
* ![](../../images/408/《计组》计算机系统概述/冯诺依曼机的示例图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/a5/a7/80c328149d2753944b4c7c7c3b86.webp)
|
||||||
* 特点
|
* 特点
|
||||||
* 计算机由五大部件组成
|
* 计算机由五大部件组成
|
||||||
* 输入设备
|
* 输入设备
|
||||||
|
@ -111,7 +111,7 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
### 现代计算机结构
|
### 现代计算机结构
|
||||||
|
|
||||||
* 示例图
|
* 示例图
|
||||||
* ![](../../images/408/《计组》计算机系统概述/现代计算机结构的示例图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/5c/45/7f41c1c2a764b5790d874319bb79.webp)
|
||||||
* 特点
|
* 特点
|
||||||
* 计算机 = 主机 + 输入/输出设备
|
* 计算机 = 主机 + 输入/输出设备
|
||||||
* 主机 = CPU +主存
|
* 主机 = CPU +主存
|
||||||
|
@ -127,8 +127,8 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
### 存储器
|
### 存储器
|
||||||
|
|
||||||
|
|
||||||
* ![](../../images/408/《计组》计算机系统概述/存储器.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/f5/d6/54c9bbf3e894a0f8c83ee6b852f4.webp)
|
||||||
* ![](../../images/408/《计组》计算机系统概述/存储体.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/23/36/f2c4b6477d836e1539b7eea1de60.webp)
|
||||||
* 组件
|
* 组件
|
||||||
* 存储元:存储二进制的电子元件,每个存储元可存储1bit
|
* 存储元:存储二进制的电子元件,每个存储元可存储1bit
|
||||||
* 存储单元:每个存储单元放一串二进制代码
|
* 存储单元:每个存储单元放一串二进制代码
|
||||||
|
@ -145,7 +145,7 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
### 运算器
|
### 运算器
|
||||||
|
|
||||||
|
|
||||||
* ![](../../images/408/《计组》计算机系统概述/运算器.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/4e/d5/3b6d2b1152928ab923f48a450a7e.webp)
|
||||||
* 组件
|
* 组件
|
||||||
* ACC:累加器,用于存放操作数或运算结果
|
* ACC:累加器,用于存放操作数或运算结果
|
||||||
* MQ:乘商寄存器,在乘除计算中用于存放操作数或运算结果
|
* MQ:乘商寄存器,在乘除计算中用于存放操作数或运算结果
|
||||||
|
@ -154,7 +154,7 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
|
|
||||||
### 控制器
|
### 控制器
|
||||||
|
|
||||||
* ![](../../images/408/《计组》计算机系统概述/控制器.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/a2/cd/67b8e28b59998f413e73513c2de5.webp)
|
||||||
* 组件
|
* 组件
|
||||||
* PC:程序计数器,存放下一条指令的地址,并跟踪下一条要执行的指令的地址
|
* PC:程序计数器,存放下一条指令的地址,并跟踪下一条要执行的指令的地址
|
||||||
* IR:指令寄存器:存放当前正在执行的指令
|
* IR:指令寄存器:存放当前正在执行的指令
|
||||||
|
@ -164,7 +164,7 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
## 计算机系统的细节
|
## 计算机系统的细节
|
||||||
|
|
||||||
* 系统细节图
|
* 系统细节图
|
||||||
* ![](../../images/408/《计组》计算机系统概述/系统细节图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/5a/b4/2f5038bc4b91baf52523a7687344.webp)
|
||||||
* 系统的组成
|
* 系统的组成
|
||||||
* CPU:中央处理器
|
* CPU:中央处理器
|
||||||
* PC:程序计数器
|
* PC:程序计数器
|
||||||
|
@ -195,7 +195,7 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
* 送结果到寄存器中或送到内存
|
* 送结果到寄存器中或送到内存
|
||||||
* PC加一
|
* PC加一
|
||||||
* 常见操作码
|
* 常见操作码
|
||||||
* ![](../../images/408/《计组》计算机系统概述/常见的操作码.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/54/dc/75ab88c8d370f8d1095fdf8f1d29.webp)
|
||||||
* 程序执行过程举例
|
* 程序执行过程举例
|
||||||
* 举例计算$y = ax^2 + bx+c$
|
* 举例计算$y = ax^2 + bx+c$
|
||||||
* 取x至运算器中
|
* 取x至运算器中
|
||||||
|
@ -205,7 +205,7 @@ date: 2023-07-07T11:24:47+08:00
|
||||||
* 将运算器中数据送至存储器y中
|
* 将运算器中数据送至存储器y中
|
||||||
* 打印y
|
* 打印y
|
||||||
* 停机
|
* 停机
|
||||||
* ![](../../images/408/《计组》计算机系统概述/程序执行过程举例.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/52/1a/0138958f183c5b450c228f7ab787.webp)
|
||||||
|
|
||||||
|
|
||||||
## 计算机性能指标
|
## 计算机性能指标
|
||||||
|
|
|
@ -20,7 +20,7 @@ date: 2023-07-22T13:59:04+08:00
|
||||||
* 只能在OS内核的底层IO软件中使用
|
* 只能在OS内核的底层IO软件中使用
|
||||||
* IO指令实现的数据传送通常发生在通用寄存器和IO端口之间
|
* IO指令实现的数据传送通常发生在通用寄存器和IO端口之间
|
||||||
* 一种特权指令
|
* 一种特权指令
|
||||||
* ![](../../images/408/《计组》输入输出系统/IO接口的基本结构.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/2e/a3/0d3fa66954f4ea0f1e1ff9913985.webp)
|
||||||
* IO接口类型
|
* IO接口类型
|
||||||
* 数据传输方式区分
|
* 数据传输方式区分
|
||||||
* 并行接口:一个字节或一个字的所有位同时传送
|
* 并行接口:一个字节或一个字的所有位同时传送
|
||||||
|
@ -90,7 +90,7 @@ date: 2023-07-22T13:59:04+08:00
|
||||||
* 缺点
|
* 缺点
|
||||||
* CPU在信息传送过程中要花费很多时间来查询和等待
|
* CPU在信息传送过程中要花费很多时间来查询和等待
|
||||||
* 在一段时间内只能和一台外设交换信息,效率大大降低
|
* 在一段时间内只能和一台外设交换信息,效率大大降低
|
||||||
* ![](../../images/408/《计组》输入输出系统/程序查询方式流程图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/ca/3e/374f3e51ed7e8eb4122a5ee81601.webp)
|
||||||
* 程序中断方式
|
* 程序中断方式
|
||||||
* 基本概念
|
* 基本概念
|
||||||
* 在计算机执行现行程序的过程中,出现某些急需处理的寻常情况或特殊情况请求CPU暂停中止现行程序,而专区对这些异常情况或特殊请求进行处理,处理完毕后再返回到现行程序的断点处,继续执行原程序
|
* 在计算机执行现行程序的过程中,出现某些急需处理的寻常情况或特殊情况请求CPU暂停中止现行程序,而专区对这些异常情况或特殊请求进行处理,处理完毕后再返回到现行程序的断点处,继续执行原程序
|
||||||
|
@ -115,7 +115,7 @@ date: 2023-07-22T13:59:04+08:00
|
||||||
* 然后CPU继续执行当前的程序,不需要像查询方式那样等待外设准备就绪
|
* 然后CPU继续执行当前的程序,不需要像查询方式那样等待外设准备就绪
|
||||||
* 一但外设完成数据传送的准备工作,就主动向CPU发出中断请求,请求CPU为自己服务
|
* 一但外设完成数据传送的准备工作,就主动向CPU发出中断请求,请求CPU为自己服务
|
||||||
* 在可以响应中断的条件下,CPU暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU回到原来的程序
|
* 在可以响应中断的条件下,CPU暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU回到原来的程序
|
||||||
* ![](../../images/408/《计组》输入输出系统/程序中断方式示意图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/ef/c8/db4ea0f7c5e197a5ef2f0597df88.webp)
|
||||||
* 程序中断的基本流程
|
* 程序中断的基本流程
|
||||||
* 中断请求
|
* 中断请求
|
||||||
* 中断响应判优(硬件排队器实现)
|
* 中断响应判优(硬件排队器实现)
|
||||||
|
@ -138,7 +138,7 @@ date: 2023-07-22T13:59:04+08:00
|
||||||
* 非向量(软件)中断
|
* 非向量(软件)中断
|
||||||
* CPU设置一个异常状态寄存器,用于记录异常原因,OS用一个统一的异常或中断查询程序,按优先等级顺序查询异常状态寄存器,以检测异常和中断的类型,先查到的先被处理,然后转到内核中相应的处理程序
|
* CPU设置一个异常状态寄存器,用于记录异常原因,OS用一个统一的异常或中断查询程序,按优先等级顺序查询异常状态寄存器,以检测异常和中断的类型,先查到的先被处理,然后转到内核中相应的处理程序
|
||||||
* 中断处理过程
|
* 中断处理过程
|
||||||
* ![](../../images/408/《计组》输入输出系统/可嵌套中断的处理流程.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/e7/f4/e15941e9122db759bbd1eaa692fb.webp)
|
||||||
* 多重中断和中断屏蔽技术
|
* 多重中断和中断屏蔽技术
|
||||||
* 单重中断
|
* 单重中断
|
||||||
* 若CPU在执行中断服务程序的过程中,又出现了新的更高优先级的中断请求,而CPU对新的中断请求不响应
|
* 若CPU在执行中断服务程序的过程中,又出现了新的更高优先级的中断请求,而CPU对新的中断请求不响应
|
||||||
|
@ -152,7 +152,7 @@ date: 2023-07-22T13:59:04+08:00
|
||||||
* 1表示屏蔽该中断源的请求,0表示可以正常申请
|
* 1表示屏蔽该中断源的请求,0表示可以正常申请
|
||||||
* 所有屏蔽触发器组合在一起便构成一个屏蔽字寄存器
|
* 所有屏蔽触发器组合在一起便构成一个屏蔽字寄存器
|
||||||
* 屏蔽字寄存器的内容称为屏蔽字
|
* 屏蔽字寄存器的内容称为屏蔽字
|
||||||
* ![](../../images/408/《计组》输入输出系统/单重中断和多重中断示意图.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/93/0a/cd22d18fa0b9af5707e4a7f7b261.webp)
|
||||||
|
|
||||||
|
|
||||||
* DMA(Direct Memory Access 直接存储器存取)方式
|
* DMA(Direct Memory Access 直接存储器存取)方式
|
||||||
|
@ -180,7 +180,7 @@ date: 2023-07-22T13:59:04+08:00
|
||||||
* DMA请求触发器:每当IO设备准备好数据后,给出一个控制信号,使DMA请求触发器置位
|
* DMA请求触发器:每当IO设备准备好数据后,给出一个控制信号,使DMA请求触发器置位
|
||||||
* 控制/状态逻辑:由控制和时序电路及状态标志组成,用于指令传送方向,修改传送参数,并对DMA请求信号,CPU响应信号进行协调和同步
|
* 控制/状态逻辑:由控制和时序电路及状态标志组成,用于指令传送方向,修改传送参数,并对DMA请求信号,CPU响应信号进行协调和同步
|
||||||
* 中断机构:当一个数据块传送完毕后触发中断机构,向CPU提出中断请求
|
* 中断机构:当一个数据块传送完毕后触发中断机构,向CPU提出中断请求
|
||||||
* ![](../../images/408/《计组》输入输出系统/简单的DMA控制器.jpg)
|
* ![](https://lychee.inksoul.top/uploads/original/49/fb/b5076a0473404b72d15556c50991.webp)
|
||||||
* 传送方式
|
* 传送方式
|
||||||
* 当IO设备和CPU同时访问主存时,可能发生冲突,为了有效使用主存,DMAC和CPU通常采用3种方式使用主存
|
* 当IO设备和CPU同时访问主存时,可能发生冲突,为了有效使用主存,DMAC和CPU通常采用3种方式使用主存
|
||||||
* 停止CPU访问
|
* 停止CPU访问
|
||||||
|
@ -198,7 +198,7 @@ date: 2023-07-22T13:59:04+08:00
|
||||||
* 校验送入主存的数据是否正确
|
* 校验送入主存的数据是否正确
|
||||||
* 测试传送过程中是否出错(错误则转诊断程序)
|
* 测试传送过程中是否出错(错误则转诊断程序)
|
||||||
* 决定是否继续使用DMA传送其他数据等
|
* 决定是否继续使用DMA传送其他数据等
|
||||||
* ![](../../images/408/《计组》输入输出系统/DMA的传送流程.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/91/95/4dd2b9dee7f0790c312040b18a29.webp)
|
||||||
|
|
||||||
|
|
||||||
* DMA方式和中断方式的对比
|
* DMA方式和中断方式的对比
|
||||||
|
@ -222,8 +222,8 @@ date: 2023-07-22T13:59:04+08:00
|
||||||
|
|
||||||
|
|
||||||
* 各种IO控制方式的对比和例题
|
* 各种IO控制方式的对比和例题
|
||||||
* ![](../../images/408/《计组》输入输出系统/IO控制方式对比.png)
|
* ![](https://lychee.inksoul.top/uploads/original/13/3d/03e76755ee99749d2f2528f6202b.webp)
|
||||||
* ![](../../images/408/《计组》输入输出系统/IO例题.jpg)
|
* ![](https://lychee.inksoul.top/uploads/medium/da/ba/965221f98b59e0e4f9059378f662.webp)
|
||||||
|
|
||||||
|
|
||||||
## 思维导图
|
## 思维导图
|
||||||
|
|
Before Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 208 KiB |
Before Width: | Height: | Size: 319 KiB |
Before Width: | Height: | Size: 371 KiB |
Before Width: | Height: | Size: 437 KiB |
Before Width: | Height: | Size: 285 KiB |
Before Width: | Height: | Size: 364 KiB |
Before Width: | Height: | Size: 312 KiB |
Before Width: | Height: | Size: 269 KiB |
Before Width: | Height: | Size: 425 KiB |
Before Width: | Height: | Size: 531 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 301 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 782 KiB |
Before Width: | Height: | Size: 472 KiB |
Before Width: | Height: | Size: 549 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 394 KiB |
Before Width: | Height: | Size: 552 KiB |
Before Width: | Height: | Size: 440 KiB |
Before Width: | Height: | Size: 588 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 225 KiB |
Before Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 178 KiB |
Before Width: | Height: | Size: 149 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 146 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 144 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 386 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 368 KiB |
Before Width: | Height: | Size: 189 KiB |
Before Width: | Height: | Size: 386 KiB |
Before Width: | Height: | Size: 280 KiB |
Before Width: | Height: | Size: 209 KiB |
Before Width: | Height: | Size: 191 KiB |
Before Width: | Height: | Size: 196 KiB |
Before Width: | Height: | Size: 162 KiB |
Before Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 249 KiB |
Before Width: | Height: | Size: 1.0 MiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 205 KiB |
Before Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 316 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 141 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 167 KiB |
Before Width: | Height: | Size: 1001 KiB |
Before Width: | Height: | Size: 337 KiB |
Before Width: | Height: | Size: 334 KiB |
Before Width: | Height: | Size: 246 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 409 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 603 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 147 KiB |
Before Width: | Height: | Size: 402 KiB |