【操作系统】——PV操作

news/2025/4/1 8:20:18/

       大家都说操作系统中的PV操作部分看不懂,确实我在专业课中学习这门课时,PV操作被列为书中的重点和难点,就是因为它不好理解。当时自己听完课也是一头雾水,到期末考试结束,也没弄明白这是怎么一回事,更没有意识到PV操作的重要性。米老师的一堂课,让我开始对它产生兴趣,于是才有了这篇博客。首先就来说说什么是PV操作吧!


       什么是PV操作?


       在说什么是PV操作前,首先讲讲它的历史(咱也像写书的人一样,上来先介绍它的历史和发展)

       PV操作是有名的计算机科学家狄克斯特拉为了解决一类问题而创造的,例如:假如P1和P2是分别将数据送入缓冲B和从缓冲B读出数据的两个进程,为了防止这两个进程并发时产生错误,狄克斯特拉设计了一种同步机制叫“PV操作”。我相信,很多人都很纳闷为什么他会取名叫“PV”操作呢?其实这是狄克斯特拉用荷兰文定义的,因为在荷兰文中,“通过”叫passeren,“释放”叫vrijgeven,PV操作因此得名。这也是在计算机术语中不是用英语表达的极少数的例子之一。

       说了那么多,那到底什么叫PV操作呢?PV操作有P操作和V操作组成,它们是两个不可中断的过程,也叫做原语。它是为了能够实现对于并发进程中临界区的管理要求。


       为什么要有PV操作?


       其实这个问题上面也说到了,是为了防止两个进程并发时产生错误。这里不得不说的就是,并发进程之间分为两种,一种就是有交互的,一种是无任何关联的

       很简单,没有关联的并发进程是相互独立的,谁也不影响谁。但是交互的并发进程可就不一样了,因为他们是共享资源的,一个进程运行时,经常会由于自身或外界的原因而被中端,且断点是不固定的。也就是说进程执行的相对速度不能由进程自己来控制,于是就会导致并发进程在共享资源的时出现与时间有关的错误


       PV操作的使用


       名词解释


       临界区:我们把并发进程中与共享变量有关的程序段称为临界区。

       信号量S:信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。


       P操作和V操作


       P操作P(S):将信号量S减去1,若结果小于0,则把调用P(S)的进程置成等待信号量S的状态。即为请求资源。

       V操作V(S):将信号量S加上1,若结果不大于0,则释放一个等待信号量S的进程。即为释放资源。

       表示过程如下:

       Procedure P (Var S:Semaphore)

       begin

           S:=S - 1;

           if S<0 then W(S) 

       end; { P }

       

       Procedure V (Var S:Semaphore)

       begin

           S:=S + 1;

           if S< = 0 then R(S) 

       end; { V }

       注解:

       W(S):表示把调用P(S)的进程置成等待信号量S的状态。

       R(S):表示释放一个等待信号量S的进程。

       正如老师上课时所举的父亲给孩子吃苹果的例子一样,假如一个盘子只能放一个苹果,父亲往盘子里放了一个苹果。如果儿子吃了(V操作),父亲才可以接着放(P操作);如果儿子不吃,那父亲就不能放苹果,只能等着。


       进程互斥和进程同步


       进程互斥


       进程的互斥是指当有若干个进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用该资源,其他要使用它的进程必须等待,直到该资源的占用着释放了该资源。

       例如:两个并发进程都要使用共享的计数器Count。

       

    begincount:integer;S:semaphore;count:= 0 //计数器count初始值为0S:= 1 //信号量初始值为1cobegin//进程PINprocess PINR1:integer;beginP(S);  //执行P操作R1:= count;R1:= R1 + 1;count:= R1;V(S)  //执行V操作end;//进程POUTprocess POUTR2:integer;beginP(S);  //执行P操作R2:= count;R2:= R2 + 1;count:= R2;V(S)  //执行V操作end;coendend;


       进程同步


       进程的同步是指在并发进程之间存在这一种制约关系,一个进程依赖另一个进程的消息,当一个进程没有得到另一个进程的消息时应等待,直到消息到达才被唤醒。

       例如:一个司机与售票员的例子,在公共汽车上,为保证乘客的安全,司机和售票员应协调工作:停车后才能开门,关车门后才能行车。用PV操作来实现他们之间的协调。
       S1:是否允许司机启动汽车的变量
       S2:是否允许售票员开门的变量

