系统架构师-笔记
死锁:
如何避免死锁?
有序资源分配法、银行家算法
死锁预防:打破四大条件
可能造成死锁的条件:互斥、环路等待、不剥夺、保持和等待
银行家算法:
是一种防止死锁的常用算法,由Dijkstra 提出的,将死锁的问题演示为一个银行家贷款的模型。一个银行家向一群客户发放信用卡,每个客户有不同的信用额度,每个客户可以
提出额度内的任意额度请求,直到额度用完后再一次性还款。
银行家可以挂起某个额度请求较大的客户的请求,优先满足小额度的请求,等小额度的请求还款后,再处理挂起的请求。这样资金就能够永远疏通。如果银行家的额度小于所有客户的
限额,便会发生死锁。
存储管理:
页式管理:增加利用率,但增加了系统开销,可能产生抖动现象。页:页号+业内地址。页号可以通过页表查询到块号。块号+业内地址=逻辑地址
段式存储:段号+段内地址。多道程序共享内存,各段程序互不影响,内存利用率低,通过查询段表
段页式存储:空间浪费小,可以共享。但是增加软件的复杂度,开销。快表是一块小容量的相联存储器。
关系数据库规范化理论:
更新异常:只更新了局部的信息,导致数据不一致性
插入异常:无法插入异常(无主键或主键重复)
删除异常:删除多余的信息
函数依赖:
从性值上分为:完全函数依赖、部分函数依赖、传递函数依赖
范式:
第一范式:每个属性都是不可再分割的原子属性
第二范式:满足第一范式,非主属性完全依赖于主键,不存在部分依赖(单属性主键,不存在部分函数依赖)
第三范式:满足第二范式,没有非主关键字的传递依赖,消除非主关键字传递依赖
BCNF:在第三范式的基础上,消除主属性的传递依赖