精华内容
下载资源
问答
  • 信号量PV原语例题——浴室问题

    千次阅读 2018-05-24 12:57:05
    问题描述 一栋学生公寓里,只有一间浴室,且... 下面给出4个函数,要求用信号量PV原语实现这4个函数,来模拟上述规定下浴室里的过程。(假设初始时浴室为空)(1)男生想要使用浴室: boy_wants_to_use_bathroom;...

    问题描述

    一栋学生公寓里,只有一间浴室,且每次仅能容纳一人。公寓里有男生也有女生。因此制定如下规定:(1)每次只能有一个人在使用浴室;(2)女生的优先级要高于男生;(3)对于同性别的人来说,采用先来先服务的原则。
    下面给出4个函数,要求用信号量和PV原语实现这4个函数,来模拟上述规定下浴室里的过程。(假设初始时浴室为空)
    (1)男生想要使用浴室: boy_wants_to_use_bathroom;
    (2)男生离开浴室: boy_leaves_bathroom;
    (3)女生想要使用浴室: girl_wants_to_use_bathroom;
    (4)男生离开浴室: girl_leaves_bathroom;
    按照个人理解,boy_wants_to_use_bathroom和girl_wants_to_use_bathroom是随机出现的,boy_leaves_bathroom和girl_leaves_bathroom是循环执行的。


    概念

    P原语:申请一个空闲的资源,把信号量-1,如果成功,退出原语,否则进程被阻塞;
    V原语:释放一个被占用的资源,信号量+1,如果有被阻塞的进程,将其唤醒。


    解答

    (1)信号量定义
    int boy_waiting = 0, girl_waiting = 0, using = 0; 	// 等待队列中的男生/女生数; 浴室每人使用
    Semaphore S_mutex = 1, S_boys = 0, S_girls = 0;		// 空闲的资源数; 属于男生的空闲资源数; 属于女生的空闲资源数
    (2)男生想要使用浴室
    void boy_wants_to_use_bathroom()
    {
    	P(S_mutex);								// 是否有空资源
    	if ((using==0) && (girl_waiting==0))	// 如果浴室空且没有女生在等待
    	{
    		using = 1;							// 使用浴室洗澡
    		V(S_mutex);							// 洗完澡把浴室资源释放
    	}
    	else
    	{
    		boy_waiting++;						// 男生等待队列加长
    		V(S_mutex);							// 释放资源
    		P(S_boys);							// 如果轮不到男生上手,阻塞:排队等着
    	}
    }
    (3)男生离开浴室
    void boy_leaves_bathroom()
    {
    	P(S_mutex);								// 洗好澡了才能走,否则被阻塞继续洗澡
    	if (girl_waiting>0)						// 先考虑女生
    	{
    		girl_waiting--;						// 女生等待队列减少
    		V(S_girls);							// 唤醒女生想要使用浴室进程
    	}
    	else if (boy_waiting>0)					// 再考虑男生
    	{
    		boy_waiting--;						// 男生等待队列减少
    		V(S_boys);							// 唤醒男生想要使用浴室进程
    	}
    	else
    	{
    		using = 0;							// 如果没有人等待了,就把显示浴室没有人用
    	}
    	V(S_mutex);								// 释放资源
    }
    (4)女生想要使用浴室
    void girl_wants_to_use_bathroom()
    {
    	P(S_mutex);								// 是否有空资源
    	if (using==0)							// 如果浴室没有人
    	{
    		using = 1;							// 使用浴室洗澡
    		V(S_mutex);							// 洗完澡把浴室资源释放
    	}
    	else
    	{
    		girl_waiting++;						// 女生等待队列增加
    		V(S_mutex);							// 释放资源
    		P(S_girls);							// 如果轮不到女生上手,阻塞:排队等着
    	}
    }

    (5)女生离开浴室
    void girl_leaves_bathroom()
    {
    	boy_leaves_bathroom();					// 和男生离开浴室一样
    }


    展开全文
  • 操作系统信号量PV操作题若干 包括商店 ,图书馆,过桥等~~~
  • 信号量-PV操作

    2020-03-11 18:33:29
    PV操作信号量semaphorePV操作生产者消费者问题读者写作问题哲学家就餐问题理发师睡觉问题 信号量semaphore 表示资源个数的整型量 >0 表示当前资源的个数 <0 其绝对值表示系统因请求该类资源而造成的阻塞...

    信号量semaphore

    表示资源个数的整型量

    >0 表示当前资源的个数

    <0 其绝对值表示系统中因请求该类资源而造成的阻塞进程个数

    PV操作

    两条原语(一种特殊的操作不能被系统中断

    P(S)= -1分配一个可用资源

    V(S)= +1释放一个资源

    生产者消费者问题

    共享一个缓冲区,生产者投放/消费者获取

    semaphore mutex=1; //控制生产者消费者之一进入缓冲区
    semaphore full=0; //缓冲区中满的个数
    semaphore empty=n; //缓冲区中空的个数
    
    main(){
        cobegin
            producer();
            consumer();
        coend
    }
    
    producer(){
        while(true){
            生产;
            P(empty);
            P(mutex);
            将一个产品放入缓冲区;
            V(mutex);
            V(full);
        }
    }
    
    consumer(){
        while(true){
            P(full);
            P(mutex);
            取一个产品出缓冲区;
            V(mutex);
            V(empty);
            消费;
        }
    }
    

    生产和消费操作中的P(占用)操作不能交换顺序,否则可能产生死锁

    读者写作问题

    多个读者可以同时访问数据集,但写进程不能和写进程或者读进程同时访问数据集

    int rc=0; //读者数
    semaphore mutex=1;
    semaphore db=1;
    
    main(){
        cobegin;
            reader();
            writer();
        coend;
    }
    
    reader(){
        while(true){
            P(mutex);
            rc+=1;
            if(rc==1)
                P(db);
            V(mutex);
            读数据集;
            P(mutex);
            rc-=1;
            if(rc==0) 
                V(db);
            V(mutex);
        }
    }
    
    writer(){
        while(true){
            P(db);
            写数据集;
            V(db);
        }
    }
    

    读者进程一旦出现(根据rc判断)则写入进程资源(db)不可用,即最终呈现读者优先

    哲学家就餐问题

    五个哲学家在一个桌子上,有五根筷子分别在每个人旁边

    semaphore stick[5]={1,1,1,1,1};
    main(){
        cobegin;
            p(0);
            p(1);
            p(2);
            p(3);
            p(4);
        coend;
    }
    
    p(i){
        while(true){
            P(stick[i]);
            P(stick[(i+1)%5]);
            吃饭;
            V(stick[i]);
            V(stick[(i+1)%5]);
        }
    }
    

    解决死锁方法

    • 限制只能四个人吃饭,必定有人能两根筷子吃上饭
    • 奇数先拿左边偶数先拿右边,有个人两边都抢不到
    p(i){
        while(true){
        if(i%2!=0){
                P(stick[i]);
                P(stick[(i+1)%5]);
                吃饭;
                V(stick[i]);
                V(stick[(i+1)%5]);
            }else{
                P(stick[i+1]);
                P(stick[(i)%5]);
                吃饭;
                V(stick[i+1]);
                V(stick[(i)%5]); 
            }
        }
    }
    
    • 左右都是空闲才吃饭
    理发师睡觉问题

    一个理发师一个理发椅五个等待椅,若没有顾客理发师睡觉,当有顾客来唤醒理发师,若理发师正在理且有等待椅空闲则坐下等,否则离开

    semaphore waiting=6,mutex=1,wchair=5,bchair=1,ready=1,finish=1;
    
    barber(){
        while(true){
            P(ready);
            理发;
            V(finish);
        }
    }
    
    customer(){
        while(true){
            P(mutex);
            if(waiting<6){
                waiting+=1;
            }else{
                V(mutex);
                离开;
            }
            P(wchair);
            P(bchair);
            V(wchair);
            V(ready);
            P(finish);
            V(bchair);
            waiting-=1;
            V(mutex);
        }
    }
    
    展开全文
  • PV操作例题解析

    万次阅读 热门讨论 2014-10-13 10:53:28
    尽管自己看了书,老师讲了课,以为对PV操作理解了,但是遇到题的时候还是不会思考。下面这道题,花了很长时间才弄明白,现在把思路写出来,大家共同探讨下。 大家都来思考:  信号量S1、S2、S3、S4分别代表...

        尽管自己看了书,老师讲了课,以为对PV操作理解了,但是遇到题的时候还是不会思考。下面这道题,花了很长时间才弄明白,现在把思路写出来,大家共同探讨下。


    大家都来思考:

        信号量S1S2S3S4分别代表什么含义?

     

    误区:

        把S1S2S3S4当成是P1P2P3P4的信号量

     

    关键点:

        1.P1执行不需要信号量的制约

        2.信号量初始值为0

        3.结合前驱图

        4.从简单入手(P4

     

    我的思路:

        根据图中P2执行完后V(S3)P3执行完后V(S4),结合前驱图,P2P3之前,P3P4之前,可以容易得出,d处应为P(S4)

        那么c呢,从前驱图可以看到,P1P2均有一个指向P3的箭头,所以c处不仅含有P(S3),还有另一个P操作,是P1执行后V的;

        而P2的前驱是P1,故P1执行完后需要V一个供P2执行P操作。

     

    答案:

        aV(S1)V(S2)    bP(S1)    cP(S2)P(S3)    dP(S4)

     

    感受:

        思路不清晰,思维局限,打不开,总觉得欠缺一点东西。审题的时候一定仔细,看懂每一句的含义。如果不会做,可以根据现有知识去推测,考场上不必弄明白每一道题的原理。

    展开全文
  • PV操作来实现他们之间的协调。S1:是否允许司机启动汽车的变量S2:是否允许售票员开门的变量driver()//司机进程{while (1)//不停地循环{P(S1);//请求启动汽车启动汽车;正常行车;到站停车;V(S2); //释放开门变量...

    问题1 一个司机与售票员的例子

    在公共汽车上,为保证乘客的安全,司机和售票员应协调工作:

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

    S1:是否允许司机启动汽车的变量

    S2:是否允许售票员开门的变量

    driver()//司机进程

    {

    while (1)//不停地循环

    {

    P(S1);//请求启动汽车

    启动汽车;

    正常行车;

    到站停车;

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

    }

    }

    busman()//售票员进程

    {

    while(1)

    {

    关车门;

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

    售票

    P(S2);//请求开门

    开车门;

    上下乘客;

    }

    }

    注意:busman() driver() 两个不停循环的函数

    问题2 图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。要几个程序?有多少个进程?(答:一个程序;为每个读者设一个进程)

    (1) 当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞)

    (2) 当图书馆中没有座位时,后到的读者不等待,立即回家。

    解(1 )

    设信号量:S=100; MUTEX=1

    P(S)

    P(MUTEX)

    登记

    V(MUTEX)

    展开全文
  • 计算机操作系统PV操作例题问题1 一个司机与售票员的例子 在公共汽车上,为保证乘客的安全,司机和售票员应协调工作: 停车后才能开门,关车门后才能行车。用PV操作来实现他们之间的协调。 S1:是否允许司机启动...
  • PV操作来实现他们之间的协调。S1:是否允许司机启动汽车的变量S2:是否允许售票员开门的变量driver()//司机进程{while (1)//不停地循环{P(S1);//请求启动汽车启动汽车;正常行车;到站停车;V(S2); //释放开门变量...
  • PV操作来实现他们之间的协调。S1:是否允许司机启动汽车的变量S2:是否允许售票员开门的变量driver()//司机进程{while(1)//不停地循环{P(S1);//请求启动汽车启动汽车;正常行车;到站停车;V(S2);//释放开门变量,相当于...
  • 信号量PV操作

    千次阅读 2017-10-09 09:44:01
    信号量(Semaphore):有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代 码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该...
  • 笔试题:信号量PV操作

    千次阅读 2018-08-06 15:58:18
    PV操作理解: 对于信号量,可以认为是一个仓库,有两个概念,容量和当前的货物个数。 P操作从仓库拿货,如果仓库没有货...创建信号量,设置容量,先有V操作,才能P操作。   P操作:货物个数减1,减过之后,货...
  • PV操作例题

    千次阅读 2009-04-15 08:49:00
    例1 在某展示厅设置一个自动计数系统,以计数器count表示在场的人数,count是动态变化的...(并发进程之间的互斥问题)解:定义信号量:S——表示是否有进程进入临界区,初值为1.(表示没有进程进入临界区)begin cou
  •   在这篇文章,重点讨论三个经典的PV操作例题:生产者消费者问题、读者写者问题、哲学家进餐问题。对这三个问题会逐层分析,不断改进。希望能通过这个过程对于PV操作有着更深刻的理解。   生产者消费者问题  ...
  • 锁机制只能判断临界资源是否被占用,所以他解决了互斥问题,但是他不能确定前面的进程是否完成,所以他不...信号量机制即利用pv操作来对信号量进行处理。 什么是信号量信号量(semaphore)的数据结构为一个值和一
  • 为了有效的处理这两种情况,提出了信号量PV操作。 (1)信号量:是一种特殊的变量,表现形式是一个整形S和一个队列。 (2)P操作:S=S-1,若S,进程暂停执行,进入等待队列。 (3)V操作:S=S+1,若S,唤醒...
  • 操作系统】 信号量典型例题分享

    千次阅读 2020-03-09 19:21:03
    二、信号量典型习题 第一部分-前趋图 1.试写出相应程序来描述下图所示前趋图 解答: 第二部分-PV操作 1. 独木桥问题: 有一座东西方向的独木桥,用P,V操作实现: (1)每次只允许一个人过桥; (2)...
  • pv操作信号量实用实例详解

    千次阅读 多人点赞 2013-09-29 09:22:04
    学习PV操作之前,我们首先来了解两个很基础的概念: 同步、互斥: 同步:其实说同步还不如说”协作“,就是我们的目标只有一个,我们奔着同一个目标去的,都是在大家的努力下共同完成这么一件事情。还是比较容易...
  • PV操作例题(转)

    2010-12-14 13:26:00
    例1 在某展示厅设置一个...(并发进程之间的互斥问题) <br />解:定义信号量:S——表示是否有进程进入临界区,初值为1.(表示没有进程进入临界区) <br />begin <br /> count: Integer; <b
  • 最近双改变了兴趣方向,正在coursera上学习操作系统这门课程 看到了关于多进程的互斥问题 大体就是说考虑到多进程的程序可能会共用共同的某一部分内容,这部分称为临界区 但是由于cpu的调度,如果有两个进程A,B A在...
  •   ...试用“存放 A”和“存放 B”以及 P、V 操作描述产品 A 与 产品 B 的入库过程。 Semaphore Sa = M - 1; Semaphore Sb = N - 1; //代表还能存入的数量 Semaphore mutex = 1; process_A()
  • PV原语操作例题

    千次阅读 2013-10-29 23:30:45
    PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。 信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录...
  • PV操作经典例题——哲学家进餐问题

    万次阅读 多人点赞 2019-04-10 11:31:14
    哲学家进餐问题: 五个哲学家共用一张圆桌,分别坐在周围的五...分析:放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用,为了实现对筷子的互斥访问,可以用一个信号量表示筷子,由这五个信号量构成信...
  • PV操作经典例题——吃水果

    万次阅读 多人点赞 2019-04-05 15:51:10
    问题描述:桌上有一个盘子,每次只能放一个水果,...只要盘子空,妈妈可向盘放水果,仅当盘有自己需要的水果时,儿子或女儿可从中取出,请给出他们三人之间的同步关系,并用PV操作实现四人正确活动的程序。 ...
  • PV操作几个例题

    千次阅读 2019-04-06 12:36:14
    例1: 在一个盒子里,混装了数量相等的黑白围棋子。现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1和P2,其中P1拣白子;P2拣黑子。 注意: ...需设置两个信号量s1,s2来协调他们的活动。...
  • 例:某银行提供1个服务窗口和10个供顾客...取号机每次只允许一人使用,需设置互斥信号量mutex。 座位只有十个,需设置资源信号量seat=10。 叫号工作人员要知道目前挂号人数,需设置资源信号量count 设:mutex=1; se...
  • 信号量是一类特殊的变量,程序对其访问都是原子 操作,且只允许对它进行P(信号变量)和V(信号变量) 操作。 • 二元信号量:取值仅为“0”或“1”,主要用作实现互斥; • 一般信号量:初值为可用物理资源的总数,用于...
  • 总共有 读入、执行、打印 三个进程,试用PV操作描述读入B1打印B2的同步过程。 问题解读: 这个问题就是说了这样一件事:一个输入B1,被操作之后,成为B2,将B2打印。怎样用PV操作来说这件事。那么新的问题来了:啥...
  • PV操作经典例题——和尚打水

    千次阅读 多人点赞 2019-04-05 14:53:40
    和尚打水问题 某寺庙,有小和尚和老和尚若干,有一个水缸,由小和尚提水入缸供老和尚饮用.水缸可以容纳10桶水,水取自同一口井,由于水井口窄,每次只能容纳一个...每次入水取水不可同时进行,所以需设一个互斥信号量m...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 353
精华内容 141
关键字:

信号量pv操作例题