├── .nojekyll
├── 18总结及复习.pptx
├── assets
└── favicon.png
├── _navbar.md
├── 计算机系统结构.assets
├── 608a5e682f19f.jpg
├── image-20210615211604807.png
├── image-20210616154958511.png
├── image-20210616155129119.png
├── image-20210621175746367.png
├── image-20210621200740644.png
├── image-20210621200752388.png
├── image-20210621201952952.png
├── image-20210621202833308.png
├── image-20210621202935476.png
├── image-20210621203758873.png
├── image-20210621204809703.png
├── image-20210621210007044.png
├── image-20210621210238347.png
├── image-20210623163654677.png
├── image-20210623181547578.png
├── image-20210623181606770.png
├── image-20210623181701508.png
├── image-20210624105654796.png
├── image-20210624110451057.png
├── image-20210624110558544.png
├── image-20210624112351189.png
├── image-20210624114159863.png
├── image-20210624114242660.png
├── image-20210624150128094.png
├── image-20210624151105872.png
├── image-20210624152309862.png
├── image-20210624170444635.png
├── image-20210624170500516.png
├── image-20210624173632498.png
├── image-20210624173656148.png
├── image-20210624175006428.png
├── image-20210624175021573.png
└── image-20210624175119253.png
├── 极限复习.assets
├── image-20210619221424589.png
├── image-20210619234402936.png
└── image-20210619234536567.png
├── 极限复习eXtremeReviewing.assets
├── image-20210622104631834.png
├── image-20210622111104060.png
├── image-20210622111204633.png
├── image-20210622111424215.png
├── image-20210622111711074.png
├── image-20210622111823427.png
├── image-20210622112350690.png
├── image-20210622112410658.png
├── image-20210622112608057.png
├── image-20210622112621773.png
├── image-20210622140232571.png
├── image-20210622152317173.png
├── image-20210622163157344.png
├── image-20210622164057390.png
├── image-20210622164129242.png
├── image-20210622170318808.png
├── image-20210622170611122.png
├── image-20210622171002155.png
├── image-20210622171013893.png
├── image-20210622171018522.png
├── image-20210622174646591.png
├── image-20210622174744736.png
├── image-20210622180944979.png
├── image-20210622182351234.png
├── image-20210622182650180.png
└── image-20210622183711516.png
├── README.md
├── LICENSE
├── index.html
├── Linux开发环境及应用.md
├── 极限复习eXtremeReviewing.md
└── 计算机系统结构.md
/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/18总结及复习.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/18总结及复习.pptx
--------------------------------------------------------------------------------
/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/assets/favicon.png
--------------------------------------------------------------------------------
/_navbar.md:
--------------------------------------------------------------------------------
1 | - [README](./README.md)
2 | - [计算机系统结构](./计算机系统结构.md)
3 | - [软件工程](./极限复习eXtremeReviewing.md)
4 |
5 |
--------------------------------------------------------------------------------
/计算机系统结构.assets/608a5e682f19f.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/608a5e682f19f.jpg
--------------------------------------------------------------------------------
/极限复习.assets/image-20210619221424589.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习.assets/image-20210619221424589.png
--------------------------------------------------------------------------------
/极限复习.assets/image-20210619234402936.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习.assets/image-20210619234402936.png
--------------------------------------------------------------------------------
/极限复习.assets/image-20210619234536567.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习.assets/image-20210619234536567.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210615211604807.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210615211604807.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210616154958511.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210616154958511.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210616155129119.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210616155129119.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621175746367.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621175746367.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621200740644.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621200740644.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621200752388.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621200752388.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621201952952.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621201952952.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621202833308.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621202833308.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621202935476.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621202935476.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621203758873.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621203758873.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621204809703.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621204809703.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621210007044.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621210007044.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210621210238347.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210621210238347.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210623163654677.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210623163654677.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210623181547578.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210623181547578.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210623181606770.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210623181606770.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210623181701508.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210623181701508.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624105654796.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624105654796.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624110451057.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624110451057.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624110558544.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624110558544.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624112351189.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624112351189.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624114159863.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624114159863.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624114242660.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624114242660.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624150128094.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624150128094.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624151105872.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624151105872.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624152309862.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624152309862.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624170444635.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624170444635.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624170500516.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624170500516.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624173632498.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624173632498.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624173656148.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624173656148.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624175006428.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624175006428.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624175021573.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624175021573.png
--------------------------------------------------------------------------------
/计算机系统结构.assets/image-20210624175119253.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/计算机系统结构.assets/image-20210624175119253.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622104631834.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622104631834.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622111104060.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622111104060.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622111204633.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622111204633.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622111424215.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622111424215.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622111711074.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622111711074.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622111823427.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622111823427.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622112350690.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622112350690.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622112410658.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622112410658.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622112608057.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622112608057.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622112621773.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622112621773.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622140232571.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622140232571.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622152317173.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622152317173.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622163157344.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622163157344.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622164057390.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622164057390.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622164129242.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622164129242.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622170318808.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622170318808.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622170611122.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622170611122.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622171002155.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622171002155.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622171013893.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622171013893.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622171018522.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622171018522.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622174646591.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622174646591.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622174744736.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622174744736.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622180944979.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622180944979.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622182351234.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622182351234.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622182650180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622182650180.png
--------------------------------------------------------------------------------
/极限复习eXtremeReviewing.assets/image-20210622183711516.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BakaNetwork/ComputerArchitecture/HEAD/极限复习eXtremeReviewing.assets/image-20210622183711516.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 目录
2 |
3 | 
4 |
5 |
6 |
7 | - 进军教育蓝海
8 | - [计算机系统结构](https://bakanetwork.github.io/ComputerArchitecture/#/计算机系统结构.md)
9 | - [软件工程](https://bakanetwork.github.io/ComputerArchitecture/#/极限复习eXtremeReviewing.md)
10 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 BakaNetwork
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
234 |
235 | ## UML 概念及画法
236 |
237 | UML:面向对象的统一建模语言。是一种建模语言规格说明,是一种表示的标准。不是过程也不是方法,但允许任何一种过程和方法使用它。
238 |
239 | 4+1 视图:从不同视角为系统架构建模,形成系统的不同视图。分别为:
240 |
241 | - 用例视图(用户模型视图、场景视图):强调从用户角度看到的或需要的系统功能。
242 | - 逻辑视图(结构模型视图、静态视图):展现系统的静态或结构组成及特征。
243 | - 进程试图(行为模型视图、过程视图、协作视图、动态视图):描述设计的并发和同步等特性,关注系统非功能性需求。
244 | - 构件视图(实现模型视图、开发视图):关注代码的静态组织与管理。
245 | - 部署视图(环境模型视图、物理视图):描述硬件的拓扑结构以及软件和硬件的映射问题,关注系统非功能性需求(性能、可靠性等)。
246 |
247 |
248 |
249 | UML 的 9 个基本图:
250 |
251 | - 用例图 Use Case Diagram:从用户的角度描述系统的功能。
252 | - 类图 Class Diagram:描述系统的静态结构(类及其相互关系)。
253 | - 对象图:描述系统在某个时刻的静态结构(对象及其相互关系)。
254 | - 顺序图 Sequence Diagram:按时间顺序描述系统元素间的交互。
255 | - 协作图 Collaboration Diagram:按照时间空间的顺序描述系统元素间的交互和他们之间的关系。
256 | - 状态图:描述系统元素(对象)的状态条件和响应。
257 | - 活动图:描述了系统元素之间的活动。
258 | - 构件图:描述了实现系统的元素(类或包)组织。
259 | - 部署图:描述了环境元素的配置并把实现系统的元素映射到配置上。
260 |
261 | UML 视图与图的关系:
262 |
263 | - 用例视图——用例图。
264 | - 逻辑视图——类图、对象图、顺序图/协作图。
265 | - 进程试图——状态图、活动图。
266 | - 构件视图——构件图。
267 | - 部署视图——部署图。
268 |
269 | UML 图的画法:
270 |
271 | - 类的基本结构:类名+属性+操作()。
272 | - 构建领域模型时,不需要操作()。
273 |
274 |
275 |
276 | - 类之间的关系:
277 |
278 |
279 |
280 | 
281 |
282 | 
283 |
284 | ## 领域模型
285 |
286 | 领域模型:领域内**概念类**或**对象**的抽象可视化表示(将客观世界中的事物可视化抽象化)。主要用于概括地描述**业务背景**和重要的**业务流程**,通过类图和活动图展示。
287 |
288 | - 业务背景:描述概念类之间的关系,表示成能够代表业务知识结构的类图。
289 | - 业务流程:由角色及其执行的活动构成。由活动图描述。
290 |
291 | 创建领域模型的步骤:
292 |
293 | 1. 找出当前需求中的候选概念类。
294 | 2. 在领域模型中描述这些概念类。用问题域中的词汇对概念类命名,将与当前需求无关的概念类排除。
295 | 3. 在概念类之间添加必要的关联来记录关系。用关联、继承、组合/聚合表示。
296 | 4. 在概念类中添加用来实现需求必要的属性。
297 |
298 | 识别概念类或属性:
299 |
300 | - 属性一般是可以赋值的(如数字、文本),而概念类不可以。
301 | - 如果对一个名词是概念类还是属性不确定,将其作为概念类处理。
302 | - 不存在名词到类的映射机制,因为自然语言具有二义性。
303 |
304 | 领域模型示例:
305 |
306 | 
307 |
308 | ## 用例模型
309 |
310 | 用例模型是“目标系统”的逻辑模型,定义了目标系统“做什么”的需求。由四部分组成:
311 |
312 | - 用例图
313 | - 用例说明
314 | - 系统顺序图 SSD
315 | - 操作契约 Operation Contract
316 |
317 | ---
318 |
319 | 用例图:由三个基本元素组成。
320 |
321 | - Actor:称为角色或参与者,使用系统的对象(不一定是人)。
322 | - Usecase:用例,描述角色如何使用系统功能实现需求目标的一组成功场景和一系列失败场景的集合。
323 | - Association:角色和用例之间的关系、用例和子用例之间的关系。
324 |
325 | 用例图示例:
326 |
327 |
328 |
329 |
330 |
331 | ---
332 |
333 | 系统顺序图 SSD:确定角色与系统之间的交互关系,以代码风格命名。包含:
334 |
335 | - 角色。
336 | - 代表软件系统的对象,一般使用 system 或系统命名。
337 | - 角色与 system 之间的交互信息,简称消息或操作。
338 |
339 | SSD 示例:
340 |
341 | 
342 |
343 | 
344 |
345 | ---
346 |
347 | 操作契约:为系统操作定义。领域模型中业务对象接收到系统事件后,执行必须的业务处理时各业务对象的状态以及系统操作执行的结果。
348 |
349 | 
350 |
351 | 操作契约示例:
352 |
353 | 
354 |
355 | # 五 结构化需求分析方法
356 |
357 | > 数据建模
358 | >
359 | > 功能建模
360 | >
361 | > 行为建模
362 |
363 | 数据建模:
364 |
365 | - 概念性数据模型基于实体-关系(ER)法,也称为实体关系模型。描述了从用户角度看到的数据,反映用户现实环境,但与软件系统中的实现方法无关。
366 |
367 | - 数据对象描述:描述了数据对象实体的名称及其所有属性。
368 |
369 | - 数据对象的基数:一对一、一对多、多对多。
370 |
371 | ## 数据流图
372 |
373 | 功能建模:当数据或信息流过计算机系统时被系统功能所处理、加工、变换后再从系统输出处理后的数据,表现为**数据流图**。
374 |
375 | 数据流图的结构:由加工、外部实体、数据流、数据存储组成。
376 |
377 | 分层数据流图:
378 |
379 | - 顶层数据流图:顶层流图仅包含一个加工,它代表被开发系统,其作用在于表明被开发系统的范围,以及它和周围环境的数据交换关系。
380 | - 中间层数据流图:表示对其上层父图的细化。它的每一加工可以继续细化,形成子图。中间层次的多少视系统的复杂程度而定。
381 | - 底层数据流图:是指加工不须再做分解的数据流图,称为“原子加工”。
382 |
383 | 
384 |
385 | 数据词典:对于数据流图中出现的所有被命名的图形元素加以定义,使得每一个图形元素的名字都有一个确切的解释。其定义应是严密的、精确的,不可有半点含混并消除二义性,它由以下内容组成:
386 |
387 | - 数据流词条:唯一标识数据流的名称,简要介绍数据流作用。
388 | - 数据元素词条:唯一标识数据元素的名称或编号,简要描述该数据元素的作用,以及位于哪个数据结构内。
389 | - 数据文件词条:唯一标识数据文件的名称,简要描述改文件存放什么数据。
390 | - 加工逻辑词条:唯一标识加工的名称,描述加工逻辑和规则,简述功能。
391 | - 外部实体词条:唯一标识外部实体的名称,指明该实体的性质及与系统的关系。
392 |
393 | ---
394 |
395 | 行为建模:从特定视角出发描述系统行为,采用动态分析的方法。
396 |
397 | 常用的结构化动态分析方法:状态迁移图、时序图、Petri 网等。
398 |
399 | # 六 软件设计的概念及原则
400 |
401 | > 软件设计过程:概要设计、详细设计
402 | >
403 | > 软件设计模型
404 | >
405 | > 模块,模块的独立性
406 | >
407 | > 面向对象的设计原则
408 | >
409 | > 软件体系结构风格
410 |
411 | 一堆概念。
412 |
413 | ## 软件设计(概要设计、详细设计、设计模型)
414 |
415 | 软件概要设计:
416 |
417 | - 制定设计规范。
418 | - 软件系统结构的总体设计。
419 | - 处理方式设计(性能设计)。
420 | - 数据结构设计。
421 | - 可靠性设计(质量设计)。
422 | - 界面设计(需求的直接表达方式)。
423 | - 编写软件概要设计说明书。
424 | - 概要设计评审。
425 |
426 | 软件详细设计:
427 |
428 | - 确定软件各个功能模块内的算法以及各功能模块的内部数据组织。
429 | - 描述各种算法。
430 | - 编写软件详细设计说明书。
431 | - 详细设计评审。
432 |
433 | 软件模型设计:
434 |
435 | - 动态结构设计:以某种方式表示功能相应客户请求时处理数据的过程或条件。进一步解释各功能之间如何协调工作。
436 | - 静态结构设计:包括软件的功能结构和数据结构。展示软件系统能满足所有需求的框架结构。
437 |
438 | 软件的设计活动:
439 |
440 | - 系统结构设计、数据结构设计。
441 | - 接口设计、过程设计。
442 | - 界面设计、组件设计、优化设计等。
443 |
444 | ## 软件的模块化
445 |
446 | 模块(module)定义:这个软件可被划分成若干个**可单独命名且可编址组成部分**,这些部分称为模块。模块具有三个基本属性:
447 |
448 | - 功能:做什么。
449 | - 逻辑:怎么做。
450 | - 状态:模块使用时的环境和条件。
451 |
452 | 模块的表示:
453 |
454 | - 模块的外部特性:模块的名字、参数表、功能(对程序其他环境造成的影响)。
455 | - 模块的内部特性:完成其功能的代码和内部数据。
456 |
457 | 模块的内聚性:内聚性越高,模块功能独立性越强。
458 |
459 | | 内聚类型 | 描述 |
460 | | -------- | --------------------------------------------------------------------------------------------------- |
461 | | 巧合内聚 | 内聚程度最低。模块内凑巧有一些程序段代码相同,又没有明确表现出独立的功能,应当抽象为一个新的模块。 |
462 | | 逻辑内聚 | 把几种相关的功能组合在一起,每次调用由模块根据参数确定执行那一部分功能。(if-else) |
463 | | 时间内聚 | 又称经典内聚。一般为多功能模块,各个功能的执行与时间有关。例如初始化模块、终止模块。 |
464 | | 过程内聚 | 把流程图中的一部分划出组成模块。例如,把一个流程中的循环部分、判定部分、计算部分分成三个模块。 |
465 | | 通信内聚 | 一个模块完成多个功能,各功能都在同一个数据结构上操作,每个功能有唯一入口。例如对某数据结构的 CRUD。 |
466 | | 功能内聚 | 内聚程度最高。一个模块中各个部分都是完成某一具体功能必不可少的组成部分,紧密联系,不可分割。 |
467 |
468 | 模块的耦合性:耦合性越高,模块间联系越紧密,独立性越弱。应当避免高耦合。
469 |
470 | | 耦合类型 | 描述 |
471 | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------ |
472 | | 非直接耦合 | 耦合性最低。两个模块之间没有直接关系,通过父级模块控制和调用各自实现功能。 |
473 | | 数据耦合 | 一组模块通过参数表简单变量交换信息。 |
474 | | 标记耦合 | 一组模块通过参数表传递记录信息。这个记录是某一数据结构的子结构,不是简单变量。(违反了通信内聚原则) |
475 | | 控制耦合 | 一个模块通过传送开关、标志、名字等控制信息明显地控制另一模块的功能。 |
476 | | 外部耦合 | 一组模块都访问同一全局简单变量(而非数据结构),并且不通过参数表传递该变量信息。 |
477 | | 公共耦合 | 一组模块访问同一个公共数据环境。如全局数据结构、共享通信区、内存公共覆盖区等。 |
478 | | 内容耦合 | 耦合性最高。一个模块直接访问另一模块内部数据、不通过正常入口转到另一模块内部、两模块有部分代码重叠、一个模块有多个入口。(垃圾代码) |
479 |
480 | ## 面向对象的设计原则
481 |
482 | 原则:
483 |
484 | - 单一职责原则:引起一个类变化的原因(职责)应该只有一个。
485 | - 开闭原则:类、模块、函数可以扩展,但不能修改原有代码(Open for extension,Closed for modification)。
486 | - 里氏替换原则:子类应当可以替换父类,并出现在父类能够出现的任何地方。
487 | - 依赖倒置原则:
488 | - 高层模块不应依赖于底层模块,二者都应依赖于抽象。抽象不应依赖于细节,细节应该依赖于抽象。
489 | - 程序中所有依赖关系都应终止于抽象类或接口。
490 | - 接口隔离原则:若一个服务类为多个客户类提供不同服务,则服务类针对每个不同服务都应该有一个接口。
491 | - 组合/聚合复用原则:在一个新对象里面使用一些已有对象,使之成为新对象的一部分。新对象通过向已有对象委托(delegate)一部分职责而达到复用已有对象的目的。(不要继承,要组合/聚合)
492 | - 迪米特法则:最少知识原则。一个对象应当尽可能少地了解其他对象。(对象只与 this、本对象方法中的参量、当前对象实例直接引用的对象、对象实例聚集中的其他元素、当前对象创建的对象通信)
493 |
494 | ## 软件体系结构风格
495 |
496 | 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式(设计模式):
497 |
498 | - 管道和过滤器风格:参考 Unix/Linux。通过过滤器进行数据处理、通过管道进行信息流传递。
499 |
500 | - 调用和返回风格:大型软件开发主流体系结构
501 |
502 | - 主程序/子程序风格:将程序化分为若干小片段,封装为子程序。主程序单线程控制。
503 | - 对象风格:数据的表示方法和相应操作封装在抽象数据类型或对象中。对象通过函数和过程调用交互。
504 | - 分层风格:将系统组织称一个结构,通过接口,每一层为上层提供服务,并作为下层的客户端。
505 |
506 | - 基于事件的风格:构件不直接调用过程,而是声明或广播事件。其他构件通过向系统注册监听事件,完成相应操作。
507 |
508 | - 客户端/服务器风格:应用程序的数据和处理分布在一定范围内的多个构件上,构件之间通过网络连接。
509 |
510 | - MVC 风格:模型(数据与状态)与视图(显示)分离,通过控制器(封装若干接口)控制。
511 |
512 |
513 |
514 | - 黑板风格:通常用于松散的构件访问共享数据的应用程序。(略?)
515 |
516 | # 七 面向对象设计方法
517 |
518 | > 面向对象设计步骤
519 | >
520 | > 模型层次化
521 | >
522 | > 面向对象的设计模式
523 |
524 | 面向对象的设计与 UML
525 |
526 | 面向对象的设计:以需求分析阶段的**用例模型**和**领域模型**为基础,运用 UML 构建软件系统结构,通过一系列设计模型说明用例的实现过程。
527 |
528 | 主要设计活动:选择架构——通过**UML 交互图**描述每个用例的实现——通过**UML 类图**给出满足所有用例的系统静态结构——根据系统设计原则进行优化。(存疑)
529 |
530 | ---
531 |
532 | 软件概要设计步骤:
533 |
534 | - 选择合适的软件架构。(单机?CS 或 BS?云服务?)
535 | - 系统的**动态结构设计**:
536 | - 针对用例 SSD 中的每个系统事件,使用 Sequence diagram/ Collaboration diagram 给出符合该系统事件操作契约的内容。
537 | - 如果软件对象具有多种不同职责,需要使用 State machines diagram 进行状态迁移设计。
538 | - 系统的**静态结构设计**:
539 | - 对所有用例或子系统级别的用例交互图归纳,使用 Class diagram 给出系统的静态结构。
540 |
541 | * 软件详细设计:
542 |
543 | - 针对系统静态结构中的每个方法,使用 Activity diagram 进行逻辑结构的设计。
544 |
545 | * 软件架构:
546 | - 三种基础架构:单机、CS 和 BS、云服务。
547 | - 服务器端的分层:控制器层+应用逻辑层(必须)+基础架构层+持久化层+DB(必须)
548 |
549 | ---
550 |
551 | 模型层次化:层次化设计模型符合面向对象设计原则,并使系统易于扩展和维护。
552 |
553 | - 用户界面层:尽量与业务分离,专门处理交互。
554 | - 控制器层:专职接收 SSD 中的系统事件,进行 validation,并转发给应用逻辑层对象处理。
555 | - 业务逻辑层:实现系统核心功能。
556 | - 持久化层:负责 CRUD 经过业务逻辑层处理后的需要持久化(将对象状态永久保存到物理介质)的数据。与业务逻辑层功能分离,与数据库保持同步。持久化层将对数据库的操作类封装起来,向业务/领域对象提供持久化服务,是数据库变化对业务领域影响的范围局部化。
557 | - 系统层:为应用封装操作系统相关的功能。
558 |
559 | ---
560 |
561 | 面向对象设计的关键步骤:在确定软件框架结构的基础上,进行如下内容设计:
562 |
563 | - 发现对象(发现软件类):根据需求和选择的架构和模式确定系统由哪些对象构成。
564 |
565 | - 确定对象属性:明确对象特征属性。
566 | - 确定对象行为:明确对象功能职责。
567 | - 确定对象之间的关系:根据 SSD 和操作契约、选择的架构和模式,明确系统如何相互协作完成功能需求的交互过程。
568 |
569 | ---
570 |
571 | ## 面向对象的设计模式
572 |
573 | - 对象的职责通过调用对象的方法来实现。
574 | - 面向对象设计最关键的活动是正确地给对象分配职责。
575 | - 模式定义了一组相互协作的设计类,包括类的职责、类之间的交互方式。
576 |
577 | 如何确定设计类并分配职责?类职责分配模式、控制器模式、建造者模式、信息专家模式。
578 |
579 | 类职责分配(Grasp)模式:
580 |
581 | - 设计类的来源有两部分:
582 |
583 | - 核心逻辑由领域模型中的**概念类**转换而来。
584 | - 另一部分是为了实现新增的类,如负责对象持久化的类、负责通信的类。
585 |
586 | - 每个设计类都有明确的职责,分为两种类型:
587 |
588 | - 了解型(knowing)职责(自己干自己的事):
589 |
590 | - 对象了解自己私有的数据。
591 | - 对象了解相关联的对象。
592 | - 对象了解能够派生或计算的事物。
593 |
594 | - 行为型(doing)职责(自己干自己能干的事):
595 |
596 | - 对象自身能执行一些行为,如创建一个对象或者进行计算。
597 | - 对象要能启动其他对象中的动作。
598 | - 对象要能控制或协调其他对象中的活动。
599 |
600 | 职责的内聚(自己只干自己的事):减少不必要的关联,提高内聚性。
601 |
602 | 控制器(Controller)模式:把处理和接收系统事件的职责分配给位于控制器层的对象。提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。
603 |
604 | - 外观(facade)控制器:代表整个系统。
605 | - 用例控制器或会话控制器:代表一个发生系统事件的用例场景。这个类通常命名为`<用例名>控制器`。
606 | - 在相同的用例场景中使用同一个控制器类处理所有的系统事件。
607 | - 一次会话是与一个参与者进行交谈的一个实例。
608 |
609 | 建造者(Creator)模式:用于操作契约中对象实例的创建。体现低耦合设计思想,是迪米特法则的具体运用。
610 |
611 | - 若以下条件满足一个或多个:
612 |
613 | - B 聚合或包含 A,B 记录对象 A,B 密切使用对象 A,B 拥有创建对象 A 所需要的初始化数据。
614 |
615 | 则可将创建类 A 实例的职责分配给类 B。
616 |
617 | 信息专家(Information Expert)模式:
618 |
619 | - 这是给对象分配职责的通用原则:职责分配给拥有履行职责所必需信息的类(信息专家)完成。
620 |
621 | ---
622 |
623 | 创建交互图:根据选择的系统架构,使用 UML 的交互图,为该用例的每一个**系统事件**确定对应的软件对象,并根据操作契约确定对象之间的关系。
624 |
625 | 
626 |
627 | ---
628 |
629 | ## 创建设计类图
630 |
631 | 设计类图定义类、类的属性和操作,但不定义实现操作的算法。
632 |
633 | - 扫描所有交互图以及领域模型中涉及的类,识别软件类。
634 | - 将领域模型中已经识别出来的部分属性添加到类中。
635 | - 根据交互图为软件类添加方法。忽略构造函数和 getter/setter。
636 | - 添加更多类型信息。包括属性类型、方法参数类型、返回类型。
637 | - 添加关联和导航。定义 A 到 B 带导航关联修饰的常见情况:A 发送一个消息到 B、A 创建一个 B 的实例、A 需要维护到 B 的一个连接。
638 | - (可选)类成员的细节表示。如属性可见性、方法体的描述等。
639 |
640 | 例:
641 |
642 | 
643 |
644 |
645 |
646 | # 八 结构化设计方法
647 |
648 | > 功能结构图基本结构
649 | >
650 | > 变换型映射
651 | >
652 | > 事务型映射
653 |
654 | 功能结构图的基本结构:四种基本类型模块
655 |
656 | - 传入模块:从下属模块取得数据,经过处理,将其传送给上级模块。
657 | - 传出模块:从上级模块获得数据,经过处理,将其传送给下属模块。
658 | - 变换模块:即加工模块。从上级模块获得数据,进行处理,再传送回上级模块。
659 | - 协调模块:对所有下属模块进行协调和管理的模块。
660 |
661 | 
662 |
663 | 系统功能结构图(根据数据流图中加工特性)分为以下两种结构:
664 |
665 | - 变换处理型
666 | - 事务处理型(并发处理型)
667 |
668 | ## 变换型映射
669 |
670 | 变换型结构工作过程大致三步:取得数据、变换数据、给出数据。
671 |
672 | 
673 |
674 | 变换型映射:会画就行。
675 |
676 | 
677 |
678 | ## 事务型映射
679 |
680 | 事务型结构:存在某一个数据流节点,引发一个或多个相同的处理,并将处理结果返回给该节点,则该数据流就叫做事务,该节点称为事务处理中心。事务是最小的工作单元,无论成功与否都作为一个整体进行工作。
681 |
682 | 
683 |
684 | 
685 |
686 | 事务型映射:
687 |
688 |
689 |
690 | # 九 程序实现
691 |
692 | > 源程序文档化
693 |
694 | 源程序除了质量要求之外,为了后期代码的维护和修改,还必须提高可阅读性,达到源程序文档化。
695 |
696 | - 标识符命名:模块名(类名及方法名),变量/常量名
697 | - 名称需标示清楚具体含义,采用前缀后缀增加可阅读性。
698 | - 使用专业术语(业务词汇),避免与编码语言关键字冲突。
699 | - 注意大小写及长度。
700 | - 源程序布局:
701 | - 编码之前定义统一的编码规范。
702 | - 规定合理的注释、缩进、空格、空行等方式。
703 | - 程序注释:
704 | - 序言性注释:位于代码之前,说明该模块(类及方法)具体作用。包括:
705 | - 程序标题:模块名称。
706 | - 模块描述:该模块的功能和目的说明。
707 | - 主要算法(可选):说明采用的算法结构。
708 | - 接口说明:说明该模块与其他模块的调用关系。
709 | - 开发简历:创建者、创建时间。修改者、修改时间、修改内容。版本。
710 | - 功能性注释:对于程序体中复杂难于理解的程序结构进行局部说明。
711 |
712 | # 十 软件测试
713 |
714 | > 白盒测试
715 | >
716 | > 黑盒测试
717 | >
718 | > 测试基本类型
719 |
720 | 测试用例由测试输入数据和预期的输出结果两部分组成。
721 |
722 | 
723 |
724 | 白盒测试:将测试对象看作一个透明的盒子,允许利用程序内部逻辑结构以及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。又称为结构测试或逻辑驱动测试。
725 |
726 | 黑盒测试:完全不考虑程序内部的逻辑结构和特性,只依据程序的需求规格说明书和概要设计说明,检查程序的功能是否符合它的功能说明。又称为功能测试或数据驱动测试。
727 |
728 | ## 白盒测试方法
729 |
730 | 白盒测试主要应用于单元测试,是检查程序逻辑错误的主要方法。
731 |
732 | 进行如下检查:
733 |
734 | - 程序模块所有独立执行路径至少测试一次。
735 | - 对所有的逻辑判定,true 和 false 的情况都至少测试一次。
736 | - 在循环的便捷和运行界限内执行循环体。
737 | - 测试内部数据结构的有效性,等。
738 |
739 | 逻辑覆盖:逻辑覆盖是一程序内部的逻辑结构为基础设计的测试用例技术。
740 |
741 | - 语句覆盖:使得每一个可执行语句至少执行一次。语句覆盖发现不了判断中逻辑运算中出现的错误,是最弱的逻辑覆盖准则。
742 | - 判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,又称为分支覆盖。判定覆盖还不能保证一定查出在判断的条件中存在的错误,因此需要更强的逻辑覆盖准则检验判断内部条件。
743 | - 条件覆盖:使得程序中每个判断的每个条件的可能取值至少执行一次。
744 | - 判定+条件覆盖:使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果取值至少执行一次。采用判定-条件覆盖,逻辑表达式中的错误不一定能够查得出来。
745 | - 条件组合覆盖:使得每个判断的所有可能的条件取值组合至少执行一次。需要将多重条件判断分解成有多个基本判断组成的流程图。
746 | - 路径覆盖:设计足够的测试用例,覆盖程序中所有可能的路径。这种测试仍然无法满足条件组合覆盖某些条件,也并非是完善的测试方法。在实际的测试用例设计过程中需要综合以上 6 种测试方法去设计测试用例。以路径覆盖为主,辅助其他 5 种方法。
747 |
748 | ---
749 |
750 | 基本路径测试:对于具有循环结构的程序,路径过多,做到路径覆盖有难度。基本路径测试基于**程序控制流图**对程序进行简化,得到程序的控制结构,进而分析控制结构的环路复杂性,导出基本可执行路径集合,设计测试用例。
751 |
752 | 
753 |
754 | 控制流图的转换:
755 |
756 | - 顺序结构的多个结点可以合并为一个结点。
757 | - 在选择或多分支结构中,分支的汇聚处应有一个虚拟汇聚结点。
758 | - 边和结点圈定的范围叫做区域,当对区域计数时,图形外的范围也应记为一个区域。
759 | - 如果判断中的条件表达式是由一个或多个逻辑运算符连接的复合条件表达式,则需要改为一系列只有单个条件的嵌套的判断。
760 |
761 |
762 |
763 | 控制流图的环路复杂度计算:
764 |
765 | - 控制流图的环路复杂度(McCabe 复杂度)确定程序中独立路径的上界,以此为依据可找出程序中全部独立路径。
766 | - 环路复杂度三种计算方法:
767 | - 等于控制流图中的区域数,包括封闭区域和开放区域。
768 | - 设 E 为控制流图的边数,N 为图的结点数,则环路复杂度定义为$V(G)=E-N+2$。
769 | - 设 P 为控制流图中的判定结点数,则有$V(G) = P+1$。
770 | - 基本路径集:指程序控制流图中,从入口到出口的至少经历一个从未走过的边的不同路径的集合。
771 | - 给定控制流图,基本路径集不是唯一的。
772 | - 最大基本路径条数就是环路复杂度。
773 |
774 | 导出测试用例:
775 |
776 | - 根据控制流图的基本路径导出测试用例,确保基本路径集中每一条路径执行。
777 | - 根据判断结点给出条件,选择适当数据保证每一条路径可被测试到(使用逻辑覆盖)。
778 | - 每个测试用例执行后与预期结果比较,若所有测试用例执行完毕,则确信程序中所有可执行语句至少被执行一次。
779 |
780 | 
781 |
782 | ## 黑盒测试方法
783 |
784 | 黑盒测试方法一般用于集成测试、系统测试、验收测试。
785 |
786 | 常用方法:
787 |
788 | - 等价类划分:按区间、数值集合、布尔值等规则将输入空间划分为有效等价类与无效等价类,使用等价类的一个或几个代表值进行测试。
789 | - 边界值分析:对等价类划分的补充。使用对于等价类而言稍高于其边界值或低于其边界值的一些特殊情况进行测试。
790 | - 因果图:自己看吧。
791 |
792 | 黑盒测试方法用于测试程序接口:
793 |
794 | - 是否有不正确或遗漏的功能?
795 | - 是否能正确接受输入、输出正确结果?
796 | - 是否有数据结构错误或外部信息访问错误?
797 | - 性能是否满足要求?
798 | - 是否有初始化或终止性错误?
799 |
800 | ## 五个软件测试的基本类型
801 |
802 | 单元测试:编码阶段运用白盒测试方法,对已实现的最小单位代码进行正确性检查。
803 |
804 | 集成测试:编码阶段在单元测试的基础上,运用黑盒测试方法检查被测单元的接口问题,并检查代码集成后各功能的完整性。
805 |
806 | 确认测试:开发后期,针对系统级的软件,验证实现的功能和性能是否与用户的要求一致。
807 |
808 | 系统测试:在开发环境或实际运行环境中,以系统需求分析规格说明书作为验收标准,对软硬件系统进行的一系列集成和确认测试。
809 |
810 | 验收测试:在实际运行环境中,试运行一段时间后,确认系统功能和性能符合生产要求。验收通过后交付用户使用。
811 |
812 | ```
813 | :)
814 | ```
815 |
--------------------------------------------------------------------------------
/计算机系统结构.md:
--------------------------------------------------------------------------------
1 |
79 |
80 | - Handler 分类法:把硬件结构分为三个层次,根据并行度和流水线分类。
81 |
82 | $T=
291 |
292 | 解:是静态流水线,不能动态切换流水线功能。因此应算完全部加法再算乘法。
293 |
294 |
295 |
296 | ## 流水线相关与冲突(五段流水线)
297 |
298 | 经典五段流水线:分为 IF、ID、EX、MEM、WB 五个周期。
299 |
300 | - IF:以程序计数器 PC 中的内容作为地址,从存储器中取出指令并放入指令寄存器 IR。PC 指向顺序的下一条指令。
301 | - ID:指令译码,用 IR 中的寄存器地址去访问通用寄存器组,读出所需操作数。
302 | - EX:
303 | - load 和 store 指令:ALU 把指定寄存器的内容与偏移量相加,形成访存有效地址。
304 | - ALU 指令:ALU 对从通用寄存器组读出的数据进行运算。
305 | - 分支指令:ALU 把偏移量与 PC 值相加,形成转移目标的地址。同时,判断分支是否成功。
306 | - MEM:
307 | - load 和 store 指令:根据有效地址从存储器读出相应数据,或把指定数据写入有效地址指向的存储单元。
308 | - 分支指令:如果分支成功,就把在前一个周期中计算好的转移目标地址送入 PC。分支指令执行完成。否则,不进行任何操作。
309 | - ALU 指令此周期不进行操作。
310 | - WB:把结果写入通用寄存器组。对于 ALU 指令,结果来组 ALU。对于 load 指令,结果来自存储器。
311 |
312 | 相关与流水线冲突:
313 |
314 | - 相关:两条指令之间存在某种依赖关系,以至于他们可能无法在流水线中重叠执行,或只能部分重叠。
315 |
316 | 相关有三种类型:数据相关(真相关)、名相关、控制相关。
317 |
318 | - 数据相关:下述条件之一成立,则称指令之间数据相关。
319 |
320 | - 指令 a 使用指令 b 产生的结果。
321 | - 指令 a 与指令 b 数据相关,而指令 b 与指令 c 数据相关。
322 |
323 | 第二个条件表明数据相关具有传递性。
324 |
325 | - 名相关:名指指令访问的寄存器或存储器的名称。两条指令使用了相同的名,但并没有数据流动关系,则称为名相关。
326 |
327 | - 反相关:指令 b 写的名与指令 a 读的名相同。反相关指令之间的执行顺序必须严格遵守,保证 b 读的值是正确的。
328 | - 输出相关:指令 b 与指令 a 写的名相同。输出相关指令的执行顺序也必须严格遵守,保证最后的结果是指令 b 写进去的。
329 |
330 | 名相关的两条指令之间没有数据的传送,只是恰巧用了相同的名。可以通过**换名技术**(改变指令中操作数的名)消除名相关。对于寄存器操作数换名称为**寄存器换名**。寄存器换名既可以通过编译器静态实现,也可以硬件动态完成。
331 |
332 | - 控制相关:分支指令和其它会改变 PC 值的指令引起的相关。需要根据分支指令的执行结果来确定后面该执行哪个分支上的指令。
333 |
334 | - 流水线冲突:对于具体的流水线,由于相关的存在,指令流中的下一条指令不能在指定的时钟周期开始执行。有三种类型,结构冲突、数据冲突、控制冲突。约定:当一条指令被暂停时,在该指令之后流出的所有指令都要被暂停,而之前流出的指令仍继续进行。
335 |
336 | - 结构冲突:某种指令组合因为硬件资源冲突而不能正常执行,称具有结构冲突。功能部件不是完全流水或硬件资源份数不够时发生。解决方法:插入暂停周期,或增加 Cache 等硬件资源。
337 |
338 | - 数据冲突:相关的指令靠得足够近,他们在流水线中的重叠执行或重新排序会改变指令读/写操作数的顺序,使结果错误,谓数据冲突。
339 |
340 | - 写后读冲突(RAW、WR):对应真数据相关。
341 | - 写后写冲突(WAW、WW):对应输出相关。写后写冲突仅发生在“不止一个段可以进行写操作,或指令被重新排序”的流水线中。前述五段流水线不发生 WAW 冲突。
342 | - 读后写冲突(WAR、RW):对应反相关。读后写冲突仅发生在“有些指令的写结果操作被提前、有些指令的读操作被滞后,或指令被重新排序”的流水线中。前述五段流水线不发生 WAR 冲突。
343 |
344 | 使用定向技术(旁路技术)减少数据冲突引起的停顿:将计算结果从其产生的地方(ALU 出口)直接送到其他指令需要它的地方(ALU 的入口),可以避免停顿。
345 |
346 | 需要停顿的数据冲突:对于无法通过定向技术解决的数据冲突,需要设置一个“流水线互锁机制”的功能部件保证指令正确执行。其作用是检测和发现数据冲突,并使流水线停顿(stall)直至冲突消失。
347 |
348 | 依靠编译器解决数据冲突:在编译时让编译器重新组织指令顺序来消除冲突。称为**指令调度**或**流水线调度**。
349 |
350 | - 控制冲突:分支指令和其它会改变 PC 值的指令引起的冲突。处理分支指令最简单的方法是“冻结”“排空”流水线,在 ID 段检测到分支指令时,立即暂停流水线输入,进行 EX、MEM,确定是否分支成功并计算出新的 PC 值,这样带来 3 个时钟周期的延迟。だめ。
351 |
352 | 为了减少**分支延迟**,可以采取:① 尽早判断出(或猜测)分支转移是否成功。② 尽早计算出分支目标地址。通过编译器减少分支延迟的方法:
353 |
354 | - 预测分支失败:在检测到分支指令之后,沿分支失败的分支继续处理指令。当确定分支是失败时(预测分支失败成功),流水线正常流动。否则(预测分支失败失败),把在分支指令之后取出的指令转化为空操作,按分支目标地址重新取指执行。
355 |
356 | - 预测分支成功:没用。除非已知分支目标地址。
357 |
358 | - 延迟分支:把无论是否分支成功都必须执行的指令,紧接着分支指令执行(放入延迟槽),延迟槽中的指令替换了原本必须插入的暂停周期。绝大多数延迟槽仅容纳一条指令。
359 |
360 | 延迟槽指令的调度方法三种:
361 |
362 | - 从前调度:从分支指令之前找一条指令插入延迟槽。被调度的指令必须与分支无关,适合任何情况。
363 | - 从目标处调度:分支成功时起作用。分支成功概率高时采用。
364 | - 从失败处调度:分支失败时起作用。不能从前调度时可用。
365 |
366 | > 条件转移分支指令通常要在 MEM 段末尾才会使 PC 内容发生改变。对于 k 级流水线,需停顿 k-1 个时钟,直到 PC 中生成新地址后,才能取出下一条指令。
367 | >
368 | > 最坏情况:分支指令占比为 p,预测分支失败,分支转移成功的概率为 q。k 段流水线执行 n 条指令,最坏需要多停顿$pqn(k-1) \Delta t$时间。流水线最大吞吐率为$\lim\limits_{n \to \infty} \frac{n}{(k+n-1) \Delta t + pqn(k-1) \Delta t}= \frac{1}{[1+pq(k-1)] \Delta t}$。(若没有分支指令最大吞吐率为$\frac{1}{\Delta t}$)
369 |
370 | # 第五章指令级并行及其开发
371 |
372 | > 指令集并行基础概念
373 | >
374 | > 指令的动态调度技术(硬件方法):
375 | >
376 | > - 乱序执行调度的概念
377 | > - 记分牌算法
378 | > - Tomasulo 算法
379 | > - 基于硬件的前瞻执行
380 | >
381 | > 动态分支预测技术:
382 | >
383 | > - 分支历史表 BHT
384 | > - 分支目标缓冲器 BTB
385 | >
386 | > 多流出技术:超标量、超流水、VLIW、静态指令调度
387 |
388 | ## 指令集并行基础概念
389 |
390 | **指令集并行(ILP)**是指令间存在的一种并行性,使计算机可以并行执行两条及以上的指令。
391 |
392 | 开发 ILP 的途径:① 资源重复(重复设置多个部件同时执行多条指令)② 采用流水线技术使指令重叠并行执行。
393 |
394 | 开发 ILP 的方法:分为硬件方法和软件方法。本章为硬件方法。
395 |
396 | 流水线处理机的实际 CPI:$CPI_{流水线} = CPI_{理想}+停顿_{结构冲突}+停顿_{数据冲突}+停顿_{控制冲突}$。减少停顿以提高降低 CPI、提高 IPC。
397 |
398 | 基本程序块:一串连续的代码除了入口和出口之外,没有其他的分支指令和转入点,称为一个**基本程序块**。
399 |
400 | 循环并行性:循环的不同迭代之间存在的并行性。本章不讨论。
401 |
402 | 相关与指令级并行(概念):
403 |
404 | - 程序顺序:由原来程序确定的在完全串行方式下指令的执行顺序。我们需要尽可能地开发并行性,只有在可能导致错误的情况下,才保持程序顺序。
405 | - 保持异常行为:无论怎么改变指令的执行顺序,都不能改变程序中异常的发生情况。实际使用中:指令执行顺序的改变不导致程序中发生新的异常。
406 | - 数据流:数据值从其产生者指令,到其消费者指令的实际流动。分支指令使得数据流有动态性,分支指令的执行结果决定哪条指令才是所需数据的产生者。 之后讨论的**前瞻执行**不仅解决异常问题,还能在保持数据流的情况下减少控制相关对开发 ILP 的影响。
407 |
408 | ## 指令的动态调度技术(硬件方法)
409 |
410 | **静态调度**在编译期间,把相关的指令拉开距离来减少可能产生的停顿。
411 |
412 | **动态调度**能在保持数据流和异常行为的情况下,通过硬件对指令执行顺序重排,减少数据相关导致的停顿:
413 |
414 | - 优点:① 能处理编译时情况不明的相关(如存储器访问相关),并简化编译器。② 使同一段代码能在不同流水线上高效地执行。
415 | - 代价:硬件复杂性显著增加。
416 |
417 | 动态调度基本思想:
418 |
419 | - 将流水线的 ID 段分为“IS 流出”、“RO 读操作数”两个阶段。这样使得指令**乱序执行**,指令的完成也是**乱序完成**。
420 | - 乱序执行带来新问题:
421 | - RW 冲突和 WW 冲突。
422 | - 异常处理复杂化。**不精确异常**:异常时处理机现场与严格按程序顺序执行时现场不同。不精确异常使得异常处理后难以继续执行原有程序。产生不精确异常的原因:当指令 a 导致异常发生时,流水线已经执行程序顺序是 a 之后的指令,还没完成程序顺序是 a 之前的指令。
423 |
424 | 典型动态调度算法:**记分牌算法、Tomasulo 算法**。主要考虑的因素:资源(结构)利用效率、三种数据相关。
425 |
426 | ### 记分牌算法
427 |
428 | 记分牌的目标:尽早执行没有结构冲突和数据冲突的指令。
429 |
430 | 指令执行的步骤:每条指令的执行过程分为 4 段——IS 流出、RO 读操作数、EX 执行、WB 写结果。(主要考虑浮点操作,运算在浮点寄存器之间进行,不涉及 MEM 段)
431 |
432 | - 流出:若流出指令所需的功能部件空闲,并且所有其他执行中的指令的目的寄存器与该指令不同,记分牌就向功能部件流出该指令,并修改记分牌内部的记录表。如果存在结构相关或 WAW 冲突,则该指令不流出。(在流出段解决了 WAW 冲突)
433 | - 读操作数:记分牌检测源操作数的可用性。一旦数据可用,它就通知功能部件从寄存器中读出源操作数并开始执行。否则就等待写完成之后再读出(锁定)(读操作数段动态地解决了 RAW 冲突,并可能导致指令乱序执行)
434 | - 执行:取到操作数后,功能部件开始执行。结果产生后,通知记分牌它已完成执行。这一步相当于五段流水线中的 EX。但在浮点流水线中,这一段可能占用多个时钟周期。其他指令如果不与正在执行或被锁定指令相关,可提前执行或完成。
435 | - 写结果:记分牌知道执行部件完成执行后,检测是否存在 WAR 冲突(前面某条指令的源操作数寄存器,是本指令的目标寄存器)。如果不存在(或已有的 WAR 冲突已消失),记分牌就通知功能部件把结果写入目的寄存器,并释放该指令执行所用的所有资源。否则必须等待。这一步对应五段流水线的 WB。
436 |
437 | 记分牌记录信息的组成:
438 |
439 | - 指令状态表:记录正在执行的各条指令已经进入哪一段。
440 | - 功能部件状态表:记录各个功能部件的状态。每个功能部件有 1 项,每项由 9 个字段组成。
441 | - Busy:忙标志,功能部件是否正忙。
442 | - Op:正在或将要执行的操作。
443 | - $F_i$:目的寄存器编号,$F_j,F_k$:源寄存器编号。(按指令中的顺序排列)
444 | - $Q_j,Q_k$:向源寄存器$F_j,F_k$写数据的功能部件。
445 | - $R_j,R_k$:源寄存器标志位,“yes”表示$F_j/F_k$的操作数**可用——就绪且未被取走(产生且未读)**。否则“no”。
446 | - 结果寄存器状态表:每个寄存器在该表中有一项,用于指出哪个功能部件(编号)将把结果写入该寄存器。如果正运行的指令全都不以它为目的寄存器,则设置为“no”或 0。
447 |
448 |
449 |
450 | 记分牌算法的冲突分析:
451 |
452 | - WW 冲突会导致记分牌在流出阶段停顿。
453 |
454 | - RW 冲突会导致记分牌在写结果阶段停顿。
455 |
456 | - 真相关引起的 WR 冲突会导致记分牌在读操作数阶段停顿。
457 |
458 | - 资源冲突会导致记分牌在流出阶段停顿。
459 |
460 | 通过记分牌,避免了 WW、WR、RW 冲突及结构冲突。
461 |
462 | ### Tomasulo 算法
463 |
464 | 又称公共数据总线法。通过分散控制,处理数据相关和乱序执行。
465 |
466 | 基于 Tomasulo 算法的 MIPS 处理器浮点部件主要结构:
467 |
468 | - 指令队列:存放部件送来的指令,FIFO、顺序流出。
469 | - 保留站:保存流出到本功能部件执行的指令信息(包括操作码、操作数、解决冲突的信息)。每个保留站有一个标识字段,唯一地标识了该保留站。
470 | - 访存部件缓冲器:load 缓冲器和 store 缓冲器存放读/写存储器的数据或地址(类似保留站)。
471 | - 公共数据总线 CDB:重要的数据通路。所有计算结果都送到 CDB,它直接播送到各个需要的地方。多个执行部件且采用多流出的流水线中有多条 CDB。计算结果先送到 CDB 再传送到功能部件,不需要经过寄存器。
472 | - 浮点寄存器 FP:通过总线连接到各功能部件,通过 CDB 连接到 store 缓冲器。
473 | - 运算部件:浮点加法器和浮点乘法器。
474 |
475 | 核心思想:
476 |
477 | - 记录和检测指令相关,把发生 WR 冲突的可能性减到最小。
478 | - 通过寄存器换名技术消除 RW 冲突和 WW 冲突:寄存器换名通过保留站和流出逻辑共同完成。当指令流出时,如果其操作数还没有计算出来,则将该指令中相应的寄存器号换名为将产生这个操作数的保留站的标识。当指令流出到保留站之后,其操作数寄存器号要么换成了数据本身(已就绪状态),要么换成了保留站标识,而不再与寄存器相关。这样消除了 WAR 冲突。
479 |
480 | 指令执行的步骤:三步。
481 |
482 | - 流出:从指令队列头部取指。如果该指令操作所要求的的保留站有空闲的,则把该指令送到该空闲保留站(设为 r)。如果操作数未就绪,则进行寄存器换名。另外,进行目的寄存器预约,将其设置为接收保留站 r 的结果(相当于提前完成了写操作)。由于指令顺序流出,同一个结果寄存器的预约结果肯定是最后一条指令的,消除了 WAW 冲突。如果没有空闲保留站,指令不能留出(发生结构冲突)。
483 | - 执行:如果某个操作数未被计算出来,保留站监视 CDB,结果产生保留站立刻从 CDB 获取数据。操作数都就绪后保留站用相应的功能部件开始执行指令操作。(靠推迟执行的方法解决 RAW 冲突)load 指令执行条件是存储器部件就绪,而 store 指令执行的条件是要存入存储器的数据到达并且存储器部件就绪。
484 | - 写结果:功能部件计算完毕后将结果放到 CDB 上,等待该结果的寄存器和保留站同时从 CDB 获取数据。
485 |
486 | 保留站字段:
487 |
488 | - Op:对源操作数进行的操作。
489 | - $Q_j,Q_k$:将产生源操作数的保留站号。0 表示操作数已就绪且在$V_j/V_k$中,或者不需要操作数。
490 | - $V_j,V_k$:源操作数的值,如`Reg[F4]`。对于每一个操作数来说,V 或 Q 字段只有一个有效。
491 | - Busy:“yes”表示本保留站或缓冲单元正忙。
492 | - A:仅 load 和 store 缓冲器有该字段。开始先存放指令中的立即数字段,地址计算后存放有效地址。
493 |
494 | 
495 |
496 | 
497 |
498 | Tomasulo 算法的优点:
499 |
500 | - 冲突检测逻辑和指令执行控制是分布的(通过保留站和 CDB 实现)。
501 | - 通过寄存器换名和预约,消除了 WW 冲突和 RW 冲突导致的停顿。
502 | - 通过延迟执行解决 WR 冲突。
503 | - 保留站、寄存器组均有附加信息,用于检测和消除冲突。
504 |
505 | ## 动态分支预测技术
506 |
507 | 开发的 ILP 越多,控制相关的制约就越大:① 在 n 流出(每个时钟周期流出 n 条指令)处理机中,遇到分支指令的可能性增加 n 倍。② 根据 Amdahl 定律,机器 CPI 越小,控制停顿的相对影响越大。
508 |
509 | 动态分支预测技术目的:① 预测分支是否成功。② 尽快找到分支目标地址或指令。
510 |
511 | 动态分支预测技术需要解决的问题:① 如何记录分支的历史信息。② 如何根据这些信息预测分支去向,甚至提前取出分支目标指令。
512 |
513 | ### 分支历史表 BHT
514 |
515 | 记录分支指令最近几次的执行情况(成功或失败),并据此预测。使用两个 bit 存储历史分支信息。
516 |
517 |
518 |
519 | BHT 两个步骤:
520 |
521 | - 分支预测:当分支指令到达 ID 时,从 BHT 读出的信息进行分支预测。若正确就继续处理后续指令。若错误就作废预取指令,恢复现场,并从另一条分支路径重新取指。
522 | - 状态修改:修改 BHT 状态。
523 |
524 | ### 分支目标缓冲器 BTB
525 |
526 | 分支目标缓冲器 Branch-Target Buffer 作用:
527 |
528 | - 将分支成功的分支指令的地址,和它的分支目标地址都放到一个缓冲区中保存。
529 | - 缓冲区以分支指令的地址作为标识,得到转移目标指令地址信息。
530 | - 在 IF 段访问 BTB,将分支的开销降为 0。
531 |
532 |
533 |
534 |
535 |
536 | | 指令在 BTB 中? | 预测 | 实际情况 | 延迟周期 |
537 | | --------------- | ---- | -------- | -------- |
538 | | 是 | 成功 | 成功 | 0 |
539 | | 是 | 成功 | 不成功 | 2 |
540 | | 否 | | 成功 | 2 |
541 | | 否 | | 不成功 | 0 |
542 |
543 | (延迟两个周期:预测失败需要更新 BTB 的项,花费 1 个周期。对 BTB 项进行更改时需要停止取值,又花费 1 个周期)
544 |
545 | ### 基于硬件的前瞻执行(略)
546 |
547 | 基本思想:对分支结果预测,按预测结果继续取指、流出、执行后续指令,但结果不写回寄存区或存储器,而是写入**再定序缓冲器 ROB**,等到指令“确认”之后再写回寄存器或存储器。
548 |
549 | 前瞻执行机制下指令的执行步骤:流出——执行——写结果到 ROB——确认。
550 |
551 | ## 多流出技术
552 |
553 | 一个时钟周期内流水线流出指令条数称为 ILP。
554 |
555 | 在每个时钟周期内流出多条指令,CPI<1。
556 |
557 |
558 |
559 | 两种多流出处理机:
560 |
561 | - 超标量:
562 | - 每个时钟周期流出的指令条数不固定,但有上限 n。这种处理机称为 n 流出(n 发射)处理机。
563 | - 可以通过编译器静态调度,也可以基于 Tomasulo 算法进行动态调度。
564 | - 超长指令字 VLIW(Very Long Instruction Word):
565 | - 单一的流或控制器:在每个周期流出指令条数固定,这些指令构成一个长指令(指令包),通常大于 100 位。
566 | - 指令包中的指令之间并行性通过指令显式地表示出来。
567 | - 大量的数据通路和功能部件:设置多个功能部件。
568 | - 超长指令字包含多个控制字段:指令字被分割成一些字段,每个字段称为一个**操作槽**,直接独立控制一个功能部件。
569 | - 超长指令字的生成由编译器完成:指令调度由编译器静态完成,流出时无需复杂冲突检测。
570 |
571 |
572 |
573 | 静态调度的多流出技术:
574 |
575 | - 每个时钟周期流出 n 条指令。称为流出包。
576 | - 指令按序流出,在流出时由流出部件进行冲突检测:
577 | - 第一阶段:进行流出包内的冲突检测,选出初步判定可以流出的指令。
578 | - 第二阶段:检测选出的指令与正在执行的指令是否冲突。
579 |
580 | 超流水线处理机:每 1/n 个时钟周期流出一条指令。
581 |
582 |
583 |
584 | # 第四章 向量流水处理机
585 |
586 | > 向量处理方法:横向处理、纵向处理、纵横处理
587 | >
588 | > 向量流水处理机结构:
589 | >
590 | > - 存储器-存储器结构:纵向处理
591 | > - 寄存器-寄存器结构:纵横处理
592 | >
593 | > 提高向量处理机性能的方法:
594 | >
595 | > - 多功能部件的并行操作
596 | > - 链接技术 WD 相关
597 | > - 分段开采
598 | > - 多处理机系统结构
599 | >
600 | > 向量处理机性能的主要参数:
601 | >
602 | > - 一条向量指令的处理时间
603 | > - 一组向量指令的处理时间
604 | > - 向量处理机的性能评估(MFLOPS 或一个浮点运算的时间)
605 |
606 | ## 向量基本概念和处理方法
607 |
608 | 向量处理机:设置了向量数据表示和向量指令的流水线处理机。
609 |
610 | 向量处理机方式:
611 |
612 | - 横向处理方式:向量按 column 的方式从左到右横向进行。适用于一般处理机,不适用于向量处理机的并行处理。
613 | - 纵向处理方式:向量按 row 的方式从上到下纵向进行。将整个向量按相同运算处理完之后,再进行别的运算。不产生数据相关,对向量长度 N 没有限制。
614 | - 纵横处理方式:把向量分成若干组,组内按纵向方式处理,依次处理各组。对向量长度 N 没有限制,但以每 n 个元素分一组处理,n 的值固定。
615 |
616 | ## 向量处理机结构
617 |
618 | 存储器-存储器结构:适合纵向处理方式。
619 |
620 | - 源向量和目的向量都存放在存储器中,运算的中间结果需要送回存储器。
621 | - 对应的向量分量能并发访问,计算结果能并行地保存。
622 | - 普通存储器的 3 倍带宽:3 条独立数据通路,一个时钟周期读出两个操作数并写回一个结果。
623 |
624 | 寄存器-寄存器结构:适合纵横处理方式。
625 |
626 | - 若干级中间存储器形成有层次结构的存储系统,相当于寄存器。
627 | - 访问中间存储器速度更快。
628 | - 通过中间存储器形成新的数据结构,高效。
629 | - 中间存储器高带宽、多种寻址方式、支持流水线链接技术。
630 |
631 | 向量流水线并行条件:
632 |
633 | - 功能部件不冲突
634 | - 源寄存器不冲突
635 | - 结果寄存器不冲突
636 | - 数据不相关
637 |
638 | ## 提高向量流水处理机性能
639 |
640 | - 设置多个功能部件并行
641 | - 链接技术:向量运算输出可直接作为输入使用,结果寄存器立即成为后继指令操作数寄存器。是定向技术的发展,利用 WR 数据相关性。数据进(出)每个功能部件需 1 个时钟周期。
642 | - 分段(循环)开采:向量长度大于向量寄存器长度时,对向量进行分段处理,系统完成,对程序员透明。
643 | - 多处理机
644 |
645 | 链接技术:
646 |
647 | - 链接条件:
648 | - 空间:无向量寄存器、功能部件冲突
649 | - 时间:
650 | - 仅上一指令的第 1 个结果分量送入结果向量寄存器的时钟周期可链接。
651 | - 若后一指令源操作数分别是前两指令的结果寄存器,前两指令产生结果时间必须相等。向量长度必须相等。
652 | - 链接运算时间:① 对于链接形成的大流水线,其通过(装入)时间为$a+7+c+d+3+f+g+4+i+f+2$(没有$l$),若传送时间全为 1,则通过时间为 23。② 若向量长度为 N,计算完毕需要的时间是$23+N$。
653 |
654 |
655 |
656 | ## 向量处理机性能评价
657 |
658 | 向量处理指令特点:
659 |
660 | - 一条指令得到若干运算结果。
661 | - 执行时间与向量长度有关。
662 | - 向量处理中包含标量指令。
663 | - CPI、MIPS 不能反映向量处理性能。
664 |
665 | 向量处理机性能参数:
666 |
667 | - 向量指令处理时间$T_{vp}$:
668 | - 一条向量指令执行时间$T_{vp} = (T_{start}+n) T_c$,$T_{start}$为从第一条指令开始执行,到还差一个时钟周期就产生第一个结果所需时钟周期数。
669 | - 一组向量指令总执行时间$T_{all} = (T_{start} + mn) T_c, \space T_{start} = \sum_{i=1}^m T_{start}^{(i)}$。链接情况下该组指令总启动时间+编队个数$\times$向量长度。
670 | - 分段开采时:。
671 | - 向量流水线最大性能$R_\infty$:$\lim\limits_{n \to \infty} \frac{向量指令序列中浮点运算次数 \times 时钟频率}{向量指令序列执行所需时钟周期数}$
672 | - 半性能向量长度$n_{1/2}$:向量处理机性能为其$R_\infty$一半时所需向量长度。与流水线建立时间有关。
673 | - 向量长度临界值$n_v$:向量流水方式的处理速度优于标量串行方式的处理速度时,向量长度的临界值。
674 |
675 | # 第九章 互连网络
676 |
677 | > 互连函数
678 | >
679 | > 互连网络的结构参数与性能指标
680 | >
681 | > 静态互联网络
682 | >
683 | > 动态互联网络
684 | >
685 | > 消息传递机制
686 |
687 | 定义:互连网络是开关元件按一定拓扑结构和控制方式构成的网络。用于实现计算机系统中结点之间的相互连接。
688 |
689 | 三要素:互连结构、开关元件、控制方式。
690 |
691 | ## 互连函数
692 |
693 | 循环表示法:$(x_0x_1x_2 \cdots x_{j-1})$,表示$I(x_0x_1x_2 \cdots x_{j-2}x_{j-1}) = x_1x_2x_3 \cdots x_{j-1}x_0$。$j$称为循环长度。
694 |
695 | 计算互连时算该处理器连接到的处理器、连接到该处理器的处理器。
696 |
697 | 基本互连函数:
698 |
699 | - 恒等函数:$I(x_{n-1}x_{n-2}...x_1x_0) = (x_{n-1}x_{n-2}...x_1x_0)$
700 | - 交换函数:用于构造立方体和超立方体互连网络。$Cube_1(x_{n-1}x_{n-2}...x_1x_0)=x_{n-1}x_{n-2}...\bar{x_1}x_0$实现二进制地址编号中第 k 位互反的输入端和输出端之间的连接。互连函数种类为$log_2N,N为结点个数$。
701 | - 均匀洗牌函数:用于构造 Omega 和逆 Omega 网络。将入线均分,前一部分和后一部分按顺序一个接一个交叉连接。
702 | - 均匀洗牌$\sigma(x_{n-1}x_{n-2}...x_1x_0)=x_{n-2}x_{n-3}...x_1x_0x_{n-1}$,将入线二进制地址循环左移一位得到。
703 | - 逆均匀洗牌$\sigma(x_{n-1}x_{n-2}...x_1x_0)=x_0x_{n-1}x_{n-2}...x_2x_1$,循环右移。
704 | - 第 k 个子函数:把互连函数作用于低 k 位。第 k 个超函数:把互连函数作用于高 k 位。
705 |
706 |
707 |
708 | - 蝶式函数:$\beta (x_{n-1}x_{n-2}...x_1x_0)=x_0x_{n-2}...x_1x_{n-1}$。将输入端二进制最高位$x_{n-1}$与最低位$x_0$互换位置得到。
709 | - 反位序函数:$\rho (x_{n-1}x_{n-2}...x_1x_0)=x_0x_1...x_{n-2}x_{n-1}$,把输入二进制编号各位次序颠倒。
710 | - 移数函数:$\alpha (x) = (x \pm k)\mod N$把二进制编号模 N。
711 |
712 |
713 |
714 | - $PM2I$函数:加减$2^i$。构成数据变换网络的基础。实质为 1、2、4 个环形网。
715 | - $PM2_{+i}(x) = (x + 2^i)\mod N$,$0 \le i \le log_2N$。
716 | - $PM2_{-i}(x) = (x - 2^i)\mod N$
717 |
718 |
719 |
720 | ## 结构参数与性能指标
721 |
722 | 6 个结构参数:
723 |
724 | - 网络规模$N$
725 | - 结点度$d$:结点所连接的边数(入度、出度)
726 | - 节点距离:从一个结点出发到另一个结点,经过边数的最小值。
727 | - 网络直径$D$:网络中结点距离的最大值。(越小越好)
728 | - 等分宽度$b$:把网络均分为结点数相同的两半,在各种切法中,沿切口边数的最小值。线等分宽度$B = b \times w$,$w$为通道宽度(bit),等分宽度反映网络最大流量。
729 | - 对称性
730 |
731 | 两类性能指标:时延和带宽
732 |
733 | - 时延:
734 | - 通信时延
735 | - 软件开销:源节点、目的结点收发消息软件的执行时间。取决于软件内核。
736 | - 通道时延:消息长度/通道带宽。通常由瓶颈段带宽决定。
737 | - 选路时延:与传送路径上结点数成正比。
738 | - 竞争时延:避免、解决争用所需的时间。很难预测,取决于网络状态。
739 | - 网络时延:通道时延+选路时延。由网络硬件决定,与软件、传输状态无关。
740 | - 带宽
741 | - 端口带宽:单位时间内从该端口传输到其他端口的最大信息量。
742 | - 对称网络中各端口带宽相等=网络端口带宽。
743 | - 非对称网络的端口带宽=所有端口带宽的最小值。
744 | - 聚集带宽:网络从一半节点到另一半节点,单位时间传送的最大信息量。
745 | - 等分带宽:与等分宽度对应的切平面中,所有边合起来,单位时间传送的最大信息量。
746 |
747 | ## 静态与动态互连网络
748 |
749 | 静态互连网络:各结点之间固定连接通路,运行中不能改变。
750 |
751 | - 线性阵列:一维线性网络,N 个结点用 N-1 个链路连成一行。
752 | - 环和带弦环:用一条附加链路将线性阵列端结点连接,构成环。
753 | - 带弦环:增加链路越多,结点度越高,网络直径越小。
754 | - 全连接网络:极端情况。
755 | - 循环移数网络:在环上每个结点到所有与其距离为 2 的整数幂的结点之间都增加一条附加链路。
756 | - 树状:k 层完全平衡二叉树有$N=2^k-1$个结点。
757 | - 星形:CS 模式。中心结点故障,整个系统瘫痪。
758 | - 胖树形:越靠近树根,树干越粗(通道带宽增加)。
759 | - 网格形、Illiac、环状网络:
760 |
761 |
762 |
763 | - 超立方体:n 维结点数$N=2^n$。对于一个结点,在每一维方向上都只和一个结点相连。
764 |
765 |
766 |
767 | 带环 n-立方体(n-CCC):用 k 个结点构成的环代替 k 维超立方体。结点度恒定,扩展性好。
768 |
769 |
770 |
771 | k 元 n-立方体:这啥
772 |
773 | | 类型 | 对称 | 结点度 | 直径 | 等分宽度 |
774 | | ------------- | ---- | -------------------- | ---------------------- | --------------------- |
775 | | 线性阵列 | 否 | 端结点 1,其余结点 2 | N-1 | 1 |
776 | | 环 | 是 | 2 | 双向环:N/2,单向环:N | 2 |
777 | | 全连接网络 | 是 | N-1 | 1 | |
778 | | 循环移数网络 | 否 | $2log_2N-1$ | $\frac{log_2N}{2}$ | |
779 | | 树状 | 否 | 最大为 3,根和叶为 1 | $2(k-1)$,k 为层数 | 1 |
780 | | 星形 | 是 | 中央 N-1,边缘 1 | 2 | $\lfloor N/2 \rfloor$ |
781 | | k 维网格形 | 是 | 内部 2k | $k(n-1)$ | |
782 | | Illiac | 否 | 4 | n-1(纯网格的一半) | 2n |
783 | | 环网形 | 是 | 4 | $2\lfloor N/2 \rfloor$ | 2n |
784 | | n 维超立方体 | 是 | n | n | $N/2$ |
785 | | 带环 n-立方体 | 是 | 3(扩展性好) | 2n | N/(2n) |
786 | | | | | | |
787 |
788 | 动态互连网络:由有源交换开关构成,链路可通过设置开关状态重构。网络边界上开关元件可与处理机相连。
789 |
790 | - 总线结构
791 |
792 | - 优点:结构简单、实现成本低。
793 | - 缺点:模块分时共享,带宽较窄。(可采用多总线或多层次总线解决)
794 |
795 | - 交叉开关网络
796 |
797 | - 可以无阻塞实现$n!$种置换。
798 | - 其他参考交换原理。
799 |
800 | - 多级互联网络
801 |
802 | - MIMD 和 SIMD 计算机都采用多级互连网络 MIN。
803 |
804 |
805 |
806 | - 区别:开关模块、控制方式、级间互连模式不同。
807 |
808 | - 控制方式:级控制、单元控制、部分级控制
809 | - 级间互连:参考交换原理。
810 |
811 | - 多级立方体网络:STARAN 网络、间接二进制 n 方体网络。
812 |
813 |
814 |
815 | - Omega 网络:级间全部采用均匀洗牌。N=8的多级立方体互连网络的另一种画法
816 |
817 |
818 |
819 | - 动态互联网络的比较:
820 |
821 | | 网络 | 优点 | 缺点 |
822 | | -------- | ---------------------- | -------------------------------------------------- |
823 | | 总线互连 | 简单、成本低 | 带宽较窄 |
824 | | 交叉开关 | 带宽和寻路性能最好 | 成本最高 |
825 | | 多机互连 | 模块化结构、扩展性较好 | 时延随级数增加而增加,复杂度比总线高很多,成本较高 |
826 |
827 | ## 消息传递机制
828 |
829 | RPC:Remote Process Call,远程进程调用。
830 |
831 | 消息寻径方案:
832 |
833 | - 消息格式:
834 | - 消息:节点间通信的逻辑单位,由若干“包”组成。包分为若干“片”。寻径信息和包序列号形成头片,其余是数据片。
835 | - 两类四种寻径方式:
836 | - 线路交换:建立物理通路再传递信息。时延$T=\frac{L+L_t \times (D+1)}{B}$。L 为包总长,$L_t$为建立路径所需最小包长度,D 为中间结点个数,B 为带宽。
837 | - 优点:带宽大,平均时延小,占用缓冲区小。
838 | - 适合动态和突发性的大规模并行处理数据传送。
839 | - 缺点:频繁建立物理通路时间开销大。
840 | - 包交换
841 | - 存储转发:$T_{SF} = \frac{L}{B}(D+1)$
842 | - 优点:简单。
843 | - 缺点:包缓冲区大、网络时延大。
844 | - 虚拟直通路:$T = T_f \times D + \frac{L}{B} \approx \frac{L}{B}$
845 | - 优点:通信时延与结点数无关。
846 | - 缺点:中间结点依然需要缓冲器、寻径阻塞时依然需要存储整个包,占用缓冲区大。
847 | - 虫蚀:最小单位为片。一个结点把头片送到下一个结点后,后面的各片才能依次送出。$T_{WH} \approx \frac{L}{B}$
848 | - 优点:每个结点缓冲器小,易于 VLSI 实现。有较小的网络传输延迟。
849 | - 缺点:一片被阻塞时,该消息所有片都被阻塞在结点。
850 |
851 | 死锁与虚拟通道:
852 |
853 | 流控制策略:
854 |
855 | 选播和广播寻径算法:
856 |
857 | # 第十三章 阵列处理机
858 |
859 | > 阵列处理机概念
860 | >
861 | > 阵列处理机的结构:
862 | >
863 | > - 分布式存储器的阵列机
864 | > - 共享存储器的阵列机
865 | >
866 | > 阵列处理机的特点(与流水线向量对比)
867 | >
868 | > 了解 ILLIAC IV 和 BSP 阵列处理器基本结构
869 | >
870 | > 典型算法:
871 | >
872 | > - 递归折叠求和算法
873 |
874 | ## 概念
875 |
876 | 操作模型用五元组表示:阵列处理机=$(N,C,I,M,R)$,N 为处理单元 PE 数、C 为控制部件 CU 直接执行的指令集、I 为 CU 广播至所有 PE 并行执行的指令集、M 为屏蔽方案集、R 为数据寻径功能集。
877 |
878 | 阵列处理机的特点:
879 |
880 | - SIMD
881 | - 利用并行性中的同时性,而非并发性。所有处理单元同时进行相同的操作。
882 | - 受互连网络结构限制,限制了适用的求解算法类别。
883 |
884 | ## 结构
885 |
886 | - 分布式存储器阵列机:
887 | - 主机:程序编辑、编译、调试,程序和数据装入(控制存储器)。
888 | - 指令送到阵列控制部件译码。标量指令由标量处理机执行,向量指令通过广播总线播送到所有 PE 执行。
889 | - 数据集划分后通过数据总线分布存放到 PE 的本地存储器 LM。
890 | - 有多个处理单元 PE,PE 有自己的本地存储器 LM。PE 之间通过数据寻径网络连接实现通信。
891 | - PE 的同步在控制部件的控制下由硬件实现,PE 在一个周期执行同一条指令。
892 | - 屏蔽逻辑控制某些 PE 在指定指令周期是否参与执行。
893 | - 主要区别在于数据寻径网络不同。IlliacIV:4 邻接网络、CM-2:嵌入网格的超立方体,等。
894 | - 大部分阵列处理机都是分布式存储器。易于构成 MPP。
895 |
896 |
897 |
898 | - 共享存储器
899 | - 集中设置存储器:共享多体并行存储器 SM——通过对准网络——连接 PE。
900 | - 存储模块数目等于或略大于 PE 数目。
901 | - 必须减少访存冲突,适合较少 PE 情况。
902 | - 所有阵列指令使用长度等于 PE 个数的向量操作数。
903 |
904 |
905 |
906 | ## 阵列处理机与流水线向量处理机对比
907 |
908 | - 均适合高速数值计算。阵列处理机有固定结构,与一定算法相联系。
909 | - 阵列处理机用大量处理单元对各分量运算,各单元同时进行相同操作,依赖空间并行技术。并行化程度高,潜力大。
910 | - 向量处理机基于流水线技术,时间并行性。
911 | - 阵列处理机每个单元负担多种处理功能,相当于向量机多功能流水部件,处理数据效率较低。
912 | - 互连网络设计和研究——阵列机研发重点。
913 | - 阵列机有一台标量处理机和一台前端机,向量处理部件是系统主体。机器性能主要取决于向量处理部分。也取决于标量运算速度和编译开销。
914 |
915 | ## 算法
916 |
917 | 某一向量含有 N 个向量元素,要求出元素累加和——将 N 个数的顺序相加转变为并行相加的问题。
918 |
919 |
920 |
921 | > 例:某分布存储器多处理机,8 个处理器立方体网连接,标号为 0 至 7。向量 X 的 16 个分量分别存放在 8 个 CPU 局部存储,X 的分量 i 放在标号为 i 模 8 的处理器中。标量 a 放在 0 号处理机中,最终结果 S 可放在任意处理器。在相邻处理器之间传送一个数据需要 2△t,乘法需要 4△t ,加法需要 1△t ,其它操作时间忽略不计。 求$S=\prod_{i=1}^{15}(X_i+a)$的最短执行时间。
922 | >
923 | > 解:总时间三部分构成:
924 | >
925 | > - 标量 a 广播时间 = $传送时间2\Delta t \times 网络直径3 = 6\Delta t$
926 | > - 阵列处理器处理时间 两次加法一次乘法 = $2 \times 1\Delta t + 4\Delta t = 6\Delta t$
927 | > - 递归折叠时间 传+乘 传+乘 传+乘 = $2+4+2+4+2+4 = 18\Delta t$
928 | >
929 | > 总时间:$6+6+18 = 30 \Delta t$
930 |
931 | # 第十章 多处理机
932 |
933 | > 多处理机概念:
934 | >
935 | > - MIMD 计算机的特点、分类:PVP/SMP/MPP/DSM/COW
936 | >
937 | > 对称式共享存储器多处理器(SMP)系统结构及特点
938 | >
939 | > 分布式共享存储器多处理器系统结构及特点
940 | >
941 | > - Cache 一致性问题成因和解决方法(写作废、写更新)
942 | > - 监听协议法
943 | > - 目录表协议(三种结构)
944 |
945 | ## MIMD 计算机特点、分类
946 |
947 | MIMD 是通用计算机系统的主要选择。
948 |
949 | 分类:
950 |
951 | - 并行向量多处理机 PVP,第四章:多台巨型向量处理机,共享存储器互连而成。
952 | - 大规模并行处理机 MPP,第十章:计算机模块作为一个结点,通过专用接口连接到互连网络上。
953 | - 集中式共享存储器多处理机 SMP:主流。
954 | - 分布式存储器多处理机
955 | - 分布式共享存储器系统 DSM
956 | - 机群多处理机 COW,第十二章:多个完整的计算机,通过商品化互连网络(以太网、ATM 等)相连。
957 |
958 | 特性:高性能、灵活性。
959 |
960 | ---
961 |
962 | 根据存储器组织结构分类:
963 |
964 | - 集中式共享存储器结构(对称式共享存储器多处理机 SMP):
965 |
966 | - 共享集中式物理存储器、通过总线或交换开关互连。
967 | - 也被称为UMA(Uniform Memory Access)结构。各处理器访问存储器时延相同。
968 | - 最流行结构。
969 |
970 | - 分布式存储器多处理机:存储器分布在各结点。
971 |
972 | - 要求高带宽互连网络。
973 | - 优点:① 若大多数需求为本地访存,可以降低存储器、互连网络带宽需求。② 本地存储器访问时延小。
974 | - 缺点:① 处理器之间通信复杂。② 处理器之间访问延迟较大。
975 |
976 | 分布式存储器多处理机两种存储器系统结构:
977 |
978 | - 共享地址空间(每个结点存储器统一编址):分布式共享存储器系统 DSM, 或 非均匀访存模型 NUMA
979 | - 共享逻辑地址空间。
980 | - 任意存储器可访问共享空间中任一单元。
981 | - 不同处理器上同一物理地址指向同一存储单元。
982 | - 具有共享存储器通信机制。采用访存类指令对地址进行读写。与 SMP 通信机制兼容、开销较低、可利用 Cache 技术减少通信频度和延迟和访问冲突、易于编程。
983 | - 在共享存储器上支持消息传递相对简单。
984 | - 独立地址空间(编址相互独立):多存在于机群 COW
985 | - 系统地址空间由多个独立地址空间组成。
986 | - 每个结点存储器只能本地存储器访问。
987 | - 每个存储器-处理器模块是一台单独计算机
988 | - 具有消息传递通信机制。采用显式传递消息请求操作或数据完成通信。硬件简单、显式通信、显式开销。
989 | - 在消息传递硬件上支持共享存储器相对困难。
990 |
991 | 并行处理的挑战:
992 |
993 | - 程序中的并行性有限(Amdahl 定律导致加速比不高)
994 | - 解决:采用并行性更好的算法
995 | - 通信开销较大
996 | - 解决:依靠系统结构支持使远程访问延迟降低、改进编程技术。
997 |
998 | 反应并行程序性能的重要度量:计算/通信比率。
999 |
1000 | ## Cache 一致性问题
1001 |
1002 | (写直达法:写入 Cache+写入存储器。写回法:写入 Cache。)
1003 |
1004 | 允许共享数据进入 Cache,会出现多个处理器 Cache 中都有同一存储块的副本。当某个处理器对 Cache 修改后,导致其 Cache 中的数据与其他处理器 Cache 中的数据不一致。
1005 |
1006 | 存储器一致性定义:对存储器中某个数据项的任何读操作,均能得到其最新写入的值。假设:
1007 |
1008 | - 写操作完成的定义:所有处理器均看到写的结果。
1009 | - 处理器任何访存操作不改变写的顺序。
1010 |
1011 | Cache 一致性协议:关键在于跟踪记录共享数据块的状态。
1012 |
1013 | - 目录式协议(互连网络)
1014 | - 监听式协议(总线)
1015 | - Cache 包含物理存储器中数据块的拷贝,保存各个块的共享状态信息。
1016 | - Cache 通常连在共享存储器的总线上。
1017 | - 当某个 Cache 需要访问时,它把请求放到总线上广播出去。
1018 | - 其他 Cache 控制器监听总线,判断它们自身是否有请求的数据块。如果有就进行相应操作。
1019 |
1020 | ---
1021 |
1022 | 写作废:在处理器对某个数据项写入之前,作废其他副本,保证它拥有对该数据项的唯一访问权。
1023 |
1024 | 写更新:当处理器对某数据想进行写入时,通过广播更新其他 Cache中所有该数据的副本。
1025 |
1026 | 性能区别:
1027 |
1028 | - 写作废消耗的总线和存储器带宽更少,多在基于总线的多处理机中采用。
1029 | - 写更新的延迟时间较小,适合在处理器个数不多时采用。
1030 |
1031 | ---
1032 |
1033 | ## 监听协议的基本实现技术
1034 |
1035 | - 处理器之间通过可以广播的互连机制(通常是总线)相连。
1036 | - 总线实现了写操作的串行化(获得总线控制权具有顺序性)。
1037 | - 一个处理器的 Cache 相应本地 CPU 访问时,如果涉及全局操作,Cache 控制器就要在总线上广播相应消息。
1038 | - 所有处理器一直监听总线,检测总线上的地址在他们的 Cache 中是否有副本。
1039 | - 监听的通常是 Cache 的标识(tag)。
1040 |
1041 | Cache 发送的消息:
1042 |
1043 | - RdMiss——读不命中:需要通过总线找到相应数据块的最新副本,调入本地 Cache。
1044 | - WtMiss——写不命中:需要通过总线找到相应数据块的最新副本,调入本地 Cache。写直达法:从主存中总可以取到最新值。写回法:最新值可能在某 Cache 中,也可能在主存中。(后续只讨论写回法)
1045 | - Invalidate——作废:通知其他各处理器作废其 Cache 中副本。
1046 |
1047 | 写作废:(S-Shared,只读。M-Modified,可读写。I-Invalid,不可读写)
1048 |
1049 |
1050 |
1051 |
1052 |
1053 | ## 目录协议的基本思想与实现技术
1054 |
1055 | 广播和监听的机制使得监听协议的可扩放性很差。
1056 |
1057 | 目录协议:
1058 |
1059 | - 主存中设置一个目录表,存放每个数据块(行)状态位和若干指针位(构成一个位向量),指针位对应处理机 Cache 。
1060 | - 状态位指示数据块状态,指针位指出哪些处理机 Cache 中有数据块副本。
1061 | - 当一个处理机访问本身 Cache 时,根据目录表,有选择地通知存有数据块的处理机 Cache。避免 Cache 的不一致性。
1062 | - 位向量:记录哪些 Cache 中有副本,称为共享集 S。
1063 |
1064 | 存储块的状态有三种:
1065 |
1066 | - 未缓冲:尚未调入 Cache。所有存储器 Cache 中都没有。
1067 | - 共享:一个或多个处理机拥有该块副本,且副本与存储器中的该块相同。
1068 | - 独占:仅一个处理机有该块副本,且该处理机已经进行了写操作。存储器中该块数据已过时。这个处理机称为该块拥有者。
1069 |
1070 | 三种结点:
1071 |
1072 | - 本地结点 A:发出访问请求的结点,假设访问的地址为 K。
1073 | - 宿主结点 B:包含所访问的存储单元及其目录项的结点 。
1074 | - 远程结点 C:拥有存储块副本的结点。可以和宿主结点是同一个结点,也可以不是。
1075 |
1076 | 结点间发送的消息:
1077 |
1078 | - 本地结点发送给宿主结点(目录)的消息:
1079 | - RdMiss(P,K):处理机 P 读地址 k 数据未命中,请求宿主提供该块,并把 P 加入共享集。
1080 | - WtMiss(P,k):处理机 P 写地址 k 数据未命中,请求宿主提供该块,并把 P 设为该块独占者。
1081 | - Invalidate(k):向所有拥有相应数据块副本的远程 Cache 发送消息,作废副本。
1082 | - 宿主结点发送给本地结点消息:
1083 | - DReply(D):把数据 D 返回给本地 Cache。
1084 | - Invalidate(k):作废远程 Cache 中地址 k 的数据块。
1085 | - Fetch(k):从远程 Cache 取地址 k 数据到宿主结点,并把地址 k 块状态改为共享。
1086 | - Fetch&Invalidate(k):从远程 Cache 取地址 k 数据到宿主结点,并作废远程 Cache 中该块。
1087 | - 远程结点发给宿主结点的消息:
1088 | - WtBack(k,D):把远程 Cache 中地址 k 数据块 D 写回到宿主结点。这是对 Fetch 或 Fetch&Invalidate 的响应。
1089 |
1090 |
1091 |
1092 |
1093 |
1094 | 目录三类结构:
1095 |
1096 | - 全映像目录:最大。
1097 |
1098 | - 每个目录项包含 N 位位向量,对应处理机个数。
1099 | - 优点:① 处理比较简单、速度快。② 每个 Cache 允许存放同一数据块的副本。
1100 | - 缺点:① 存储空间开销大。② 目录空间复杂度$O(N^2)$。③ 可扩放性很差。
1101 |
1102 |
1103 |
1104 | - 有限映像目录:较大。
1105 |
1106 | - 优点:提高可扩放性,减少目录占用空间。
1107 | - 核心思想:采用位数固定的目录项目。限制同一数据块在所有 Cache 中的副本总数。
1108 | - 缺点:当目录项中 m 个指针占满,而又需要新调入该块时,就需要在 m 个指针中选择一个废弃。
1109 |
1110 |
1111 |
1112 | - 链式目录:最小。
1113 |
1114 | - 用一个目录指针链表表示共享集合。主存只有一个指针位指向一个处理机 Cache。
1115 | - 优点:不限制副本个数,扩展性好。
1116 |
1117 |
1118 |
--------------------------------------------------------------------------------