Cha1代码实现
1软件架构概念:
2 是系统的一个或多个结构,它们由软件组件,组件的外部可见属性以及组件之间的关系组成。
3 组件的外部可见属性是指其他组件对该组件所做的假设。
4软件架构的多个结构:
5 静态的角度:
6 模块结构
7 分析类结构
8 类结构
9 动态的角度:
10 进程结构
11 数据流
12 控制流
13 使用结构
14 调用结构
15 层次结构
16 部署的角度:
17 物理结构
18
19架构不止是功能需求的结果
20
21Ch2:
22需求包含三要素:功能,质量,限制条件
23质量属性:系统在其生命周期过程中所表现出来的各种特征
24质量属性的关系:
25 一个质量属性的获取对其他质量属性可能产生正面或者负面的影响。
26 任何质量属性都不可能在不考虑其他属性情况下单独获取。
27质量属性举例:
28 运行时可见属性:性能,可用性,安全性
29 维护时可见属性:可修改,可扩展,可移植
30 易用性:
31 可学习性
32 可记忆性
33 错误避免
34 错误处理
35 满意度
36
37质量场景创建的参与人员:
38 最终用户
39 系统管理员
40 维护人员
41 客户
42 开发组织
43构架本身的质量属性:
44 一致性
45 正确性和完整性
46 可构建性
47生成质量属性场景的目的和意义:
48 帮助构架师生成有意义的质量属性需求
49 使质量属性需求的描述规范化
50 某一场景是一类场景的代表,系统将以完全相同的方式做出反应。
51构架的商业属性(限制):
52 上市时间
53 成本和收益
54 预期系统生命周期长短
55 目标市场
56 推出计划
57 与老系统的集成
58
59第三章:
60软件架构样式的种类:
61 以数据为中心
62 数据流
63 虚拟机
64 调用-返回
65 独立组件
66 C/S
67构架的异质性:
68 局部异质
69 层次异质
70 并行异质
71
72ISO/OSI七层参考模型:
73 应用层
74 表示层
75 会话层
76 传输层
77 网络层
78 数据链路层
79 物理层
80
81软件框架:
82 提取特定领域软件的共性部分形成的体系结构。
83框架和架构的关系:
84 框架不是构架。
85 构架确定了系统整体结构、层次划分、不同部分之间的协作等设计考虑。
86 框架比构架更具体,更偏重于技术。
87 一个框架对应一个架构,一个架构可以有多个框架。
88
89第四章:
90架构战术:影响质量属性的设计决策。
91架构策略:架构中所采用的战术的集合。
92可用性的战术:
93 错误检测的战术:
94 回声
95 心跳
96 异常
97 错误恢复的战术:
98 表决
99 主动冗余
100 被动冗余
101 备件
102 状态再同步
103 检查点/回滚
104 错误预防的战术:
105 进程监视器
106 从服务中删除
107 事物
108可修改性的战术:
109 局部化修改的战术:
110 维持语义一致性
111 预期期望的变更
112 泛化模块
113 限制可能的选择
114 防止连锁反应的战术:
115 信息隐藏
116 维持现有的接口
117 添加结构
118 添加适配器
119 提供一个占位程序
120 推迟绑定时间的战术:
121 运行时注册
122 配置文件
123 多态
124 组件更换
125 遵守已定义的协议
126实施性能的战术:
127 影响响应时间的两个基本因素:
128 资源消耗
129 阻塞时间:
130 资源争用
131 资源的可用性
132 对其他计算的依赖性
133 控制对资源需求的战术:
134 减少处理一个事件所需要的资源:
135 提高计算效率
136 减少计算开销
137 减少需要同时处理:
138 管理事件率
139 控制采样频率
140 控制系统的使用:
141 限制执行时间
142 限制队列的大小
143 资源管理的战术:
144 引入并发
145 维持数据或计算的多个副本
146 增加可用资源
147 资源仲裁常见的调度策略:
148 先进/先出
149 固定优先级:语义重要性;时限时间单调;速率单调
150 动态优先级调度:轮转;时限时间最早优先
151 静态调度
152实施安全性的战术:
153 用于抵抗攻击的战术:
154 对用户进行身份验证
155 对用户进行授权
156 维护数据的机密性
157 维护完整性
158 限制暴露的信息
159 限制访问
160 检测攻击的战术:
161 从攻击中恢复的战术:
162 回复状态
163 识别攻击者
164易用性的战术:
165 运行时战术:
166 维持任务的一个模型
167 维护用户的一个模型
168 维护系统的一个模型
169 设计时战术:
170软件架构样式与战术的关系:
171 软件架构样式是从战略层面解决质量问题,战术是从具体部署上给出解决质量问题的局部策略。
172
173
174第五章:设计构架
175基于构架的开发步骤:
176 为软件系统创建一个商业案例
177 弄清系统需求
178 构建构架
179 正确表述此构架,并与有关各方进行交流
180 对此构架进行分析和评价
181 实现基于构架的系统并保证与构架相一致
182 系统维护时,构架文档应同步维护
183构架驱动的因素:
184 功能
185 质量
186 部分限制条件(限制条件的某个子集)
187
188良好架构的评判原则(判断题常考):
189 设计构架过程的建议:
190 构架的设计应该由一名设计师来完成
191 设计师应该全面掌握对系统的技术需求,以及对各项定性指标的优先级清单。
192 构架的文档完备,并采用所有人员认可的文档形式。
193 构架设计文档应让各风险承担者积极评估。
194 通过对构架分析,得出明确的定性与定量指标。
195 构架设计应该有助于具体实现。
196 允许构架带来一定的资源争用,并给出可行的解决方案。
197 关于构架的结构的建议:
198 构架由定义良好的模块组成,各个模块的功能划分应该基于信息隐藏。
199 模块的划分应体现出相互独立的原则。
200 把计算机基础结构的特性封装在一定的模块
201 构架尽量不依赖某个特定版本的商品产品或工具。
202 产生数据的功能和使用数据的功能应分属于不同的模块。
203 对并发系统,构架应充分考虑进程与模块结构的不对应。
204 进程编写要考虑到与特定处理器的关系,并容易改变关系。
205 构架应尽量采用一些已知的设计模式。
206
207ADD构架设计的步骤:
208 样本输入
209 选择要分解的模块
210 根据下列5个步骤对模块进行求精(重点):
211 从具体的质量场景和功能需求集合中选择构架驱动因素。
212 选择满足构架驱动因素的构架模式。
213 实例化模块并根据用例分配功能,使用多个视图进行表示
214 定义子模块的接口
215 验证用例和质量场景并对其进行求精,使它们成为子模块的限制。
216 对需求进一步分解的每个模块重复上述步骤。
217创建骨架系统:
218 思想:提供一种基本能力,以一种对项目有利的顺序实现系统的功能。
219 好处:
220 提高开发效率,鼓舞士气。
221 能更早发现复杂的依赖关系。
222 使开发人员更多关注最难实现的部分。
223 能够缩短系统集成时间,降低其成本,并使集成成本更明确。
224 便于评审和测试。
225 步骤:
226 实现处理构架组件交互的软件部分
227 选择组件逐步添加到系统中。
228 逐步进行测试。
229架构师的职责:
230 了解所在组织的业务目标,使架构更好地支持业务目标。
231 规划产品的开发与演进
232 规划和建设架构级的重用etc
233
234
235分析软件构架的原因(重要):
236 它是风险承担者之间的交流平台,是早期设计决策的体现,是可传递的模型。
237 软件质量不可能在软件开发的最后阶段追加上去,必须在设计之初就考虑到。
238
239第七章:
240构架评审:
241 成本:
242 人员时间成本
243 构架评审部门的组织开销
244 构架评审部分要求高级设计人员参与的代价(不就是人员时间成本吗。。。
245 收益:
246 及早发现构架中存在的问题
247 构架的改进
248 财务收益
249 强制为评审做准备
250 捕获构架设计的基本思想
251 验证需求的有效性
252评审实施:
253 按问题的重要性进行分类
254 强调那些与偶家相符或相悖的重要问题
255 必须记载评审中所提的每个问题
256构架评审的主要指导原则:
257 把由独立部门实施的正规的构架评审作为项目开发周期规划的一部分。
258 选择评审的最佳时间,尽早预审一次。
259 选择恰当的评审技巧
260 签署评审合同
261 限制所要评审的质量属性的个数
262 要保证评审小组中有构架方面的专家,领域专家,资料员,后勤员。
263 一定要有系统设计师。
264 收集各种场景数据,并在此基础上形成评审清单。
265
266第八章:
267架构权衡分析法(ATAM):
268 特点:不仅可以揭示出构架满足特定质量目标的情况,而且可以让我们更清楚地认识质量目标之间的联系。
269 输入:用场景集合捕获的质量要求。
270 输出:
271 简介的框架表述
272 表述清楚的业务目标
273 构架决策到质量需求的映射
274 所确定的敏感点和权衡点集合
275 有风险决策和无风险决策
276 风险主题的集合
277 阶段:
278 评估小组和项目决策者共同决定评估细节
279 评估小组收集信息和分析
280 风险承担着参与评估
281 评估小组自我检查和改进,提交书面报告
282 步骤(重点):
283 ATAM方法的表述
284 商业动机的表述
285 构架的表述
286 对构架方法进行分类
287 生成质量属性效用树
288 分析构架方法
289 集体讨论并确定场景优先级
290 再次分析构架方法
291 结果的表述
292
293第九章:
294 文档:
295 目的与作用:让不同的风险承担者都能快速找到和理解他们需要的信息。
296 基本原则:从读者的角度出发。
软件体系结构复习笔记
Note: This article is available in Chinese only. 本文暂无英文版本。
View original
Related
编译原理实验:词法分析器
实验一 设计实现简单语言的词法分析器 # 1、实验目的
通过该实验,熟练应用编译原理关于词法分析的基本理论和方法;学会用C/C++高级程序设计语言设计一个词法分析器;加深对编译原理理论的分析理解,提高实际操作和解决具体问题的能力。
geekos project 1 (ELF文件相关)
一、目的 熟悉 ELF 文件格式,了解 GeekOS 系统如何将 ELF 格式的可执行程序装入到内存,建立内核进程并运行的实现技术。 二、流程 1、修改 /geekos/elf.c 文件:在函数 Parse_ELF_Executable( ) 中添加代码,分析 ELF 格式的可执行文件(包括分析得出 ELF 文件头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充 Exe_Format 数据结构中的域值。 2、在 Linux 环境下编译系统得到 GeekOS 镜像文件。 3、编写一个相应的 bochs 配置文件。 4、在 bochs 中运行 GeekOS 系统显示结果。
geek OS project 0 (下)
现在我们环境已经搭好了,参考 geekos实验环境的搭建
在main.c中新加个函数,命名为projecto,函数的代码如下:
代码实现 1/* 2 * GeekOS C code entry point 3 * Copyright (c) 2001,2003,2004 David H. Hovemeyer <daveho@cs.umd.edu> 4 * Copyright (c) 2003, Jeffrey K. Hollingsworth <hollings@cs.umd.edu> 5 * Copyright (c) 2004, Iulian Neamtiu <neamtiu@cs.umd.edu> 6 * $Revision: 1.51 $ 7 * 8 * This is free software. You are permitted to use, 9 * redistribute, and modify it as specified in the file "COPYING". 10 */ 11 12#include <geekos/bootinfo.h> 13#include <geekos/string.h> 14#include <geekos/screen.h> 15#include <geekos/mem.h> 16#include <geekos/crc32.h> 17#include <geekos/tss.h> 18#include <geekos/int.h> 19#include <geekos/kthread.h> 20#include <geekos/trap.h> 21#include <geekos/timer.h> 22#include <geekos/keyboard.h> 23 24//added by 111qqz for project 0 25void project0() 26{ 27 Print("To Exit hit Ctrl + d.\n"); 28 Print("Hello from 111qqz !\n"); 29 Print("This is a test of project0 !\n"); 30 31 32 33 Keycode keycode; 34 while(1) 35 { 36 if( Read_Key(&keycode) ) //读取键盘按键状态 37 { 38 if(!( (keycode & KEY_SPECIAL_FLAG) || (keycode & KEY_RELEASE_FLAG)) ) //只处理非特殊按键的按下事件 39 { 40 int asciiCode = keycode & 0xff; //低8位为Ascii码 41 42 if( (keycode & KEY_CTRL_FLAG)==KEY_CTRL_FLAG && asciiCode=='d') //按下Ctrl键 43 { 44 Print("\n---------BYE!--------\n"); 45 Exit(1); 46 }else 47 { 48 Print("%c",(asciiCode=='\r') ? '\n' : asciiCode); 49 } 50 } 51 } 52 } 53} 54 55 56/* 57 * Kernel C code entry point. 58 * Initializes kernel subsystems, mounts filesystems, 59 * and spawns init process. 60 */ 61void Main(struct Boot_Info* bootInfo) 62{ 63 Init_BSS(); 64 Init_Screen(); 65 Init_Mem(bootInfo); 66 Init_CRC32(); 67 Init_TSS(); 68 Init_Interrupts(); 69 Init_Scheduler(); 70 Init_Traps(); 71 Init_Timer(); 72 Init_Keyboard(); 73 74 75 Set_Current_Attr(ATTRIB(BLACK, GREEN|BRIGHT)); 76 Print("Welcome 111qqz to GeekOS!\n"); 77 Set_Current_Attr(ATTRIB(BLACK, GRAY)); 78 79 80 81 // TODO("Start a kernel thread to echo pressed keys and print counts"); 82 //added by 111qqz for project 0 83 struct Kernel_Thread *thread; 84 thread = Start_Kernel_Thread(&project0,0,PRIORITY_NORMAL,false); 85 // added for project 0 end 86 87 88 /* Now this thread is done. */ 89 Exit(0); 90} 再修改Main函数,将TODO(“…..这一行替换为以下代码:
geekok project0(上)(实验环境的搭建)
apt-get install build-essential apt-get install bochs bochs-x nasm
此处下载的 bochs 应该是比较新的…如果之后遇到
failed assertion in init_idt :g_handlersizenoterr == g_handlersizeerr
这个错误,建议安装比较老的 nasm 版本,比如 2.08.02链接
下载 geekos-0.3 软件包,地址为: geekOS 下载地址
然后解压到 ~/work 目录。
OS课设之geek os 非最终版
参考了这篇博客
流程部分不再具体描述,可以参考上面的博客。
只详细给出我遇到的问题。
我的pc环境是:Linux 111qqz-ThinkPad-X200 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
linux mint 17.2 cinnamon
1apt-get install build-essential 2apt-get install bochs bochs-x nasm http://sourceforge.net/projects/geekos/files/ 下载geekos软件包并且解压