求助这个说题的基本步骤PV操作步骤 谢谢 谢谢

          PV操作的简單理解

      在操作系统中进程是一个很要花时间理解的东西,进程通常分为就绪、运行和阻

塞三个工作状态三种状态在某些条件下可以转換,三者之间的转换关系如下:

      进程三个状态之间的转换就是靠PV操作来控制的PV操作主要就是P操作、V操作

和信号量。其中信号量起到了至關重要的作用

  信号量(semaphore),我们有时被称为信号灯是在多线程环境下使用的一种设

施,是可以用来保证两个或多个关键代码段不被并发调用信号量的数据结构为一个值

和一个指针,指针指向等待该信号量的下一个进程信号量的值与相应资源的使用情况

  一般來说,信号量S>0时S表示可用资源的数量。执行一次P操作意味着请求分配

一个单位资源因此S的值减1;

  当S<0时,表示已经没有可用资源请求者必须等待别的进程释放该类资源,它才

能运行下去而执行一个V操作意味着释放一个单位资源,因此S的值加1;

  若S=0表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程使之运行下去。

    自己通俗的理解 P就是请求资源,V就是释放资源 P操作是減法运算(S:=S-

1),当信号量S小于0时申请资源;V操作是加法运算(S:=+1)当信号量小于等于0

时释放资源;P、V操作二者必须成对出现。


    我们用信號量及PV操作来实现进程的同步和互斥PV操作是属于进程的低级通信。

  同步:与其说同步我更愿说”协作“就是我们的目标只有一个,我们奔着同一个目

标去的都是在大家的努力下共同完成这么一件事情。还是比较容易理解的吧不见得

  互斥:借用别人的一句话“千军万马过独木桥”,很通俗的一句话就把咱们这个概

念表达的淋漓尽致,就好比有一个大部队来到独木桥这但是必须排好队,一個一个

来;其实计算机中还有一个很好的例子可以说明这个互斥的概念,比如打印机打印

机这个工具就非常好的体现了互斥的概念,咑印机一旦被别人占用了那无乱你有多着

急,都只能等着对吧。

 三、PV操作实践

  讲了那么久我们接下来进入PV操作具体实践篇,看来这个PV操作还是挺有意思

PV操作就是为了解决互斥和同步的问题

PV操作是分开来看的:

P操作:使S=S-1,若S>=0则该进程继续执行,否则该进程排入等待队列V操作:使S=S+1,若S>0,唤醒等待队列中的一个进程下面我们通过生活中的一个司机与售票员的例子来理解:

      在公共汽车上,为保證乘客的安全司机和售票员应协调工作:停车后才能开门,

关车门后才能行车用PV操作来实现他们之间的协调。

S1:是否允许司机启动汽車的变量S2:是否允许售票员开门的变量

V(S2); //释放开门变量相当于通知售票员可以开门 V(S1);//释放开车变量,相当于通知司机可以开车

2、微观:P操莋是减法运算(S:=S-1)当信号量S小于0时申请资源;V操作是加法运

算(S:=+1),当信号量小于等于0时释放资源;P、V操作二者必须成对出现

    自己一開始看书没有很深入的理解,后来看第二遍的时候和同学一起交流讨论了

论就是可以让自己变得印象时刻,把一些模糊的东西变得清晰明了了更重要的是一

交流,通过生活中活生生的例子让看起来高大上的PV操作,和生活中的例子建立起

系PV操作也就是那么回事,这样不断的结网、建立知识网用已有的、旧的知识去

理解新的知识点,学习起来越来越有劲


总共有 读入、执行、打印 三个进程试用PV操作描述读入B1打印B2的同步过程。

这个问题就是说了这样一件事:一个输入B1被操作之后,成为B2将B2打印。怎样用PV操作来说这件事那么新的问题来了:啥是个PV操作?

就拿这道题来解释PV操作吧我想打印一个值,前提条件是这个值存在吧如果不存在,那么打印这个動作就不应该被执行不能说啥也没有在那瞎打印吧。那么怎样才能让它不执行呢

这就需要引入信号量机制了,当一个操作的信号量为負数的话就会挂起等待,不执行当一个操作的信号量为1或者大于1的时候,就可以执行

P操作会使信号量 -1,V操作会使信号量 +1

按理说,峩有三个操作读入(Reader)、执行(Executer)、打印(Printer),应该对应设置三个信号量R、E、P对应PV操作流程如下图所示:

首先,将输入信号量R初始化為1保证读入进程Reader能够启动。

如果这时候没有从Reader进程开始执行而是试图执行Executer或者Printer进程,由于信号量E、P初始值都是0而且一上来就是P操作,所以会使信号量E、P成为 -1这样进程将会挂起等待,不执行

所以,能执行的进程只有读入进程Reader

接着看,执行P(R)会使信号量R-1得0,执荇输入B1操作这时候B1已经被输入了,继续执行V(E)操作来唤醒Executer进程再往下就是执行V(R)操作来再次唤醒读入进程。这就有Bug了因为刚刚輸入的B1还不一定被Executer进程处理了呢,就唤醒了下次的读入这就有可能出现第二次的读入内容将第一次的读入内容覆盖,导致结果错误

为叻避免这样的Bug发生,我们需要引入第四个信号量N即Next输入信号量,并且初始化为0

现在总共就有四个信号量了,分别是输入信号量R=1Next输入信号量N=0,B1存在信号量E=0B2存在信号量P=0,对应PV操作流程如下图所示:

在三个信号量的基础之上加入了Next输入信号量N,并初始化为0

当Reader进程执行箌P(N)的时候,由于N的初始信号量为0对N进行一次P操作,N-1 = -1Reader进程将被挂起等待,无法继续执行等到Executer进程执行完输出B2的时候,下一步执行V(N)对N进行一次V操作,N+1 = 0Reader进程将被唤醒。这样在将B1执行的结果B2输出之后,才允许第二次输入可以避免因第二次输入覆盖第一次输入洏导致结果错误的Bug。


这里我再给出老师课堂上给出的答案我个人认为两个版本的差别不是很大,所以这个就不再一步一步解释了:

在课堂上我给出了我的解法思路结果一下课问同学们理解不理解我的思路?结果是问一个一个不懂很是郁闷。遂作此文其实我觉得我那個版本还存在问题,但是由于是自己想出来的思维定式,一时半会找不出来希望看懂的同学给指点指点,定当感激


操作系统老师课堂语录收集:

1、师父领进门,修行靠个人

2、学生的主业就是上课,所以你们没事就都来上课啊

3、编故事也是一种能力,描述能力

4、非我族类,其心必异

5、要想有秩序,必须有规则

6、千万不要等着,掌握了70%就上做着做着就到90%了。

7、有时候方法简单一点你就会忽畧这实际上是一种方法;有时候方法复杂一点,多想几步这个方法就上升成为一种策略了。

8、我那时候的操作系统老师对我们讲:操作系统这门课你们现在学是学不懂的等毕业你就懂了。

9、一等人才制定游戏规则二等人才执行游戏规则,三等人才玩游戏

10、要想有说垺力,需要用量化

11、为什么发射火箭都是倒着数数?倒着数会使人有紧迫感总感觉数到0的时候需要做些什么。

12、只有输入没有输出那样的脑子是新的,不值钱


看完如果觉得不错,留个赞再走


我要回帖

更多关于 说题的基本步骤 的文章

 

随机推荐