文章目录
Lec1 系统概述
①共性问题:
涌现性(只有系统完成了会呈现新的特性)
影响传播(蝴蝶效应)
不成比例效应(老鼠变大象被自身压垮)
取舍(二分分类问题)
②复杂性的原因:
需求太多
利用率高
③应对复杂性:
模块化
(模块间和模块内通信)
抽象
(接口与内部相互独立,避免影响传播)
(宽进严出)
分层
(低层模块构成高层模块)
(相比于模块化的O(N2),是O(N))
层级
(模块化变种,小模块在大模块中)
(相比于模块化的O(N2),是O(N))
④模块之间:
交互
(命名要访问的模块)
合作
(通过绑定完成特定功能)
⑤设计原则:
迭代:
(设计简单可运行系统,满足问题子集,逐步改进)
(系统要易于修改)
⑥系统的四个基本特性:
正确性
一致性
(学院派)
简单性
完整性
(工业派)
Lec2 设计基本的计算机系统
①抽象三大件
(1)存储
虚拟内存
~原子性:
(程序要么完整执行,要么不执行)
~一致性:
(读到的一定是最新写的)
(2)解释器
处理器
(3)通信链路
以太网
②命名
名称映射算法
value ← resolve (name, context)
(由名称和上下文同时决定)
递归要避开软链接
(软链接到目录容易产生链路环)
(软链接的数据可能为空)
Lec3 命名
①解决命名冲突问题
1.跟踪上下文
2.使用间接名称
3.闭包
②元数据
1.定义:不包含在对象内部,或包含却难以查找的信息。(文件的元数据:名称,标识符,类型,时间,版本)
2.名称重载导致元数据改变,破坏模块化和抽象。purename导致寻址时只能通过搜索,太耗时。
③地址
1.特殊的名称
2.不应暴露给用户(设置转发器)
④唯一名称
1.生成唯一名称
(连续整数,时间戳,伪随机数)
⑤用户友好性
1.牺牲高效性
2.大小写敏感在数据库使用方面不大友好
3.交叉链接系统无法清楚引用关系
⑥生命周期
名称,值的生命周期长于绑定
⑦URL
1.URL含义:
http:协议类型,定位解析器
www.xxx.com:服务器域名
/xxx/xxx.html:在服务器中查找文件
2.域名大小写不敏感
3.若URL包含文件系统信息咋整
(间接URL跳转)
Lec4 模块化
①模块化好处
1. 减少设计复杂度
2. 限制故障传播(错误只能通过消息传播)
3. 安全隔离
②软模块化的坏处
1.编程错误导致栈溢出
2.编译错误导致参数和返回值错误
3.编译错误,未按约定保护寄存器
4.被调用者挂起导致进程停滞
5.访问全局变量不按约定,破坏数据
③C/S架构
1.基本概念
*定义:
client - service
*交互方式:
消息
*表示方式:
时序图
2.用途:
Email服务器,文件服务器(可信中介)
④C/S通信
1.如何实现:STUB实现
即通过RPC(远程过程调用,需要写接口)
④RPC的问题:
* 主要是S和C端的语义不同
差异产生的原因:
1. 看不到对方的错误
2. 丢包
3. 延时
如何处理:
1.计时器捕获RPC异常
2.提升性能(缓存,流水线,减少时延)
⑤ client端no response问题:(不知道server端是否处理)
解决:
1. 没收到应答重复发送消息
2. 没收到应答重复发送消息,但每个消息serve保证只处理一次
3. no response后发送消息询问状态
Lec5-7
①虚拟化
是一套资源管理技术
让一个计算机上有多个操作系统(运算,存储,通信都是一套操作系统)
②虚拟化好处
1.隔离物理逻辑错误
2.对资源充分利用,提高效率
③虚拟化例子
1.虚拟化处理器
(多线程)
2.虚拟化内存
(主存辅存统一编址)
④线程通信
有界缓冲区
缓冲区属性:共享
SEND方法 :插⼊数据,满则等待
RECEIVE方法 :读取数据,空则等待
⑤虚拟化内存
1.页映射(虚拟地址=页号+偏移)
2.页表储存页
3.线程可以分配自己的虚拟地址空间,地址从0开始
(进程=线程+地址空间)
4.PIP技术:编译过程只采用相对地址
⑥虚拟化处理器
1.线程独占CPU破坏模块化。
2.线程经常处于等待状态,导致cpu经常处于空转,因此采用多线程共享处理器。
3.yield的步骤
1)加锁
2)保存当前线程状态到thread_table中,设置当前线程为runnable
3)将另一线程状态设置为running
4)将thread_table中的状态加载到cpu中
5)释放锁
4.中断和异常的区别
(中断在处理器层,异常在线程层)
Lec8 性能
①性能指标
1.容量
提供的资源(CPU容量=时钟周期)
2.利用率
有用功和负载的比例(CPU利用率=使用/空转)
3.时延
从请求到应答的时间差(流水线发出时间+处理时间+发回时间)
3.吞吐率
单线程处理:1 / 时延
并发处理:无直接关系
②迭代的设计方法
1.关注收益递减法则
如果收益递减且达不成目标,重新审视系统的设计。
2.迭代
查找瓶颈,解决瓶颈。
③解决方法
1.时延
构建快路径慢路径,缓存,并行化
- 排队模型:平均排队延迟为1/(1-ρ),ρ为服务利用率
2.吞吐率
多级的流水线(不能降低时延,但能提升吞吐率)
-
交叉存取:用于流水线中,数据指令存在于不同的内存条中,CPU可以并行读取
-
短时间过载解决方法:排队
-
长时间过载:1.提高服务容量 2.降低负载(设置上限)
④更多解决瓶颈的方法
1.批处理
合并处理
2.空转
空转等待下一次批处理
3.提前预测投机执行
提前预测程序时延,调整执行顺序
Lec9 网络设计思想
①网络通信的限制
1.光速有上限
2.通信环境恶劣
3.带宽有上限
②传输层协议(transition protocol)
上中下三层:
1.向上层提供接口
2.向对等层和下层隐藏接口
③网络分层
1.端到端层:提供应用所需接⼝并实现
2.网络层:完成从当前地点到目的地中间路由的选择(规划)
3.链路层:点到点之间的数据传输实现(实现)
Lec10 网络实现
①链路层设计
1.物理传输
(锁相环,串行比并行快:走线,干扰)
2.封装成帧
(7个1,补个1)
3.错误处理
(纠错检错码)
4.链路性质
(MTU:最大传输单元)
(BER:传输错误比特占传输总比特百分数)
②网络层设计
挑战:大小悬殊的 性能指标,流量负载,接入点数量。
1. 寻址
2. 路由
(路径向量交换,自适应)
3. 层级结构
4. 错误管理
③端到端设计
1. 传输层协议
2. at-least-once
3. at-most-once
4. 对单个消息分片发送,接收端重组
5.数据完整性
(checksum进行校验)
6.性能
(lock-step性能低,overlapping性能高但复杂)
7.流顺序保障
(接收所有消息放入缓冲区,前序来齐了⼀起向上交付)
8.网络抖动
(在缓冲区中等待,设置最小时延)
9.身份识别安全
(签名验证,加解密)
Lec11 网络系统
①拥塞
1.拥塞原因
(排队过载了)
2.基本解决方案
1)增加容量
2)减少负载
让提交负载小于期望负载,借助飞拥塞阶段摊平
②TCP
三次握手协议
【每一方都确定他能听到我的声音】
Lec12 容错和可靠性
①建立可靠系统的三步骤
1.检错
2.错误遏制【未发生】
(强制模块化)
3.错误屏蔽【已发生】
(协议,冗余)
②容错设计过程
1.设计容错模型
2.模块化(错误遏制)
3.设计屏蔽机制(错误屏蔽)
4.反复迭代
③容错设计原则
1. 显式原则
2. 迭代设计原则
3. 安全边界原则
4. 应用彻底简化原则
⑤容错性指标
1. MTTF
可用性 = MTTF/(MTTR+MTTF)
(运行时间/应运行时间)
2. 可靠性函数
(针对某一指标判断是否符合正态分布)
3. 失效容忍
系统所能容忍失效的组件个数
⑥冗余
1.编码冗余
(海明校验码)
2.硬件冗余
(一个组件有多个副本,出错时自动替换)
3.软件冗余
(多个应用执行一个程序,体现应用之间的差异性)
Lec13 原子性和一致性
①原子性
1. 中断程序必须完整执行
2. 可串行化代表并行操作的正确
(更高的要求是串行化后的顺序与串行相同)
3. 从调用者来看,原⼦操作或者全完成或者未完成,性质有助于错误恢复。
4. 从并发线程来看,原⼦操作发⽣时间或完全在前或在后,性质有助于并发线程协调。
②All or Nothing
1. 磁盘错误写入
1)磁盘最多1个扇区出错,用checksum检错
2)重启解决
2. 提交黄金法则
前提交阶段(准备资源阶段,这个阶段可退回开始状态)
后提交阶段
③一致性
主要是读写一致性