论文部分内容阅读
摘要:本文借助化整为零、循序渐进的思想,总结了4步巧解同步与互斥难题,即构筑原型、分析同步互斥并定义信号量、信号量赋初值、完善代码,思路清晰,简单易行,并在实践中证明其有效性。
关键字:进程;同步;互斥
【中图分类号】F224-39
1 引言
1984年,在东京国际马拉松邀请赛中,名不见经传的日本选手山田本一出人意料地夺得了世界冠军。助他成功的就是化整为零、循序渐进的“智慧”。
进程的同步和互斥是操作系统学习中一个难点,其试题题目多,学生常常因为思路不清,最终得分率很低,如果我们能利用这一“智慧”,可以有效地降低难度,提高得分点。
纵观操作系统的发展,当由单道批处理系统向多道批处理系统发展时,为了解决并行操作中与时间有关的错误,引入进程的同步和互斥,所以是在原有代码基础上的扩充。受此启示,本人探讨了以代码原形为基础,逐步解决同步与互斥难题的方法。
2 区分同步与互斥
有的教材将同步和互斥统一用同步来讲解,本人认为同步和互斥是存在许多相同点,但从解题的角度出发,如何将二者正确的区分开,是化解这一难题的最关键的地方。
进程互斥:当有若干进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用该资源,其它进程必须等待,直到该资源的占用者释放了资源。
进程同步:并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消息,当没有得到该消息时,应等待,直到消息到达时才被唤醒。
3化整为零、循序渐进
下面以多生产者、多消费者、多缓冲区为例。
问题描述:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。要求不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。
解题思路:为使生产者进程和消费者进程能并发执行,在两者之间设置一个具有n个缓冲区的循环缓冲池,通过循环链指针来实现。
第一步:构筑原型,即给出不考虑同步互斥的代码。
第二步:分析同步和互斥,定义信号量。
消费者进程不能到一个空缓冲区去取产品,生产者进程不能向一个装满产品的缓冲区中投放产品,属于同步关系,需要传递的信息有:生产者进程需要告诉消费者进程已生产了产品,即增加了一个产品;消费者进程需要告诉生产者进程已消费了产品,即增加了一个空缓冲区。可以通过设置两个信号量sp和sg来实现,其中sp表示空缓冲区的个数,sg表示产品的个数。
多个生产者进程共享变量k,多个消费者进程共享变量t,属于互斥,分别设置两个信号量mutex1和mutex2。
第三步:给信号量赋初值。
同步信号量的初值是资源数,刚开始时,空缓冲区的个数是n,产品个数是0,所以赋值sp:=n;sg:=0。
互斥信号量初值都为1。
在临界区的前面加入其对应信号量的p操作,后面加入其对应信号量的v操作即可。
(2) 同步操作:在生产者进程中,放入产品前申请空缓冲区,执行p(sp);放入后增加产品个数,执行v(sg);在消费者进程中,取产品前申请产品,执行p(sg);取走产品后增加空缓冲区的个数,执行v(sp)。
(3) 当同步和互斥的p操作插入同一位置时,原则是先执行同步信号量的p操作,后执行互斥信号量的p操作。
信号量的v操作不会引起死锁,所以不存在次序问题。
4 实际应用
由于涉及进程同步和互斥的试题题目多,对于新题目,能得到满分的可能性几乎为零,通过步步为营的解决问题,可以最大程度的提高得分率。本人在教学中对照实验同一年级同一专业的两个平行班级(1班、2班),从表1中可以发现采用步步为营,4步解决同步互斥教学的班级,不论是讲解过的考题还是新题,其高分比例、平均分均高于按照传统方法一步到位的解决问题的平行班级高,尤其对于新题的得分率有了明显的提高。更为重要的是,有了步步为营解决问题的思路后,学生对于同步互斥中新题的恐怖心理有了很大的缓解,增强了自信心。所有这些都说明这一理论在实际教学中取得了一定的效果。
5 結论
托尔斯泰曾说过:“人要有生活的目标:一辈子的目标,一个阶段的目标,一年的目标,一个月的目标,一个星期的目标,一天的目标,一小时的目标,一分钟的目标,还得为大目标牺牲小目标。”为了不在遇到同步和互斥问题时思路混乱、丧失信心,我们可以将这一难题划分为若干个小问题,通过逐个解决每个小问题来不断完善代码,最后解决整个问题。
参考文献:
[1] 汪建国, 把复杂问题简单化.北京:企业改革与管理.2011.7
[2]贺玉珍,等.操作系统中进程同步实现方法探讨.杭州:计算机时代.2011.9
[3]常静.操作系统中P、V操作实现进程的同步与互斥,合肥:电脑知识与技术. 2012.30
[4]南楠.操作系统中四步法实现PV操作.内江:内江科技.2007.9
[5]于长锐,等.复杂决策问题形式化方法研究.天津:管理科学学报. 2002.6
[6]吴蓓.关于进程互斥同步的讨论及PV操作编程的实践绵阳:西南工学院学报.1996.1
关键字:进程;同步;互斥
【中图分类号】F224-39
1 引言
1984年,在东京国际马拉松邀请赛中,名不见经传的日本选手山田本一出人意料地夺得了世界冠军。助他成功的就是化整为零、循序渐进的“智慧”。
进程的同步和互斥是操作系统学习中一个难点,其试题题目多,学生常常因为思路不清,最终得分率很低,如果我们能利用这一“智慧”,可以有效地降低难度,提高得分点。
纵观操作系统的发展,当由单道批处理系统向多道批处理系统发展时,为了解决并行操作中与时间有关的错误,引入进程的同步和互斥,所以是在原有代码基础上的扩充。受此启示,本人探讨了以代码原形为基础,逐步解决同步与互斥难题的方法。
2 区分同步与互斥
有的教材将同步和互斥统一用同步来讲解,本人认为同步和互斥是存在许多相同点,但从解题的角度出发,如何将二者正确的区分开,是化解这一难题的最关键的地方。
进程互斥:当有若干进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用该资源,其它进程必须等待,直到该资源的占用者释放了资源。
进程同步:并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消息,当没有得到该消息时,应等待,直到消息到达时才被唤醒。
3化整为零、循序渐进
下面以多生产者、多消费者、多缓冲区为例。
问题描述:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。要求不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。
解题思路:为使生产者进程和消费者进程能并发执行,在两者之间设置一个具有n个缓冲区的循环缓冲池,通过循环链指针来实现。
第一步:构筑原型,即给出不考虑同步互斥的代码。
第二步:分析同步和互斥,定义信号量。
消费者进程不能到一个空缓冲区去取产品,生产者进程不能向一个装满产品的缓冲区中投放产品,属于同步关系,需要传递的信息有:生产者进程需要告诉消费者进程已生产了产品,即增加了一个产品;消费者进程需要告诉生产者进程已消费了产品,即增加了一个空缓冲区。可以通过设置两个信号量sp和sg来实现,其中sp表示空缓冲区的个数,sg表示产品的个数。
多个生产者进程共享变量k,多个消费者进程共享变量t,属于互斥,分别设置两个信号量mutex1和mutex2。
第三步:给信号量赋初值。
同步信号量的初值是资源数,刚开始时,空缓冲区的个数是n,产品个数是0,所以赋值sp:=n;sg:=0。
互斥信号量初值都为1。
在临界区的前面加入其对应信号量的p操作,后面加入其对应信号量的v操作即可。
(2) 同步操作:在生产者进程中,放入产品前申请空缓冲区,执行p(sp);放入后增加产品个数,执行v(sg);在消费者进程中,取产品前申请产品,执行p(sg);取走产品后增加空缓冲区的个数,执行v(sp)。
(3) 当同步和互斥的p操作插入同一位置时,原则是先执行同步信号量的p操作,后执行互斥信号量的p操作。
信号量的v操作不会引起死锁,所以不存在次序问题。
4 实际应用
由于涉及进程同步和互斥的试题题目多,对于新题目,能得到满分的可能性几乎为零,通过步步为营的解决问题,可以最大程度的提高得分率。本人在教学中对照实验同一年级同一专业的两个平行班级(1班、2班),从表1中可以发现采用步步为营,4步解决同步互斥教学的班级,不论是讲解过的考题还是新题,其高分比例、平均分均高于按照传统方法一步到位的解决问题的平行班级高,尤其对于新题的得分率有了明显的提高。更为重要的是,有了步步为营解决问题的思路后,学生对于同步互斥中新题的恐怖心理有了很大的缓解,增强了自信心。所有这些都说明这一理论在实际教学中取得了一定的效果。
5 結论
托尔斯泰曾说过:“人要有生活的目标:一辈子的目标,一个阶段的目标,一年的目标,一个月的目标,一个星期的目标,一天的目标,一小时的目标,一分钟的目标,还得为大目标牺牲小目标。”为了不在遇到同步和互斥问题时思路混乱、丧失信心,我们可以将这一难题划分为若干个小问题,通过逐个解决每个小问题来不断完善代码,最后解决整个问题。
参考文献:
[1] 汪建国, 把复杂问题简单化.北京:企业改革与管理.2011.7
[2]贺玉珍,等.操作系统中进程同步实现方法探讨.杭州:计算机时代.2011.9
[3]常静.操作系统中P、V操作实现进程的同步与互斥,合肥:电脑知识与技术. 2012.30
[4]南楠.操作系统中四步法实现PV操作.内江:内江科技.2007.9
[5]于长锐,等.复杂决策问题形式化方法研究.天津:管理科学学报. 2002.6
[6]吴蓓.关于进程互斥同步的讨论及PV操作编程的实践绵阳:西南工学院学报.1996.1