本文共 1678 字,大约阅读时间需要 5 分钟。
死锁
必要条件
死锁的产生需要满足以下四个条件:
互斥:每个资源要么已被占用,要么可用。 占有与等待:已获得资源的进程可以请求新的资源。 不可抢占:已分配的资源不能被强行抢占,只能由占有者显式释放。 环路等待:两个或以上进程形成环路,彼此等待对方释放资源。
处理方法
处理死锁问题主要有以下四种方法:
鸵鸟策略
忽略死锁问题,假装根本没发生。这是一种在不影响用户体验或发生死锁概率很低的情况下采用的方案。大多数操作系统(如Unix、Linux、Windows)都采取这种方法。 死锁检测与恢复
不阻止死锁发生,而是在检测到死锁时采取措施恢复。 - 单资源死锁检测:通过检测有向图是否存在环来判断死锁。
- 多资源死锁检测:基于资源剩余量向量、进程需求矩阵等信息,判断是否存在可行调度顺序。
死锁预防
在程序运行前消除死锁的可能性。主要方法包括: - 破坏互斥条件:如打印机的假脱机技术。
- 破坏占有与等待条件:要求进程一次性请求所有需要的资源。
- 破坏不可抢占条件:允许系统强制抢占资源。
- 破坏环路等待条件:按资源编号顺序请求资源。
死锁避免
在程序运行时确保不会发生死锁。 - 安全状态:检测到即使所有进程突然最大需求也能有调度顺序的状态。
- 银行家算法:类似死锁检测算法,用于判断是否可以安全调度。
鸵鸟策略
鸵鸟策略的核心思想是忽略死锁问题。这种方法的优点是成本低,性能高。适用于发生死锁概率低或对用户影响不大的场景。
- 原理:假装死锁根本不存在,继续系统运行。
- 应用:大多数操作系统默认采用此策略。
死锁检测与恢复
死锁检测
- 单资源死锁检测:抽取有向图,进行深度优先搜索(DFS),检测是否存在环。
- 多资源死锁检测:通过资源剩余量、进程需求矩阵等信息,判断是否存在可行调度顺序。
死锁恢复
- 抢占恢复:强制终止占有资源的进程,释放资源。
- 回滚恢复:恢复资源状态到某个之前的版本。
- 杀死进程恢复:直接终止死锁进程。
死锁预防
预防死锁的关键在于破坏其必要条件。常见方法包括:
破坏互斥条件:通过假脱机技术或其他方式允许多个进程同时使用资源。 破坏占有与等待条件:要求进程在开始执行前请求所有需要的资源。 破坏不可抢占条件:允许系统在某些情况下强制抢占资源。 破坏环路等待条件:采用顺序请求资源的方式,避免进程之间的循环依赖。
死锁避免
避免死锁的关键是确保系统始终处于安全状态。
- 安全状态:即使所有进程突然最大需求也能找到调度顺序。
- 银行家算法:用于判断系统是否处于安全状态,类似于死锁检测算法。
内存管理
虚拟内存
虚拟内存通过扩展地址空间,使程序能够使用更大的逻辑内存。通过将物理内存抽象为地址空间,程序可以运行在较大的内存空间中。
分页系统地址映射
- 页表:存储页与物理内存的映射关系。
- 虚拟地址:分为页面号和页内地址两部分。
页面置换算法
- 最佳页面替换:选择长时间未使用的页面。
- 最近最久未使用:通过维护页面访问时间,选择最近最久未使用的页面。
- 最近未使用:通过设置页面状态位,优先换出脏页面。
- 先进先出:按进入顺序换出页面。
- 第二次机会算法:结合页面访问时间和页面状态,优化页面替换。
- 时钟算法:通过环形链表实现页面替换。
设备管理
磁盘结构
- 盘面:磁盘的物理结构。
- 磁道:盘面的圆形带状区域。
- 扇区:磁道的最小存储单位。
- 磁头:负责读写磁盘数据。
- 制动手臂:移动磁头的机械臂。
- 主轴:驱动盘面旋转的核心部件。
磁盘调度算法
- FCFS:按请求顺序调度。
- SSTF:优先调度当前磁头最近的磁道。
- 电梯算法:保持一个方向运行,直到完成所有请求后改变方向。
编译系统
预处理
- 处理预处理命令(如宏定义、条件编译)。
- 生成中间代码(asm)。
编译
- 汇编:生成汇编代码。
- 链接:将汇编代码生成可重定向目标文件。
链接
- 静态链接:生成完全链接的可执行文件。
- 动态链接:通过共享库实现动态加载,解决静态库的局限性。
目标文件
- 可执行目标文件:直接运行。
- 可重定向目标文件:支持动态链接。
- 共享目标文件:实现动态加载。
系统优化
通过合理的资源管理和调度算法,可以显著提升系统性能。
转载地址:http://uxiaz.baihongyu.com/