/**
* TODO 《操作系统原理》 记录(13)
* @进程同步
* @临界区域问题
* 代码临界区可能改变公共变量导致其他进程或者线程产生静态
* 请求进入临界区————退出临界区——————剩余区
* @临界区解答的三个要求
* --- 不能对进程的相对速度做任何假设
*
* @互斥
* 如果一个进程在临界区执行、则其他进程不允许进入临界区
*
* @有空让进
* 如果没有进程在临界区执行且有进程希望进入临界区则只有非剩余区
* 的进程能够参与决策。则不能无限推迟决策
*
* @有限等待
* 如果进程在临界区执行则其他进程循环进入临界区的次数有一个上限
*
* ---
* @两进程解法
* @多进程解法
* ---
* @信号量
* 对信号量的整数值操作必须是不可分的(原子性)
* 主要确定就是{自旋锁}浪费的CPU时钟
* 自旋锁的有点就是通过浪费一点CPU时钟来避免线程的上下文切换
* __
* 上下文切换和自旋锁时间的比较
*
* @死锁和饥饿
* #死锁-————如多个线程都在等待一个事件的发生
* 而这个事件的发生只能来源于等待线程之一
* 此时多线程之间发生死锁。
* @二进制信号量
*
* @读写者问题
* 读写饥饿
*
* @临界区域
* top context
* @管程
* 放弃研究
*
* @操作系统同步
* --- 顶部项目 capstone project
*
* @适应性互斥
*
* @原子事务
* @系统模型
* 执行单个逻辑指令的一组单元称之为事务
* 处理事务的主要问题是不管发生什么异常都要保证事务的原子性
*
* @基于日志的恢复
* 先记录日志——后操作
* 事务的数据结构
* 事务名称
* @数据项的唯一名称
* 新值
* 旧值
* ————timeline
*
* @检查点 redo --- undo
* 如果系统异常之后必须根据什么“点”发现问题的入口
* 那些需要重做、那些需要撤销
*
* @并发原子事务
* 事务的原子性标志着程序发生顺序必须是@串行化发生
* 所有事物共享相同信号量共享公共临界区
*
* @串行化能力
* -- 并发控制算法可以保证程序的顺序并发变串行化
* 每个事务原子性的发生称之为串行调度
*
* @加锁协议
* -- 确保串行化的一种方法是锁————根据锁的协议获取或者释放
* @共享
* 如果进程获取T的锁请求后可以获取T的数据项、但是无法写操作
*
* @排他【独占】
* 如果进程获取T的排它模式的锁则可读写
*
* @两阶段加锁协议
* 这个协议要求每个事物根据两个阶段发起加锁和减锁请求
* 增长阶段
* 事务可获取锁、但是不能释放任何锁
* 收缩阶段
* 事务可释放锁、但是不能获取任何新的锁
*
* @基于时间戳的协议
* 读写时间戳的函数提供事务支持
*
*/
《操作系统原理》 记录(13)
最新推荐文章于 2022-05-19 15:59:52 发布