互斥
请求和保持
不可抢占
循环等待
不管
预防:防止四个条件中的一个出现
避免:优化资源分配,让系统除于安全
检测:不预防,及时检测出死锁
解除:出现死锁,想办法解除
检测和解除是一体的
防范程度逐渐下降,但是资源利用率逐渐提高
1.互斥条件一般不可破坏
2.破坏请求和保持
a.要申请必须申请全部资源
b.申请一部分,释放后,再申请其他资源
3.破坏循环等待
给资源编号,进程按照编号顺序来请求资源
4.破坏不可抢占
如果申请其他资源失败了,就释放原有资源
原理:系统处于安全状态,就不会发生死锁
操作:系统每次分配资源之前,都检测分配是否会让系统进入不安全状态,如果不会就分配资源,否则,进入等待
经典算法:银行家算法
原理:简化资源分配图,如果不能简化为孤立节点,说明有死锁。
死锁解除算法:
1.终止进程
2.抢占资源
3.回滚
分为CPU寄存器,主存,辅存三层。
CPU寄存器包括寄存器,主存包括高速缓存、主存、磁盘缓存(逻辑上的,实际属于主存的一部分),辅存包括固定磁盘和可移动存储介质。
其中,寄存器速度和CPU差不多,主存和CPU速度差很多,CPU寄存器和主存都属于操作系统管理,断电后信息失效,称可执行存储。
高速缓存用于备份重要数据,位于主存和CPU之间,用于缓解主存和CPU之间的速度关系。
1.编译:编译器对源代码进行编译,成多个目标模块
2.链接:将目标模块和库函数链接成装入模块
3.装入:装入程序将装入模块装入内存
将目标模块和库函数链接成装入模块,此后不再拆开
边链接边装入,装入时若发生外部模块调用事件,先将外部目标模块装入内存。
运行时需要某个模块再去链接装入,没用到的不链接装入
程序必须被分配在连续的内存空间,不能分开。
只有一个程序,除了操作系统以外都是程序
多程序,将内存分为多个固定的分区,分区有相同和不同;有分区表之类的存储分区信息。
可以按照程序大小进行分配。
1.空闲分区表:
2.空闲分区链:
1.分配内存
2.回收内存
系统将暂时不运行的进程和不需要的数据和程序调入外存,将外存上具备运行条件的进程和需要的数据和程序调入内存。
linux中有个/swap专区供对换使用。
对换有关知识连接:
分页存储管理将进程的逻辑空间分为若干页,也将内存的物理空间分为若干块,都加以编号;在为进程分配内存时,以块为单位,将进程的若干页装入多个可以不相邻接的物理块中。
页面大小过大,碎片过多;太小,页表占内存多,进程占用过多页,换进换出效率低。
页表存储了页号和物理块号的映射关系。
根据程序员需求而诞生,每个段都有自己的逻辑含义,页是没有的。
允许多个进程共享一个或多个分段
有快表:需要考虑命中率的问题
a是命中率(在快表中成功找到所需页面表项的比率),接近1时,整体只需要访问一次内存+快表。londa表示访问快表需要的时间。