操作系统-PV操作
来源:互联网 发布:网络综艺访谈节目 编辑:程序博客网 时间:2024/06/04 18:25
在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约的关系。协调进程之间的相互制约的关系,即为进程同步。
信号量机制可用来解决互斥与同步的问题,P,V操作与信号量的处理有关,P表示申请,V表示释放。在操作系统中,P,V操作是一种低级进程通信原语,原语是指完成某种功能且不被分割不被中断执行的操作序列。
P,V操作
定义
- P(S):S=S-1
如果S大于等于0,则该进程继续执行,如果S小于0,则该进程阻塞,并放入等待队列中 - V(S):S=S+1
如果S大于0,则该进程继续执行,如果S小于等于0,则唤醒等待队列中的一个进程
(这里判断S是否大于0都是在执行PV操作之前判断,即先判断再加1或减1)
使用P,V操作实现进程同步
设S为实现进程P1,P2同步的公共信号量,初值为0。进程P2中的语句要使用进程P1中语句x的运行结果,所以只有当语句x执行完成之后语句y才能执行。其实现进程同步的算法如下:
semaphore S=0; //初始化信号量P1(){ ... x; //语句x V(S); //告诉进程P2,语句x已经完成,S++ ...}P2(){ ... P(S); //检查语句x是否运行完成,S-- y; //检查无误,运行y语句 ...}
若P2先执行到P(S)时,S为0,执行P操作会使进程P2阻塞,并放入等待队列中,当进程P1执行V(S)操作后,再把P2从阻塞队列放入就绪队列,等待处理机调度执行。
使用P,V操作实现进程互斥
设S为实现进程P1,P2互斥的信号量,由于每次只允许一个进程进入临界区,所以S的初值为1(即可用资源为1)。只需把临界区置于P(S)和V(S)之间,即可实现进程对临界资源的互斥访问。其实现进程互斥的算法如下:
semaphore S=0; //初始化信号量P1(){ ... P(S); //请求访问临界资源,S-- 进程P1的临界区; V(S); //访问结束,S++ ...}P2(){ ... P(S); //请求访问临界资源,S-- 进程P2的临界区; V(S); //访问结束,S++ ...}
当没有进程再临界区时,任意一个进程要进入临界区会执行P操作,把S的值减为0,然后进入临界区,而当有进程存在于临界区时,S的值为0,再有进程请求进入临界区时,执行P操作会被阻塞,进入等待队列,直到有进程退出临界区,这样便实现了进程的互斥。(临界区是指进程用于访问临界资源的那段代码)
阅读全文
1 0
- 操作系统的PV操作
- 操作系统之PV操作
- 操作系统中PV操作
- 操作系统 信号量 PV操作
- 操作系统之PV操作
- 操作系统中PV操作
- 操作系统之PV操作
- 【操作系统】-PV操作
- 操作系统--PV操作
- 【操作系统】PV操作
- 【操作系统】 PV操作
- 操作系统之PV操作
- 操作系统pv操作
- 操作系统 -- PV操作
- 操作系统-PV操作
- 操作系统PV操作典型问题
- 【操作系统】——PV操作
- [操作系统]信号灯与PV操作
- 进程IPC---流式套接字
- java访问数据库
- 数据结构循环链表与双链表实验
- linux matlab2016b 安装
- redis 性能相关方面
- 操作系统-PV操作
- [PAT乙] 1014. 福尔摩斯的约会 (20)
- Goroutine的调度分析(二)
- android NDK--C 调用java
- 某集训记录
- 高并发秒杀系统实现和优化分析(行级锁优化和具体过程优化)
- cenos7安装elasticsearch5.5.2
- redis 网络分区
- Mysql课后思考题