鲁力 韩洁 徐琴
摘要:操作系统是计算机系统中的核心系统软件,它负责控制和管理这个系统资源并协调用户有效地使用这些资源,使计算机系统高效的工作。进程管理部分是操作系统课程中的重要内容。而进程同步是进程管理中十分重要的部分。怎样很好的解決进程同步问题,一直是初学者所面临的难题。该文通过四个简单易懂的步骤,使初学者可以很快掌握使用信号灯的PV操作来解决进程同步的问题。进而使初学者能够更好地理解和掌握进程同步问题。
关键词:操作系统;进程同步;信号灯;P操作;V操作
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)13-0038-02
1概述
操作系统是计算机科学与技术领域中最为活跃的学科之一,因而操作系统课程也自然是该专业的一门核心的专业基础课。操作系统课程内容综合了基础理论教学、课程实践教学、最新技术追踪等多项内容。操作系统课程的重要性在于教学内容必须兼顾基础性和前瞻性,同时体现趣味性和时尚性,以激发学生的学习兴趣。
进程同步是操作系统中处理机管理的核心问题。是操作系统的核心知识,也是进程管理当中的重、难点。学生是否能够很好的掌握进程同步是反映学生是否学习好进程这部分内容的重要指标。
在多年的实际教学经验中,我发现在讲解进程同步问题时,学生可以很容易理解,但是,一旦使用信号灯的PV操作去解决进程同步的问题候,很多学生都很茫然,很多时候不知所措。
因此,本文将通过使用四步简单的操作,使学生迅速掌握用PV操作解决进程同步问题的方法。使得学生即使在不完全理解进程同步的原理的情况下,也能解决进程同步问题。进而,能够加深对进程同步的理解。
2进程同步和信号灯的基本概念
所谓进程同步,就是并发进程在一些关键点上可能需要互相等待和互通消息,这样的相互制约关系称为进程同步。同步意味着两个或多个进程之间根据它们一致同意的协议进行相互作用。
信号灯的概念是由Dijkstra提出的f1968)。他把同步的关键概念抽象到信号量这个概念中,信号量是一个被保护的变量,只有P、V操作和一种称为信号量初始化操作才能访问和改变它的值。
信号灯是一个确定的二元组(s,q),s是一个具有非负初值的整型变量,q是一个初始状态为空的排队栈。s代表资源的实体。在实际应用中应准确地说明s的意义和初值,每个信号灯都有一个队列,其初始状态为空。
信号灯的值仅能由P、V操作来改变,对信号灯的P操作记为:P(S),P操作是一个原子操作。对信号灯的V操作记为:V(S),V操作也是一个原子操作。在实际操作系统中,一般情况下是由机器硬件提供P、V操作的指令,当然是原子操作,若机器不提供P、V操作的指令,则操作系统提供P、V操作原语。
P操作:
1)s值减1;
2)若相减结果大于等于0,则进程继续执行;
3)若结果小于0,则该进程挂起。
注:挂起该进程包括:保留调用进程CPU现场;置“等待”状态;入等待队列;转进程调度;
V操作:
1)s值加1;
2)若相加结果大于0,进程继续执行;
3)否则,唤醒一个(或多个)等待该信号灯的进程,然后本进程继续执行。
3四步解决进程同步问题
为描述方便,可用一个图来表示进程集合的执行时间轨迹。如图1所示,图的连接描述了进程间开始和结束的次序约束。此图称为进程流图。如用s表示系统中某一任务启动,f表示完成。则图1是四个并发程序的进程流图。根据此图,我们可以看到四个并发程序中p1必须先执行,p1执行完后p2、p3开始执行,p2、p3都执行完后p4才可以开始执行。我们发现该进程集合的执行次序是混合式的,既有顺序执行,也有并行执行的。下面开始用四个简单步骤,解决PV操作实现进程同步的问题。
1)搭框架
如图2所示,首先我们按照程序的惯例写法,将主程序和需要并发的进程写好。需要几个信号灯暂时不用管,我们将在第四步解决这个问题。其中,cobegin和coend之间的进程函数,代表这些进程是并发的。由于,图l中有四个进程,所以cobegin和coend之间有四个进程函数。
2)写PV
框架搭好了以后,我们将要根据同步进程之间的关系来书写PV操作。在这一步中主函数不用变动,只需要改变进程的函数。在这里,我们可以简单的把P操作看作申请操作,把v操作看作同意操作。也就是某个进程的开始如果要申请其他进程的同意,就做P操作,同理如果某个进程结束后需要同意其他进程的开始就需要做v操作。如图3所示p1进程开始不受制约,不需要其他进程同意,所以,pl不用做P操作,但p1运行完后需要同意p2、p3两个进程开始执行,所以p1需要做两次V操作。同理p2进程开始需要申请p1进程同意,因此,p2需要做一次P操作,p2运行完后需要同意p4进程开始,所以p2需要做一次V操作。p3同p2相同。p4进程需要申请p2、p3两个进程的同意才能开始,所以p4需要做两次P操作,p4运行完了后不需要同意任何其他进程开始,因此,p4不需要做v操作。根据以上分析,我们可以在四个进程函数中添加PV操作,如图3所示。
3)填信号量
在PV操作写好后,就需要在对应的PV操作函数中进行信号量s的填写。信号量s的名字直接按照申请和同意两个进程的名字填写即可。例如p1进程需同意p2进程的开始申请,则p1的V操作函数和p2的P操作函数中填上参数s12。其他PV操作填写方法一样,如图4所示。
4)赋初值
信号量的个数和名字起好了后,就可以在主函数中进行信号量的定义。本例为了保证在前驱进程没有同意即做V操作的时候,后继进程无法开始运行。所有的信号量必须赋值为0。如图5所示。
至此,所有程序书写完毕,用信号灯的PV操作实现进程同步的问题已经解决。
4结束语
信号灯是实现程序并发执行,进程之间同步和互斥的非常好的一种方法和手段,初学者有必要很好的掌握其概念和解题方法。
本文根据多年的教学经验,主要针对初学者在用信号灯解决进程同步问题中,不知所措,无从下手的问题,通过四个简单步骤让学生掌握解题方法,进而提高对进程同步问题的理解和掌握。学生普遍反应,此种解题方法容易掌握,解题无压力,效果良好。