四级网络工程师笔记-操作系统(中)
- 前言:
- 系列博文
- 第四章 并发与同步
- 第五章 内存管理
-
- 1. 存储体系构成
- 2. 存储保护
- 3. 静态重定位
- 4. 动态重定位
- 5. 分区存储管理
- 6. 空闲分区的分配策略
- 7. 分区的回收 4 种可能
- 8. 覆盖技术
- 9. 交换技术
- 10. 页式存储管理
- 11. 存储空间的分配与回收
- 12. 页式存储管理的地址转换
- 13. 页表
- 14. 快表
- 15. 虚拟存储器
- 16. 页表增加项
- 17. 缺页中断
- 18. 页面调度 3 个策略
- 19. “抖动” 现象
- 20. 先进先出页面置换算法(First-In First-Out,FIFO)
- 21. 最近最少使用页面置换算法(Least Recently Used,LRU)
- 22. 举例说明页面置换算法
- 23. 贝莱迪异常
- 24. 缺页中断率
- 25. 虚拟存储管理的性能问题
- 26. 段式存储管理
- 27. 页表项内容
- 28. 页式分配的优点
- 29. 请求分页的外存
- 30. 内存管理方案
- 31. 管理空闲内存方法
- 32. 程序局部性
- 33. 移动技术
- 34. 链接
- 35. 页式存储管理
前言:
作者在优快云博客上开通了[网络工程师]专栏,目的在于激励自己坚持学习。由于是初次进行博客创作、经验不足、可能比较粗糙,如有错漏之处希望大家能够指正、也欢迎大家一起交流学习。
如需查看完整学习博文(笔记)请点击 [网络工程师] 进行查看
系列博文
第四章 并发与同步
1. 进程同步与进程互斥
⚫ 进程同步:指多个进程中发生的事件存在某种时序关系,必须协同动作,相互配合,以共同完成一个任务。
⚫ 进程互斥: 指由于共享资源所要求的排他性,进程间要相互竞争,以使用这些互斥资源。
2. 进程互斥解决方法
进程互斥的解决有两种做法:一是由竞争各方平等协商;二是引入进程管理者,由管理者来协调竞争各方对互斥资源的使用。
3. 资源共享 3 个层次
⚫ 互斥( MutualExclusion):保证资源的互斥使用是指多个进程不能同时使用同一个资源,这是正确使用资源的最基本要求;
⚫ 死锁( Deadlock):避免死锁是指避免多个进程互不相让,避免出现都得不到足够资源的情况,从而保证系统功能的正常运行;
⚫ 饥饿( Starvation):避免饥饿是指避免某些进程一直得不到资源或得到资源的概率很小,从而保障系统内资源使用的公平性。
4. 相互感知度划分:
相互感知的程度 | 交互关系 | 一个进程对其他进程的影响 | 潜在的控制问题 |
---|---|---|---|
相互不感知(完全不了解其他进程的存在) | 竞争(Competition) | 一个进程的操作对其他进程的结果无影响 | 互斥、死锁、饥饿 |
间接感知(双方都与第 3方交互,如共享资源) | 通过共享进行协 作 | 一个进程的结果依赖于从 其他进程获得的信息 | 互斥、死锁、饥饿 |
直接感知(双方直接交互,如通信) | 通过通信进行协作 | 一个进程的结果依赖于从其他进程获得的信息 | 死锁、饥饿 |
5. 临界资源的访问过程
● 进入区( Entry Section):为了进入临界区使用临界资源,在进入区要检查可否进入临界区;如果可以进入临界区,通常设置相应的“ 正在访问临界区” 标志, 以阻止其他进程同时进入临界区。
● 临界区(Critical Section): 进程中访问临界资源的一段代码。
● 退出区(Exitt Section): 将“ 正在访问临界区” 标志清除。
● 剩余区(Remainder Section): 代码中的其余部分。
6. 进程同步机制准则
⚫ 空闲则入:任何同步机制都必须保证任何时刻最多只有一个进程位于临界区。当有进程位于临界区时,任何其他进程均不能进入临界区。
⚫ 忙则等待:当已有进程处于其临界区时,后到达的进程只能在进入区等待。
⚫ 有限等待:为了避免死锁等现象的出现,等待进入临界区的进程不能无限期地“ 死等”。
⚫ 让权等待:因在进入区等待而不能进入临界区的进程,应释放处理机,转换到阻塞状态,以使得其他进程有机会得到处理机的使用权。
7. 进程互斥的硬件方法
目前,在平等协商时通常利用某些硬件指令来实现进程互斥。硬件方法的主要思路是用一条指令完成读和写两个操作,因而保证读操作与写操作不被打断。依据所采用的指令的不同,硬件方法分成 TS 指令和 Swap 指令两种。
⚫ TS(Test-and-Set)指令
TS 指令的功能是读出指定标志后把该标志设置为 TRUE。TS 指令的功能可描述成下面的函数。
Boolean TS (Boolean * lock) {
Boolean old;old=*lock;lock=TRUE; return old;
}
利用 TS 指令实现的进程互斥算法是,每个临界资源设置一个公共布尔变量 lock,表示资源的两种状态: TRUE 表示正被占用, FALSE 表示空闲, 初值为 FALSE。在进入区利用 TS 进行检查和修改标志 lock。有进程在临界区时,重复检查,直到其他进程退出时检查通过。所有要访问临界资源的进程的进入区和退出区代码是相同的。
TS 指令实现互斥的算法是:
① 测试锁变量的值,如为 1,则重复执行本命令,不断重复测试变量的值;
② 如为 0,则立即将锁变量测值置为 1,进入临界区;
③ 测试并设置指令是一条完整的指令,而在一条指令的执行中间是不会被中断的,保证了锁的测试和关闭的连续性;
④ 退出临界区时,将锁变量测试值设为 0。2)Swap 指令(或 Exchange 指令)
Swap 指令的功能是交换两个字( 字节) 的内容。可用下面的函数描述 Swap 指令的功能。
Void SWAP(int*a, int*b){
Int temp;
temp=*a; *a=* b;*b =temp;
}
利用 Swap 指令实现的进程互斥算法是, 每个临界资源设置一个公共布尔变量 lock,初值为 FALSE;每个进程设置一个私有布尔变量 key,用于与 lock 间的信息交换在进入区利用 Swap 指令交换 lock 与 key 的内容,然后检查 key 的状态;有进程在临界区时, 重复交换和检查过程, 直到其他进程退出时检查通过。
8. 硬件方法优缺点
使用硬件方法实现进程互斥,
- 优点有以下几个方面:
⚫ 使用范围广:硬件方法适用于任意数目的进程,在单处理器和多处理器环境中完全相同;
⚫ 简单:硬件方法的标志设置简单、含义明确,容易验证其正确性;
⚫ 支持多个临界区:在一个进程内有多个临界区时,只需为每个临界区设立一个布尔变量;
- 其缺点有:
⚫ 进程在等待进入临界区时,要耗费处理机时间,不能实现“让权等待”;
⚫ 由于进入临界区的进程是从等待进程中随机选择的,有的进程可能一直选不上,从而导致“饥饿”。
9. 信号量
信号量是由操作系统提供的管理公有资源的有效手段。信号量代表可用资源实体的数量。属于低级通信方法
⚫ empty 信号量表明的是空闲资源数目;
⚫ full 信号量表明的是满的资源数目;
⚫ mutex 信号量用于实现互斥访问。
10. PV 操作
- PV 操作由P 操作原语和V 操作原语组成(原语是不可中断的过程)对信号量进行操作。
⚫ P(S):将信号量 S 的值减 1,即 S=S-1;如果 S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
⚫ V(S):将信号量 S 的值加 1,即 S=S+1;如果 S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
2) 优点:
P、V 原语的执行, 不受进程调度和