pv操作 订阅
PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。 展开全文
PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。
信息
组    成
P操作、V操作
提出时间
1962年
意    义
奠基计算机现代操作系统的基础
提出人
E.W.Dijkstra
用    途
实现进程互斥与同步
中文名
PV操作
PV操作简介
1962年,狄克斯特拉离开数学中心进入位于荷兰南部的艾恩德霍芬技术大学(Eindhoven Technical University)任数学教授。在这里,他参加了X86计算机的开发,设计与实现了具有多道程序运行能力的操作系统——THE Multiprogramming System。THE 是艾恩德霍芬技术大学的荷兰文Tchnische Hoogeschool Eindhov –en的词头缩写。狄克斯特拉在THE这个系统中所提出的一系统方法和技术奠定了计算机现代操作系统的基础,尤其是关于多层体系结构,顺序进程之间的同步和互斥机制这样一些重要的思想和概念都是狄克斯特拉在THE中首先提出并为以后的操作系统如UNIX等所采用的。为了在单处理机的情况下确定进程(process)能否占有处理机,狄克斯特拉将每个进程分为“就绪”(ready)、“运行”(running)和“阻塞”(blocking)三个工作状态。由于在任一时刻最多只有一个进程可以使用处理机,正占用着处理机的进程称为“运行”进程。当某进程已具备了使用处理机的条件,而当前又没有处理机供其使用,则使该进程处于“就绪”状态。当运行进程由于某种原因无法继续运行下去时,就停止其占用处理机,使之进入“阻塞”状态,待造成其退出运行的条件解除,再进入“就绪”状态。而对系统中所有同时运行的进程之间所存在的相互制约的同步(synchronization,指为了避免错误,在一个进程访问共享数据时,另一个进程不访问该数据)和互斥(mutually-exclusive,指两个进程不能同时在一个临界区中使用同一个可重复使用的资源,诸如读写缓冲区)两个关系,狄克斯特拉巧妙地利用火车运行控制系统中的“信号灯”(semaphore,或叫“信号量”)概念加以解决。中国读者常常不明白这一同步机制为什么叫PV操作,原来这是狄克斯特拉用荷兰文定义的,因为在荷兰文中,通过叫passeren,释放叫vrijgeven,PV操作因此得名。这是在计算机术语中不是用英语表达的极少数的例子之一。
收起全文
精华内容
参与话题
问答
  • PV操作

    2019-12-08 19:50:42
    如何驾驭PV操作

    序言

    在处理进程同步的问题中,主要有三类方法:硬件同步机制、信号量机制、管程机制。其中,信号量机制,包括整型信号量、记录型信号量、AND型信号量、信号量集,等等······而最简单的整型信号量,即PV操作,是学习操作系统、多线程工作中比较常见常用的。接下来是我对PV操作的一些理解。

     

    线程与进程

    线程、进程,一个老生常谈的话题,主要围绕下列四个问题展开:

    互斥 —— 即竞争资源,及互斥使用临界资源。

    同步 —— 即协调时序,保证多个进程按序推进。

    通信 —— 主要有共享存储器系统、消息传递系统、管道系统等······

    死锁 —— 多个进程竞争资源和推进顺序不当导致的,进程之间互相等待对方手中资源的僵持状态。

    而引入PV操作的目的就是为了解决互斥及同步问题,我按具体情况将其另外分为三类:

     竞争资源型

     协调时序型

     综合型(既要竞争资源,又要协调时序)

     

    举例

    下面以综合型为例:

    某餐馆,只有30个位置,1个收银员。对于顾客,不考虑点单环节,有位子时直接进入,无则等待。每次收银员只能和一个顾客进行收费操作。

    所谓无三不成礼,所以在面对题目时,我分三步解之:

    一、明确进程

    这道题只需考虑两类进程:客户进程、收银员进程。

    二、明确资源

    只有30个座位,显然这是一个临界资源,客户进程之间会该资源,即所谓的竞争资源型

    每次收银员只能对一个顾客收费,收完一个才收下一个,所以要协调他们的顺序,即所谓的协调时序型。这里协调时序要考虑两个节点:

    ① 顾客告诉收银员:我要买单啦!

    ② 收银员收费结束后通知:好,你可以走了,下一个!

    所以总共需要3个信号量,1个用于记录座位数:记为Sn,2个用于协调时序,其一标识有顾客要付费,记为S1;其二标识收银员完成收费,顾客可以走了,记为S2。

    三、明确流程

    最后,理清顾客及收银员的行为,弄明白他们会先做什么,后做什么。这是解决问题并写出代码的关键。

    首先是信号量的初值。

    semaphore Sn = 30;         // 有30个顾客
    semaphore S1 = 0;          // 没有顾客要付费
    semaphore S2 = 0;          // 没有完成任何收费

    其次是顾客进程。

    void customer() {
        P(Sn);    // 顾客进店了
                  // while(Sn<=0) wait();
                  // Sn = Sn - 1;
        
        eat();    // 点单吃
    
        V(S1);    // 顾客要买单了
                  // S1 = S1 + 1;
    
        P(S2);    // 顾客等待收银员
                  // while(S2 <= 0) wait();  S2初值为0,顾客会等待
                  // S2 = S2 - 1;
    
        V(Sn);    // 顾客走了,座位+1
                  // Sn = Sn + 1;
    }

    最后是收银员。

    void cashier() {
        P(S1);        // S1初值为0
                      // 所以一直在等待,until: S1 == 1
    
        counter();    // 算钱结账
    
        V(S2);        // 通知顾客完成收费
                      // S2 = S2 + 1;
    }

     

    总结

    在上面的例子中,即包含了临界资源的竞争——互斥问题,也包含了进程推进的协调——同步问题,个人认为很好地说明了如何使用PV操作,以及PV操作可解决问题的类型:资源竞争型、协调时序型、综合型。以及要有一个清晰的解题步骤:① 明确进程;② 明确资源;③ 明确流程

    而重点还是在于明白进程要解决的两件事:资源竞争和协调时序。“资源竞争型”、“协调时序型”是我自己总结出来的词语。我用于学习的课本是汤小丹的《计算机操作系统(第四版)》,在这本书中则描述成:间接相互制约关系、直接相互制约关系。个人觉得这一说法并不直观,有些晦涩。

    以上是我个人学习过程中的总结。记录于此,但其中或有措辞不佳、逻辑不当之处,可刚写下之时无法察觉,正所谓事后诸葛亮,日后回顾之际再做修改。

    展开全文
  • pv操作

    2018-12-19 09:04:32
    pv操作 链接

    pv操作

    三种状态转换
    链接

    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 3,865
精华内容 1,546
关键字:

pv操作