driver()//司机进程
{while (1)//不停地循环{ P(S1);//请求启动汽车启动汽车;正常行车;到站停车;V(S2); //释放开门变量,相当于通知售票员可以开门}
}
busman()//售票员进程
{while(1){关车门;V(S1);//释放开车变量,相当于通知司机可以开车售票P(S2);//请求开门开车门;上下乘客;}
}

       总结:


       PV操作是操作系统中的重点和难点,不过如果细细分析,知道为什么要使用它以后。其实发现,PV操作也不过如此。并发进程间可以通过PV操作交换信息实现进程的互斥和同步,因此PV操作可以看做是进程间的一种低级的通信方式,只交换了少量的信息。但它解决了进程间对于资源共享而产生的与时间有关的错误。




http://www.ppmy.cn/news/672070.html

相关文章

操作系统-AOSOA

一、个人感受 1.1 权衡 在我写这份报告的时候&#xff0c;已经是 6 月 30 号了&#xff0c;经历了一个学期的“折磨”&#xff0c;我面对终点&#xff0c;已经没啥感觉了&#xff0c;就想着赶快呼噜完了就完事了。其实做这个项目最大的体会就是“人力有穷&#xff0c;一切皆权…

服务器没有及时响应怎么解决,秋叶操作win10系统提示“服务器没有及时响应或控制请求”的具体技巧...

许多win10系统用户在工作中经常会遇到win10系统提示“服务器没有及时响应或控制请求”的情况&#xff0c;比如近日有用户到本站反映说win10系统提示“服务器没有及时响应或控制请求”的问题&#xff0c;但是却不知道要怎么解决win10系统提示“服务器没有及时响应或控制请求”&a…

秋叶

①一场风雨后&#xff0c;街旁的树下就落了一层叶子。 ②这是故乡的初秋&#xff0c;叶子也该是些早熟的叶子&#xff0c;从湛蓝旷远的天空悠然飘落&#xff0c;百转千回之后遗落于地&#xff0c;并没有什么生命遗失的痉挛和苦痛的挣扎&#xff0c;一如它们生时的超脱、潇洒和…

操作系统——PV操作

PV操作概念&#xff1a;操作系统中的一种同步机制&#xff0c;实现对于并发进程中临界区的管理。 并发进程分为两种&#xff1a; ①无交互的并发进程&#xff1a;每个进程是相互独立的&#xff0c;谁也不影响谁&#xff0c;基本不会用到PV操作。 ②有交互的并发进程&#xf…

【操作系统】服务管理

文章目录 定义分类服务的运行状态查看服务运行状态servicesystemctl 服务自启动 定义 长期运行在内存中的进程&#xff0c;且可以提供一些系统或网络功能 服务的本质就是进程&#xff0c;但是是运行在后台的&#xff0c;比如&#xff1a;mysql、sshd、防火墙等&#xff0c;因…

秋叶一键重装系统连接服务器失败,秋叶一键重装系统win7系统安装和使用DAEMONToolsLite的方法【图文教程】...

DAEMON Tools Lite是一款虚拟光驱工具&#xff0c;装完不需启动即可用。是一个非常先进的模拟备份以及合并保护盘的软件&#xff0c;但是有部分win7秋叶系统用户还不知道要怎么安装和使用DAEMON Tools Lite&#xff0c;针对这个情况&#xff0c;小编这就给大家分享一下win7秋叶…

tcpip.sys是什么文件,tcpip.sys蓝屏的解决办法

打开电脑驱动程序所在的文件夹“C:\Windows\System32\drivers”&#xff0c;往下翻可以找到“tcpip.sys”和“tcpipreg.sys”两个文件&#xff0c;据说是实现TCP/IP协议簇的驱动程序&#xff08;待求证&#xff09;。 tcpip.sys是系统中自带的文件&#xff0c;是微软从XP SP2开…

Nuget更新全局包、缓存和临时文件夹路径位置

Nuget更新缓存 1、查看默认的Nuget路径2、更改全局包路径2.1 通过环境变量来进行修改2.2通过Nuget.Config配置文件来进行修改 3、更改http-cache路径4、更改temp文件路径5、更改plugins-cache文件路径 NuGet是一个流行的软件包管理器&#xff0c;可以帮助.NET开发人员轻松地添加…