内容简介:PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生,根本原理是机器指令。semaphore[英][ˈseməfɔ:(r)] 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。进程之间的切换是通过CPU的中断完成,人为控制CPU的中断就可以保证当前进程顺利执行完,具体是:屏蔽中断->执行临界区->开中断,但是这样限制了CPU的交替执行任务的能力,并且将主动权交给用户,不灵活,不安全。
-
P原语 Passeren(占有),阻塞原语,负责把当前进程由运行状态转换为阻塞状态,操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;
-
V原语 V是荷兰语Vrijgeven(释放)的首字母。为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。
PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生,根本原理是机器指令。
信号量
semaphore[英][ˈseməfɔ:(r)] 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。
互斥和同步
-
同步是各个进程按照一定的顺序和速度执行,一种更加复杂的互斥,互斥是一种特殊的同步。互斥是两个任务之间不可以同时运行,同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)
-
互斥是一组并发进程中的一个或多个程序段,因共享某一个共有资源,为了保证临界资源在某一时刻只能被一个进程访问,从而不允许交叉的顺序执行。
互斥原则
- 有空让进
- 忙则等待
- 多种选一
- 有限等待
- 让权等待
临界区的访问过程
- 进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞
- 临界区:在临界区做操作
- 退出区:清除临界区被占用的标志
- 剩余区:进程与临界区不相关部分的代码
实现互斥的方法
- 硬件实现方法
进程之间的切换是通过CPU的中断完成,人为控制CPU的中断就可以保证当前进程顺利执行完,具体是:屏蔽中断->执行临界区->开中断,但是这样限制了CPU的交替执行任务的能力,并且将主动权交给用户,不灵活,不安全。
- 信号量实现方法
P和V操作分别来自荷兰语Passeren和Vrijgeven,分别表示占有和释放,
信号量S的意义:S>=0 表示某资源的可用数,S<0 其绝对值表示阻塞队列中等待该资源的进程数。="" p操作的定义:s:="S-1" 若="" s="">=0 ,则P操作的进程继续执行,若S<0,则置该进程为阻塞状态(无可用资源),并将其插入阻塞队列。
Procedure P (Var S:Semaphore); Begin S:=S-1; If S<0 then W(S) ##执行P操作的进程插入到等待队列 End;
V操作定义:S:=S+1,若S>0,则执行V操作的进程继续执行;否则若S<=0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续执行。
Procedure V(Var S:Semaphore); Begin S:=S+1; If S<= then R(S) ##从阻塞队列中唤醒一个进程 End;
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- OS-操作系统学习笔记-5:进程同步与进程互斥(二):信号量机制
- @synchronized 互斥锁
- golang 互斥锁
- 自旋锁和互斥锁区别 --- 经典
- golang 互斥锁 sync.Mutex
- 互斥量与临界区的区别
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Google's PageRank and Beyond
Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50
Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!