操作系统中四步法实现PV操作

操作系统中,为了避免进程的死锁,给出了一种有效的控制算法----PV操作。PV操作是一种在利用PV操作实现进程的同步与互斥时,确保进程不会产生死锁和错误的算法。同学们在学习之初往往不知如何下手,如何确定信号量,如何确定进程是同步还是互斥,首要解决的问题就是准确无误地理解PV原语的意义。

1 PV原语的含义:

P操作和V操作是不可中断的程序段,称为原语。PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。
P原语操作的意义是:
(1)信号量减1;
(2)若信号量减1后仍大于或等于零,则进程继续执行;
(3)若信号量减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
V原语操作的意义是:
(1)信号量加1;
(2)若相加结果大于零,则进程继续执行;
(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断发生。其中最容易被忽略的是V操作的第三步,当相加结果小于等于零,不但要继续执行本进程,还要从该信号的等待队列中唤醒一等待进程,这点比较容易出错。

2 PV操作在进程同步中的意义

进程同步包括进程互斥和进程同步两个方面,是操作系统管理共享资源的一种手段。用P、V操作解决进程同步问题时首先应确定问题是属于进程互斥还是进程同步,或是互斥与同步的混合问题。
在互斥中,P操作的意义是判断是否能进入临界区,申请资源;V操作的意义是退出临界区,释放资源;信号量初值一般设置为资源的可用个数。
在同步中,P操作的意义是接受发来的信息、通知,表示可以执行;V操作的意义是发送消息、通知,告知对方。
并且PV操作必须成对出现,在进程的互斥问题中,它们应成对出现在同一进程中;当遇到进程同步问题时,虽然也成对出现,但P操作应在等待消息的进程中,V操作应在发送消息的进程中,只有在含有V操作的进程发送消息之后,P操作的进程才能执行。
信号量是一整数,信号量大于等于零时代表可供并发进程使用的资源实体数,但信号量小于零时则表示正在等待使用临界区的进程数。

3 实现PV的四步法

  1. 第一步确定进程的个数以及进程间关系,这一步非常重要,如果这步理解不准确,则以下都将是错误的。进程的个数主要看题目中需要PV控制的事件有多少个,则进程个数就为几。进程间的关系主要指是进程同步还是进程互斥,它决定了PV操作在进程中的意义,进程的互斥往往是进程间的顺序推进,而进程的同步是多个进程间的协同工作,具有并发性。
  2. 第二步设置信号量的个数,一般情况下,在进程互斥中,信号量都为一个;在同步中,要根据进程间的同步关系来设置信号量的个数, 有一个也可能是多个。
  3. 第三步画出工作流程图,流程图的正确性是清楚理解题意的最好反映,也是实现PV操作的关键一步,工作流程图越准确,最后的算法就越容易实现。
  4. 第四步根据流程图转化PV操作并给信号量赋初值,如果前面的步骤都非常详细准确,则这步主要是看个人的编程基础,用不同的语言实现都可以,最好是用自己掌握较好的一门语言。
    下面就一些典型例子做分析,在分析中理解“四步法”在进程同步中的实际运用:

3.1 用PV原语实现进程的互斥。

以下例子说明进程的互斥实现:哲学家进餐问题

有四位哲学家围着一个圆桌在思考和进餐,每人思考时手中什么都不拿,当需要进餐时,每人需要用刀和叉各一把,餐桌上的布置如图所示,共有两把刀和两把叉,每把刀或叉供相邻的两个人使用。请用信号量及PV操作说明四位哲学家的同步过程。

  1. 第一步确定进程的个数及其工作内容。本例子涉及四个进程,每个哲学家为一个进程。因相邻的两个哲学家要竞争刀或叉,刀或叉就成为了临界资源,所以属于互斥关系。
  2. 第二步确定互斥信号量的个数、含义及PV操作。设置4个互斥信号量fork1,fork2,knife1,knife2,其初值均为“1”,分别表示叉1,叉2,刀1,刀2是可用的。
  3. 第三步画工作流程图。一般情况下,互斥问题中进程的工作流程基本相同,所以只要画出其中一个进程的流程图即可。
  4. 第四步根据流程图写出相应算法。用类C语言描述互斥关系,互斥描述如下:
    在这里插入图片描述
    判断进程间是否互斥,关键是看进程间是否共享某一公有资源,一个公有资源与一个信号量相对应。确定信号量的值是一个关键点,它代表了可用资源实体数。

3.2用PV原语实现进程的同步

与进程互斥不同,进程同步时的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关,所以称该信号量为私有信号量。利用PV原语实现进程同步的方法是:首先判断进程间的关系为同步的,且为各并发进程设置私有信号量,然后为私有信号量赋初值,最后利用PV原语和私有信号量规定各进程的执行顺序。
另外一个问题就是P原语是不是一定在V原语的前面,回答是否定的。下面看一个例子:
例2:设在公共汽车上,司机和售票员的活动分别是:司机:启动车辆,正常行车,到站停车。售票员:上乘客,关车门,售票,开车门,下乘客。用PV操作对其控制。
分析:

  1. 第一步: 确定进程间的关系。司机到站停车后,售票员方可工作。同样,售票员关车门后,司机才能工作。所以司机与售票员之间是一种同步关系。
  2. 第二步: 确定信号量及其值。由于司机与售票员之间要互通消息,司机进程设置一个私有信号量S1,用于判断司机能否进行工作,初值为0。售票员进程设置一个私有信号量S2,用于判断是否停车,售票员是否能够开车门,初值为0。
  3. 第三步: 画出工作流程图。此题流程图就不一致(在算法中体现)。
  4. 第四步: 根据流程图写出相应算法。
    实现:
    在这里插入图片描述

3.3 用PV原语实现进程同步与互斥的混合问题

有了上面的分析后,下面来考虑进程同步与互斥的混合问题就不难了。混合问题当中只要分清哪些是互斥信号量,哪些是共享信号量,其它的照四步法做即可,在这儿不详述。

  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
步法是一种常用的控制算法,可以用于实现轨迹跟踪。在MATLAB中,可以按照以下步骤进行实现: 1. 定义系统模型:根据实际情况,建立系统的动力学模型,可以是线性或非线性模型。假设系统的状态方程为 x' = f(x,u),其中 x 表示系统的状态向量,u 表示系统的控制输入。 2. 设计轨迹跟踪控制器:利用反步法的思想设计控制器,使得系统的状态能够跟踪给定的轨迹。通常,反步法的设计包含两个关键步骤:反步追踪控制器的设计和反步稳定器的设计。 3. 反步追踪控制器的设计:通过反步法的思想,选择一个合适的虚拟控制输入 v,使得系统的状态能够追踪给定轨迹。设计虚拟控制输入 v,使得系统的状态误差 e 满足:e = x_d - x,其中 x_d 表示给定的轨迹。 4. 反步稳定器的设计:通过反步法的思想,选择一个合适的虚拟控制输入 u,使得系统的状态能够稳定在给定轨迹上。设计虚拟控制输入 u,使得系统的状态满足稳定条件:f(x,u) = v。 5. 实施控制器:将设计好的控制器与系统模型相结合,形成闭环控制系统。利用MATLAB编写代码,将系统模型和控制器函数进行编程实现。然后,通过仿真验证控制器的性能,可以在MATLAB中使用simulink等工具进行系统仿真。 总结:反步法是一种常用的控制算法,可以用于实现轨迹跟踪。在MATLAB中,我们需要先建立系统的动力学模型,然后根据反步法的思想设计轨迹跟踪控制器,最后将模型和控制器相结合进行仿真实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值