计算机时代2009年第9期
・
7l
・
进程同步的教学方法探讨
白秀玲.宋晓莉,邱涌,张营。张孝国。杨春蕾(河南科技大学电子信息工程学院,河南洛阳47l003)
摘要:在操作系统课程的教学中,进程同步是其中一个重点,也是难点。进程概念较抽象,所以进程同步成为老师难讲、学生难学的内容。该文探讨了进程同步的教学方法,从易到难,循序渐进,边分析边讲解。教学实践表明:该方法教学效果良好,能使学生很容易理解进程同步的概念和方法。关键词:操作系统;进程;同步;教学方法
Discussion
BAIXiu・ling,SONG
on
Teaching
Method
ofProcess
Synchronization
Xiao-li,QtUYong,ZHANGLei,ZHANGXiao—guo,YANGChun—lei
University
(CollegeofElectronicandInformationEngineering,ttenan
Abstract:Processsynchronizationisis
that
very
an
of&如,h∞and死如∞£ogy,Luoyang,Henan471003,China)
course.The
concept
emphasis
anddifficultyintheteachingofoperatingsystem
to
of
process
abstract,soprocess
easy
synchronization
to
ishard
teachandlearn.Teachingmethod
of
processsynchronizationis
that
discussed,
isteachingfrom
the
difficult,stepby
step,explainingwhileanalyzing.Thepracticeofteachingprovestheteaching
effectof
methodisgoodandthestudentscaneasilyunderstandtheconceptandmethodsofprocesssynchronization.
method
Keywords:operatingsystem;process;synchronization;teaching
0引言
操作系统是计算机系统中的核心软件之一,因此,操作系统基础知识是任何合格的计算机专业人员必须掌握的专业知识。基于此种原因,在计算机专业的课程体系中,“操作系统”向来被指定为计算机专业本专科生的核心和基础课程。毫无疑问,提高该门课程的教学质量对于培养合格的计算机专业人员是至关重要的;学生对它的掌握程度,也影响着他们的专业水平及发展方向。
在“操作系统”课程的教学中,进程管理是一个主要内容。其中如何有效地使用信号量机制来实现并发进程的互斥与同步是进程管理乃至整门课程教学中的重点和难点。进程管理、PV操作等概念比较抽象,学生很难理解,往往成为操作系统学习中的瓶颈。这类题型变化多、实例多,又与实际生活中的问题有着紧密联系。相对而言,进程互斥较容易理解,进程同步难理解。经典的进程同步问题有“生产者一消费者问题”、“哲学家进餐问题”和“读者一写者问题”等。“生产者一消费者问题”作为其中较为基础的问题。对帮助理解进程互斥同步具有重要意义,也对学生引申思考和解决其他进程同步问题有着重要作用,所以各类操作系统教材都将其作为主要例题。但大多都在介绍了wait、signal操作之后,就引入该例题,且只有伪代码表示,没有具体的分析过程。在学习过程中,学生经常对该部分内容理解不了,或能理解,但不会分析,更不会应用。遇到类似的题目,往往无从下手,更别说稍难一点的题目了。
在长期的教学经验中,笔者总结出进程同步问题的教学方法,即循序渐进的方法:先讲解较简单的例题,再逐渐加深难度,边分析边讲解算法;通过课堂讨论,让学生自己寻找解决问题的办法,自己发现算法中存在的I、uJ题;同时讲解更多例题,让学生课下练习大量题目。通过这样的方法,提高了学生学习的
兴趣,学生理解起来也觉得较为容易。
1临界区和wait(S)/signaI(S)操作
在多道程序环境下,由于进程共享资源和进程合作,使得并发执行的多个进程l’日J可能产生互斥或同步的相互制约关系,如果不采取措施来保证这种制约或依赖关系,则可能导致结果的不可再现性。这是多道程序设计带来的山J题,若解决不好,不仅影响系统效率,而且还可能导致系统崩溃。为此,现代操作系统都在内核中设有进程的互斥同步机制,以控制并发执行的诸进程问能有效地共享资源和相互合作,同时使并发程序的执行仍具有可再现性。信号量机制是操作系统中协调进程同步与互斥的一种常用的工具。
(1)临界区:l临界区是指并发进程中与共享变量有关的程序段。
(2)信号量s:可用临界资源数量。取值只允许为…0’和“l”
的信号量称为二元信号量,主要用作互斥变量(Mutex);取值允许为整数的信号量称为一般信号量(Semaphore),主要用于进程问的同步。
(3)wait(S)/signal(S)操作:最初由Dijkstra提出的两个原子操作概念,信号量除初始化外仅能通过这两个标准的原子操作Wait(S)和Signal(S)来访I’uJ。原子操作在执行时是不可中断的,即当一个进程在修改某信号量时,没有其他进程可同时对该信号量进行修改,以解决进程问同步和互斥的问题。
Wait(S)操作:又称作P操作。对某资源信号量s作wait操作,表示申请资源,可用资源数S=S—l;如果S<0,表示无资源可用,本进程挂起。变成等待资源s的“等待”状态。
Signal(S)操作:又称作V操作。对某资源信号量s作signal操作,表示释放资源,可用资源数S=S+I;如果S≤o,表示有进程在等待该资源,则释放该进程,即将等待该资源s的首进程
万方数据
.72
ComputerEraNo.92009
的状态变为“就绪”状态,去等待CPU继续运行。
(4)进程互斥:在多种活动同时存在的系统中,要求在进行某一活动时,不允许进行其它活动,这种限制条件称作互斥。
(5)进程同步:指两个或多个进程为了合作完成同一任务,在执行速度或某个确定的时序点上必须相互协调,即一个进程依赖于另一个进程发送的消息,进程之I’日J体现了一种相互合作的关系。当用wait、signal操作实现进程的同步问题时,合作进程之间通过信号量进行互发消息,执行wait操作测试消息是否到达,即是否得到合作进程的通知可以执行该进程;而执行signal操作是向其合作进程发送消息,通知它进行下一步操作。
2进程同步问题
2.1单人单缓冲问题
在介绍了信号量的概念之后,先从最简单的同步问题开始讲解,即单人单缓冲问题。
问题:计算进程和打印进程共同使用同一缓冲区Buf。计算进程反复地把每次计算结果放入Buf中,而打印进程则把计算进程每次放入Buf中的数据通过打印机打印输出。Buf中每次可以存放—个数据。
在这个问题中,生产者有一个:计算进程;消费者有一个:打印进程;用以存放产品(数据)的缓冲区Buf容量也是1。所以这个问题被称作单人单缓冲I、UJ题。
要解决该问题,首先要明确两点要求:当计算进程还未把新数据放入Buf之前,要取数据的打印进程需等待;当打印进程还未把数据取走之前,要放数据的计算进程需等待。因此,在计算进程要往Buf中放数据前,先要检测一下Buf中的数据是否已被打印进程取走;在放完数据后.要通知打印进程:Buf中已有数据。相应地.打印进程在从Buf中取数据之前,要先检测一下Buf中是否有数据;在取走数据之后,还要通知计算进程:数据已被取走。经过分析,在该题中应设置两个信号量:empty代表可用的缓冲区资源,初值为l;full代表可用的数据资源(计算进程计算出的数据),初值为0。对该|’uJ题可描述如下:
Proceducer:(计算进程)
Consumer:(打印进程)computer
a
nextp;
wait(full);
wait(empty);
take
an
itemfromBuf;
putnextptoBuf;
signal(empty);
signal(full);
printtheitem;
这个问题是一个典型的进程同步问题:两个进程相互合作完成一个任务,一个进程的执行受到另一进程的影响。在该问题中也暗含有互斥的关系:一个进程在放(取)数据时,不允许另一进程同时进行。但在该|、UJ题中不需要设置互斥信号量,这是因为缓冲区或数据的数量最多是l,在执行wait操作时,已起到了互斥的作用。
在进程同步中,单人单缓冲问题有很多,如“黑白棋子问题”,“苹果橘子问题”等都可以归入该类型中。
黑白棋子I、口J题:生产围棋的工人不小心把相等数量的黑子和白子混装在一个箱子里,要求用自动分拣系统把黑子和白子分开。该系统由两个并发执行的进程组成,功能如下:①进程A专门拣黑子,进程B专fJ拣白子;②每个进程每次只拣—个棋
万
方数据子,当一个进程在拣棋子时不允许另一进程去拣棋子;③当一个进程拣了一个棋子(黑子或白子)后,必须让另一个进程拣一个棋子(白子或黑子)。
苹果橘子|’口J题:桌上有一个空盘,每次只能放一个水果。爸爸可向盘内放苹果,妈妈可向盘内放橘子,儿子专等取苹果吃,女儿专等取橘子吃。要求:若盘中已有水果,放者必须等待;若盘中没有自己要吃的水果.吃者必须等待。2.2单人多缓冲问题
问题:类似单人单缓冲问题,但Buf中每次可以存放多个数据,假设为具有n个缓冲区的缓冲池。
可利用一个数组buffer来表示上述的具有n个(o,l,…,n—1)缓冲区的缓冲池。用输入指针in来指示下一个可投放产品的缓冲区,每当生产者进程生产并投放一个产品后,输入指针加l;用一个输出指针out来指示下一个可从中获取产品的缓冲区,每当消费者进程取走一个产品后,输出指针加l。in和OUt初值均为0。由于这里的缓冲池是组织成循环缓冲的,故应把输入指针加l表示成in:=(in+1)modn;输出指针加l表示成out:=(out+I)modn。当(in+1)modn=out时表示缓冲池满;而in=out则表示缓冲池空。在该题中同样应设置两个信号量:empty代表可用的缓冲区资源,初值为n;full代表可用的数据资源,初值为0。对该问题可描述如下:
Proceducer:(计算进程)
Consumer:(打印进程)computer
a
nextp;
wait(full);
wait(empty);nextc:=buffer(out);buffer(in):=nextp;out:=(out+1)modn:
in:=(in+1)modn:
signal(empty);
signal(full);
printtheitem;
2.3多人多缓冲问题(生产者一消费者问题)
问题:多个计算进程和多个打印进程共同使用同一缓冲区Buf。计算进程反复地把每次计算结果放入Buf中,而打印进程则把计算进程每次放入Buf中的数据通过打印机打印输出。Buf为具有n个缓冲区的缓冲池。对该问题稍加修改,计算进程称作“生产者”,打印进程称作“消费者”,计算的结果数据称作“产品”,这就是经典的生产者一消费者(producer--consumer)
问题。
在讲到这个问题时,不能简单地把算法写出,向学生一讲了事。那样会导致学生听完课之后仍然糊里糊涂,不知道怎样设置信号量。最好从上个问题着手,逐步分析,再得出算法。
在该问题中,尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之I’BJ必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。这个问题和上个问题类似:Buf都是n个缓冲区的缓冲池。同样应设置两个信号量:empty代表可用的缓冲区资源,初值为11;full代表可用的数据资源,初值为0。如果把上个问题的算法不加修改地拿到该问题中,大体上来说不会有太大问题,但仔细分析,却会有潜在的错误。比如:在起始条件下,empty值为n(假设n>1),第一个生产者生产了一件产品,先执行了wait(empty),empty减为n—l;接着执行buffer(in):=nextp,将生产的产品放在buffer(O)
计算机时代2009年第9期
中:这时,时』’日】片到了,系统调度其它进程。假没这次调度到的为另一生产者进程,第二个生产者生产了一件产品,先执行了wait(empty),empty减为n-2:接着执行buffer(in):=nextp,因为刚才in尚未增加,仍为0,所以第二个进程仍将生产的产品放在buffer(O)中。这样就导致了两个生产者进程将两件产品放在同一缓冲区中的错误。解决办法为:缓冲区为临界资源,下面的代码为访问临界资源的临界区:
buffer(in):=nextp;in:=(in+1)mod
n;
・
73
・
将算法加以修改,使生产者、消费者之间可以不互斥。为此,生
产者、消费者分别设置各自的互斥信号量,即生产者进程问使
用pmutex进行互斥,消费者进程间使用cmutex进行互斥,而生
产者进程与消费者进程问不互斥。pmutex
为1。问题可描述如下:
Proceducer:(生产者)
producer
an
cmutex的初值均
Consumer:(消费者)wait(full);wait(cmutex);nextc:=buffer(out);out:=(out+1)modsignal(cmutex);signal(empty);consumertheitem:
n:
itemnextp
wait(empty);wait(pmutex);buffer(in):=nextp;in:=(in+1)modsignal(pmutex);signal(full);
n:
对这段代码必须互斥访问。这时可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用。在进入临界区之前,使用wait(mutex)申请进入;退出临界区之后,使用signal(mutex)进行退出。对于消费者进程也存在同样的问题,因此,也需要利用互
斥信号量mutex实现进程对缓冲池的互斥使用。生产者一消费
者问题可描述如下:
Pm∞ducer:(生产者)
producer
an
3结束语
进程管理是“操作系统”课程中非常重要的一部分内容,也是老师难讲、学生难学的内容。进程同步的概念较抽象.学生掌握起来有较大难度。在教学中,可采用本文所述的教学方法。经过一步步的分析,从最初最简单的进程同步问题,到复杂的同步、互斥混合问题,使学生在分析中逐渐掌握进程同步问题的描述方法。实践证明:采用该方法,教学效果良好.学生很容易理解进程同步问题的描述方法,也很有兴趣学习该部分内容;在遇到类似问题时,很容易就能解决。
参考文献:
【1l张尧学,史美林.计算机操作重统教程(第3版)【MJ.清华土学出版社,
2006.
Consumer:(消费者)wait(full);wait(mutex);nextc:=buffer(out);out:=(out+1)modsignal(mutex);signal(empty);
consumertheitern;
n
itemnextp
wait(empty);wait(mutex);buffer(in):=nextp;in:=(in+1)modsignal(mutex);signal(full);
n:
2.4改良的生产者一消费者问题
在上个I’u】题中,生产者、消费者在进入各自临界区时,使用相同的互斥信号量mutex。这样,在保证多个生产者互斥的同时,也限制了生产者必须与消费者之问互斥。但从算法上分析可知,生产者的临界区和消费者的临界区虽然使用了相同的数组,但使用却的是不同的指针,二者并无互斥的必要。因此,可
【2l汤子瀛,哲凤屏,汤小丹.计算机撼作系统(修订版)IMJ.由安电子科杖
土学出版社,2001.
【3JAndrewS.Tanenbaum.ModemOperatingSystemsfM】Second
Edition.机械工业出版社,2003.毯丑
・M一一_一一1・¨●¨-●一¨・.._-~W¨"¨・一-_..-●_¨_…・●~-一~~~一¨…・
(上接第70i)
思维和创新能力,难以达到实践教学的目标。
将科研课题引入教学过程后,教师将科研课题的部分科研内容节选下来,作为辅助该课程的实验内容。而在“数据库大
的数据库课程体系的教学新模式。能否选择合适的科研案例进入教学,是该教学模式成败的关键所在,这就要求教师要有目的地挖掘与科研环节相融合的教学内容.充分利用每个教学环节,帮助学生在实践过程中体验理论对实践的指导作用。实践表明,该教学模式对于为大学生参与科研提供了机会和条件,成为培养大学生创新能力的平台。
参考文献:
【1】王珊,萨师煊.量据库l统概论(第四版)【M】.高等教育出版社,2006.12l钱雪患.“矗据库原理反应甩”镰程教学实践与探讨IJ】.置龙江教育
(高教研究与评估),2008.7—8:107—109
【3l王动武.科研与教学王动并避的理论探索与实践【J】.西南农业人学学
报(社会科学版),2007.5(2):169~172
f4l知盛涛.上学生科研能力训侏与专业健程教学并犰问题振究【J】.一t岛
土学师范学院学报.2007.24(2):113~115
【5】首丹.案例教学法在鼻据库囊统概论中的应用【JI.勘喀大学学报(-兰
科学版),2006.27(2):172-175
型试验周”中,教师可以将实际的科研课题依据学生的能力进
行拆分,以替代自拟题目。在实践过程中,教师要和学生不断交流,对于学生设计过程中存在的问题,要及时反馈。在整个实践过程结束后,教师要向学生展示成功科研项目,帮助学生寻找设计中存在的差距。在实践过程的考核机制中,要避免以
往只注重结果,不注重过程的考核办法,教师要跟踪学生的整
个设计过程,从需求分析、概念结构设计、逻辑结构设计、数据库物理设计、到数据库的实施和维护,每个阶段都要和学生交流,及时反馈,并对该阶段学生的成果,包括设计文档和程序质
量,进行考核,最后给出综合成绩,以促使学生重视整个设计过
程,在真正的科研课题中将课本中学到的知识学以致用。
4结束语
鉴于数据库课程体系的特殊性,提出了与科研课题相结合
黼
万方数据
进程同步的教学方法探讨
作者:作者单位:刊名:英文刊名:年,卷(期):
白秀玲, 宋晓莉, 邱涌, 张营, 张孝国, 杨春蕾, BAI Xiu-ling, SONG Xiao-li,QIU Yong, ZHANG Lei, ZHANG Xiao-guo, YANG Chun-lei河南科技大学电子信息工程学院,河南,洛阳,471003计算机时代COMPUTER ERA2009(9)
参考文献(3条)
1. Andrew S Tanenbaum Modern Operating Systems 20032. 汤子瀛;哲凤屏;汤小丹 计算机操作系统 20013. 张尧学;史美林 计算机操作系统教程 2006
本文链接:http://d.g.wanfangdata.com.cn/Periodical_jsjsd200909028.aspx
计算机时代2009年第9期
・
7l
・
进程同步的教学方法探讨
白秀玲.宋晓莉,邱涌,张营。张孝国。杨春蕾(河南科技大学电子信息工程学院,河南洛阳47l003)
摘要:在操作系统课程的教学中,进程同步是其中一个重点,也是难点。进程概念较抽象,所以进程同步成为老师难讲、学生难学的内容。该文探讨了进程同步的教学方法,从易到难,循序渐进,边分析边讲解。教学实践表明:该方法教学效果良好,能使学生很容易理解进程同步的概念和方法。关键词:操作系统;进程;同步;教学方法
Discussion
BAIXiu・ling,SONG
on
Teaching
Method
ofProcess
Synchronization
Xiao-li,QtUYong,ZHANGLei,ZHANGXiao—guo,YANGChun—lei
University
(CollegeofElectronicandInformationEngineering,ttenan
Abstract:Processsynchronizationisis
that
very
an
of&如,h∞and死如∞£ogy,Luoyang,Henan471003,China)
course.The
concept
emphasis
anddifficultyintheteachingofoperatingsystem
to
of
process
abstract,soprocess
easy
synchronization
to
ishard
teachandlearn.Teachingmethod
of
processsynchronizationis
that
discussed,
isteachingfrom
the
difficult,stepby
step,explainingwhileanalyzing.Thepracticeofteachingprovestheteaching
effectof
methodisgoodandthestudentscaneasilyunderstandtheconceptandmethodsofprocesssynchronization.
method
Keywords:operatingsystem;process;synchronization;teaching
0引言
操作系统是计算机系统中的核心软件之一,因此,操作系统基础知识是任何合格的计算机专业人员必须掌握的专业知识。基于此种原因,在计算机专业的课程体系中,“操作系统”向来被指定为计算机专业本专科生的核心和基础课程。毫无疑问,提高该门课程的教学质量对于培养合格的计算机专业人员是至关重要的;学生对它的掌握程度,也影响着他们的专业水平及发展方向。
在“操作系统”课程的教学中,进程管理是一个主要内容。其中如何有效地使用信号量机制来实现并发进程的互斥与同步是进程管理乃至整门课程教学中的重点和难点。进程管理、PV操作等概念比较抽象,学生很难理解,往往成为操作系统学习中的瓶颈。这类题型变化多、实例多,又与实际生活中的问题有着紧密联系。相对而言,进程互斥较容易理解,进程同步难理解。经典的进程同步问题有“生产者一消费者问题”、“哲学家进餐问题”和“读者一写者问题”等。“生产者一消费者问题”作为其中较为基础的问题。对帮助理解进程互斥同步具有重要意义,也对学生引申思考和解决其他进程同步问题有着重要作用,所以各类操作系统教材都将其作为主要例题。但大多都在介绍了wait、signal操作之后,就引入该例题,且只有伪代码表示,没有具体的分析过程。在学习过程中,学生经常对该部分内容理解不了,或能理解,但不会分析,更不会应用。遇到类似的题目,往往无从下手,更别说稍难一点的题目了。
在长期的教学经验中,笔者总结出进程同步问题的教学方法,即循序渐进的方法:先讲解较简单的例题,再逐渐加深难度,边分析边讲解算法;通过课堂讨论,让学生自己寻找解决问题的办法,自己发现算法中存在的I、uJ题;同时讲解更多例题,让学生课下练习大量题目。通过这样的方法,提高了学生学习的
兴趣,学生理解起来也觉得较为容易。
1临界区和wait(S)/signaI(S)操作
在多道程序环境下,由于进程共享资源和进程合作,使得并发执行的多个进程l’日J可能产生互斥或同步的相互制约关系,如果不采取措施来保证这种制约或依赖关系,则可能导致结果的不可再现性。这是多道程序设计带来的山J题,若解决不好,不仅影响系统效率,而且还可能导致系统崩溃。为此,现代操作系统都在内核中设有进程的互斥同步机制,以控制并发执行的诸进程问能有效地共享资源和相互合作,同时使并发程序的执行仍具有可再现性。信号量机制是操作系统中协调进程同步与互斥的一种常用的工具。
(1)临界区:l临界区是指并发进程中与共享变量有关的程序段。
(2)信号量s:可用临界资源数量。取值只允许为…0’和“l”
的信号量称为二元信号量,主要用作互斥变量(Mutex);取值允许为整数的信号量称为一般信号量(Semaphore),主要用于进程问的同步。
(3)wait(S)/signal(S)操作:最初由Dijkstra提出的两个原子操作概念,信号量除初始化外仅能通过这两个标准的原子操作Wait(S)和Signal(S)来访I’uJ。原子操作在执行时是不可中断的,即当一个进程在修改某信号量时,没有其他进程可同时对该信号量进行修改,以解决进程问同步和互斥的问题。
Wait(S)操作:又称作P操作。对某资源信号量s作wait操作,表示申请资源,可用资源数S=S—l;如果S<0,表示无资源可用,本进程挂起。变成等待资源s的“等待”状态。
Signal(S)操作:又称作V操作。对某资源信号量s作signal操作,表示释放资源,可用资源数S=S+I;如果S≤o,表示有进程在等待该资源,则释放该进程,即将等待该资源s的首进程
万方数据
.72
ComputerEraNo.92009
的状态变为“就绪”状态,去等待CPU继续运行。
(4)进程互斥:在多种活动同时存在的系统中,要求在进行某一活动时,不允许进行其它活动,这种限制条件称作互斥。
(5)进程同步:指两个或多个进程为了合作完成同一任务,在执行速度或某个确定的时序点上必须相互协调,即一个进程依赖于另一个进程发送的消息,进程之I’日J体现了一种相互合作的关系。当用wait、signal操作实现进程的同步问题时,合作进程之间通过信号量进行互发消息,执行wait操作测试消息是否到达,即是否得到合作进程的通知可以执行该进程;而执行signal操作是向其合作进程发送消息,通知它进行下一步操作。
2进程同步问题
2.1单人单缓冲问题
在介绍了信号量的概念之后,先从最简单的同步问题开始讲解,即单人单缓冲问题。
问题:计算进程和打印进程共同使用同一缓冲区Buf。计算进程反复地把每次计算结果放入Buf中,而打印进程则把计算进程每次放入Buf中的数据通过打印机打印输出。Buf中每次可以存放—个数据。
在这个问题中,生产者有一个:计算进程;消费者有一个:打印进程;用以存放产品(数据)的缓冲区Buf容量也是1。所以这个问题被称作单人单缓冲I、UJ题。
要解决该问题,首先要明确两点要求:当计算进程还未把新数据放入Buf之前,要取数据的打印进程需等待;当打印进程还未把数据取走之前,要放数据的计算进程需等待。因此,在计算进程要往Buf中放数据前,先要检测一下Buf中的数据是否已被打印进程取走;在放完数据后.要通知打印进程:Buf中已有数据。相应地.打印进程在从Buf中取数据之前,要先检测一下Buf中是否有数据;在取走数据之后,还要通知计算进程:数据已被取走。经过分析,在该题中应设置两个信号量:empty代表可用的缓冲区资源,初值为l;full代表可用的数据资源(计算进程计算出的数据),初值为0。对该|’uJ题可描述如下:
Proceducer:(计算进程)
Consumer:(打印进程)computer
a
nextp;
wait(full);
wait(empty);
take
an
itemfromBuf;
putnextptoBuf;
signal(empty);
signal(full);
printtheitem;
这个问题是一个典型的进程同步问题:两个进程相互合作完成一个任务,一个进程的执行受到另一进程的影响。在该问题中也暗含有互斥的关系:一个进程在放(取)数据时,不允许另一进程同时进行。但在该|、UJ题中不需要设置互斥信号量,这是因为缓冲区或数据的数量最多是l,在执行wait操作时,已起到了互斥的作用。
在进程同步中,单人单缓冲问题有很多,如“黑白棋子问题”,“苹果橘子问题”等都可以归入该类型中。
黑白棋子I、口J题:生产围棋的工人不小心把相等数量的黑子和白子混装在一个箱子里,要求用自动分拣系统把黑子和白子分开。该系统由两个并发执行的进程组成,功能如下:①进程A专门拣黑子,进程B专fJ拣白子;②每个进程每次只拣—个棋
万
方数据子,当一个进程在拣棋子时不允许另一进程去拣棋子;③当一个进程拣了一个棋子(黑子或白子)后,必须让另一个进程拣一个棋子(白子或黑子)。
苹果橘子|’口J题:桌上有一个空盘,每次只能放一个水果。爸爸可向盘内放苹果,妈妈可向盘内放橘子,儿子专等取苹果吃,女儿专等取橘子吃。要求:若盘中已有水果,放者必须等待;若盘中没有自己要吃的水果.吃者必须等待。2.2单人多缓冲问题
问题:类似单人单缓冲问题,但Buf中每次可以存放多个数据,假设为具有n个缓冲区的缓冲池。
可利用一个数组buffer来表示上述的具有n个(o,l,…,n—1)缓冲区的缓冲池。用输入指针in来指示下一个可投放产品的缓冲区,每当生产者进程生产并投放一个产品后,输入指针加l;用一个输出指针out来指示下一个可从中获取产品的缓冲区,每当消费者进程取走一个产品后,输出指针加l。in和OUt初值均为0。由于这里的缓冲池是组织成循环缓冲的,故应把输入指针加l表示成in:=(in+1)modn;输出指针加l表示成out:=(out+I)modn。当(in+1)modn=out时表示缓冲池满;而in=out则表示缓冲池空。在该题中同样应设置两个信号量:empty代表可用的缓冲区资源,初值为n;full代表可用的数据资源,初值为0。对该问题可描述如下:
Proceducer:(计算进程)
Consumer:(打印进程)computer
a
nextp;
wait(full);
wait(empty);nextc:=buffer(out);buffer(in):=nextp;out:=(out+1)modn:
in:=(in+1)modn:
signal(empty);
signal(full);
printtheitem;
2.3多人多缓冲问题(生产者一消费者问题)
问题:多个计算进程和多个打印进程共同使用同一缓冲区Buf。计算进程反复地把每次计算结果放入Buf中,而打印进程则把计算进程每次放入Buf中的数据通过打印机打印输出。Buf为具有n个缓冲区的缓冲池。对该问题稍加修改,计算进程称作“生产者”,打印进程称作“消费者”,计算的结果数据称作“产品”,这就是经典的生产者一消费者(producer--consumer)
问题。
在讲到这个问题时,不能简单地把算法写出,向学生一讲了事。那样会导致学生听完课之后仍然糊里糊涂,不知道怎样设置信号量。最好从上个问题着手,逐步分析,再得出算法。
在该问题中,尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之I’BJ必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。这个问题和上个问题类似:Buf都是n个缓冲区的缓冲池。同样应设置两个信号量:empty代表可用的缓冲区资源,初值为11;full代表可用的数据资源,初值为0。如果把上个问题的算法不加修改地拿到该问题中,大体上来说不会有太大问题,但仔细分析,却会有潜在的错误。比如:在起始条件下,empty值为n(假设n>1),第一个生产者生产了一件产品,先执行了wait(empty),empty减为n—l;接着执行buffer(in):=nextp,将生产的产品放在buffer(O)
计算机时代2009年第9期
中:这时,时』’日】片到了,系统调度其它进程。假没这次调度到的为另一生产者进程,第二个生产者生产了一件产品,先执行了wait(empty),empty减为n-2:接着执行buffer(in):=nextp,因为刚才in尚未增加,仍为0,所以第二个进程仍将生产的产品放在buffer(O)中。这样就导致了两个生产者进程将两件产品放在同一缓冲区中的错误。解决办法为:缓冲区为临界资源,下面的代码为访问临界资源的临界区:
buffer(in):=nextp;in:=(in+1)mod
n;
・
73
・
将算法加以修改,使生产者、消费者之间可以不互斥。为此,生
产者、消费者分别设置各自的互斥信号量,即生产者进程问使
用pmutex进行互斥,消费者进程间使用cmutex进行互斥,而生
产者进程与消费者进程问不互斥。pmutex
为1。问题可描述如下:
Proceducer:(生产者)
producer
an
cmutex的初值均
Consumer:(消费者)wait(full);wait(cmutex);nextc:=buffer(out);out:=(out+1)modsignal(cmutex);signal(empty);consumertheitem:
n:
itemnextp
wait(empty);wait(pmutex);buffer(in):=nextp;in:=(in+1)modsignal(pmutex);signal(full);
n:
对这段代码必须互斥访问。这时可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用。在进入临界区之前,使用wait(mutex)申请进入;退出临界区之后,使用signal(mutex)进行退出。对于消费者进程也存在同样的问题,因此,也需要利用互
斥信号量mutex实现进程对缓冲池的互斥使用。生产者一消费
者问题可描述如下:
Pm∞ducer:(生产者)
producer
an
3结束语
进程管理是“操作系统”课程中非常重要的一部分内容,也是老师难讲、学生难学的内容。进程同步的概念较抽象.学生掌握起来有较大难度。在教学中,可采用本文所述的教学方法。经过一步步的分析,从最初最简单的进程同步问题,到复杂的同步、互斥混合问题,使学生在分析中逐渐掌握进程同步问题的描述方法。实践证明:采用该方法,教学效果良好.学生很容易理解进程同步问题的描述方法,也很有兴趣学习该部分内容;在遇到类似问题时,很容易就能解决。
参考文献:
【1l张尧学,史美林.计算机操作重统教程(第3版)【MJ.清华土学出版社,
2006.
Consumer:(消费者)wait(full);wait(mutex);nextc:=buffer(out);out:=(out+1)modsignal(mutex);signal(empty);
consumertheitern;
n
itemnextp
wait(empty);wait(mutex);buffer(in):=nextp;in:=(in+1)modsignal(mutex);signal(full);
n:
2.4改良的生产者一消费者问题
在上个I’u】题中,生产者、消费者在进入各自临界区时,使用相同的互斥信号量mutex。这样,在保证多个生产者互斥的同时,也限制了生产者必须与消费者之问互斥。但从算法上分析可知,生产者的临界区和消费者的临界区虽然使用了相同的数组,但使用却的是不同的指针,二者并无互斥的必要。因此,可
【2l汤子瀛,哲凤屏,汤小丹.计算机撼作系统(修订版)IMJ.由安电子科杖
土学出版社,2001.
【3JAndrewS.Tanenbaum.ModemOperatingSystemsfM】Second
Edition.机械工业出版社,2003.毯丑
・M一一_一一1・¨●¨-●一¨・.._-~W¨"¨・一-_..-●_¨_…・●~-一~~~一¨…・
(上接第70i)
思维和创新能力,难以达到实践教学的目标。
将科研课题引入教学过程后,教师将科研课题的部分科研内容节选下来,作为辅助该课程的实验内容。而在“数据库大
的数据库课程体系的教学新模式。能否选择合适的科研案例进入教学,是该教学模式成败的关键所在,这就要求教师要有目的地挖掘与科研环节相融合的教学内容.充分利用每个教学环节,帮助学生在实践过程中体验理论对实践的指导作用。实践表明,该教学模式对于为大学生参与科研提供了机会和条件,成为培养大学生创新能力的平台。
参考文献:
【1】王珊,萨师煊.量据库l统概论(第四版)【M】.高等教育出版社,2006.12l钱雪患.“矗据库原理反应甩”镰程教学实践与探讨IJ】.置龙江教育
(高教研究与评估),2008.7—8:107—109
【3l王动武.科研与教学王动并避的理论探索与实践【J】.西南农业人学学
报(社会科学版),2007.5(2):169~172
f4l知盛涛.上学生科研能力训侏与专业健程教学并犰问题振究【J】.一t岛
土学师范学院学报.2007.24(2):113~115
【5】首丹.案例教学法在鼻据库囊统概论中的应用【JI.勘喀大学学报(-兰
科学版),2006.27(2):172-175
型试验周”中,教师可以将实际的科研课题依据学生的能力进
行拆分,以替代自拟题目。在实践过程中,教师要和学生不断交流,对于学生设计过程中存在的问题,要及时反馈。在整个实践过程结束后,教师要向学生展示成功科研项目,帮助学生寻找设计中存在的差距。在实践过程的考核机制中,要避免以
往只注重结果,不注重过程的考核办法,教师要跟踪学生的整
个设计过程,从需求分析、概念结构设计、逻辑结构设计、数据库物理设计、到数据库的实施和维护,每个阶段都要和学生交流,及时反馈,并对该阶段学生的成果,包括设计文档和程序质
量,进行考核,最后给出综合成绩,以促使学生重视整个设计过
程,在真正的科研课题中将课本中学到的知识学以致用。
4结束语
鉴于数据库课程体系的特殊性,提出了与科研课题相结合
黼
万方数据
进程同步的教学方法探讨
作者:作者单位:刊名:英文刊名:年,卷(期):
白秀玲, 宋晓莉, 邱涌, 张营, 张孝国, 杨春蕾, BAI Xiu-ling, SONG Xiao-li,QIU Yong, ZHANG Lei, ZHANG Xiao-guo, YANG Chun-lei河南科技大学电子信息工程学院,河南,洛阳,471003计算机时代COMPUTER ERA2009(9)
参考文献(3条)
1. Andrew S Tanenbaum Modern Operating Systems 20032. 汤子瀛;哲凤屏;汤小丹 计算机操作系统 20013. 张尧学;史美林 计算机操作系统教程 2006
本文链接:http://d.g.wanfangdata.com.cn/Periodical_jsjsd200909028.aspx