操作系统--之疑惑篇
2015-09-30 15:46
253 查看
在上一篇博客中我们探讨了硬件和软件中是如何通讯的,那么这次我们就来介绍其中一种特殊的软件,就是操作系统,也是系统软件的一种,我们知道系统软件主要是负责五部分的管理分别是进程与处理机管理、作业管理、存储管理、设备管理、文件管理,那么我们说的PV操作就是属于第一种进程预处理机调度!
我们来看一下进程的状态转换过程:
一.在这里要理解这几个概念:活跃就绪、静止就绪、活跃阻塞、静止阻塞。
活跃就绪:指进程在主存并且处于可被调度的状态。
静止就绪:指就绪的进程被兑换到辅存时的状态。
活跃阻塞:指进程在主存中一旦等待的时间产生便进入活跃就绪状态。
静止阻塞:兑换到辅存状态。
那么进程间是如何通讯的呢?这就要涉及到我们的信号量机制了!
1.信号量机制
信号量机制即利用pv操作来对信号量进行处理。
什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信 号量的值与相应资源的使用情况有关。
当它的值大于0时,表示当前可用资源的数量;
当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
一般来说,信号量S>0时,S表示可用资源的数量。
执行一次P操作意味着请求分配一个单位资源,因此S的值减1;
当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。
而执行一个V操作意味着释放一个单位资源,因此S的值加1
;若S£0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
p操作(wait):申请一个单位资源,进程进入
v操作(signal):释放一个单位资源,进程出来
PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义 如下:
P(S):①将信号量S的值减1,即S=S-1;
②如果S<=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):①将信号量S的值加1,即S=S+1;
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信。
使用PV操作实现进程互斥时应该注意的是:
(1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。
(2)P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。
(3)互斥信号量的初值一般为1。
由此方法我们可以解决经典的进程问题!
我们来看一下进程的状态转换过程:
一.在这里要理解这几个概念:活跃就绪、静止就绪、活跃阻塞、静止阻塞。
活跃就绪:指进程在主存并且处于可被调度的状态。
静止就绪:指就绪的进程被兑换到辅存时的状态。
活跃阻塞:指进程在主存中一旦等待的时间产生便进入活跃就绪状态。
静止阻塞:兑换到辅存状态。
那么进程间是如何通讯的呢?这就要涉及到我们的信号量机制了!
1.信号量机制
信号量机制即利用pv操作来对信号量进行处理。
什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信 号量的值与相应资源的使用情况有关。
当它的值大于0时,表示当前可用资源的数量;
当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
一般来说,信号量S>0时,S表示可用资源的数量。
执行一次P操作意味着请求分配一个单位资源,因此S的值减1;
当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。
而执行一个V操作意味着释放一个单位资源,因此S的值加1
;若S£0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
p操作(wait):申请一个单位资源,进程进入
v操作(signal):释放一个单位资源,进程出来
PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义 如下:
P(S):①将信号量S的值减1,即S=S-1;
②如果S<=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):①将信号量S的值加1,即S=S+1;
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信。
使用PV操作实现进程互斥时应该注意的是:
(1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。
(2)P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。
(3)互斥信号量的初值一般为1。
由此方法我们可以解决经典的进程问题!
相关文章推荐
- MySQL的主从复制,半同步复制
- EGORefreshTableHeaderView使用方法(二)
- W3school学习笔记之html
- 使用FusionCharts完成统计图表
- 个人学习笔记---ebp,esp指针的理解
- maven记录
- Android的init过程详解(一)
- Struts2 复习日记(1) struts2的过滤器小记 (暂时有问题 努力施工中)
- ElasticSearch增加ik中文分词插件
- 输入一个数,输出该数从低位到高位的序列
- 如何实现html5的摄像头的调用
- Volley的使用方式
- Java 审查基调
- MySQL 添加唯一约束
- JAVA AOP
- 在ArcGIS中,用Python脚本批量修改FeatureClass的名称与字段
- iOS免证书打包环境搭建
- Selenium Web Driver
- Codeforces 7D
- 实模式下,内存说明大全