苹果桔子问题的实现.docx
《苹果桔子问题的实现.docx》由会员分享,可在线阅读,更多相关《苹果桔子问题的实现.docx(16页珍藏版)》请在冰点文库上搜索。
苹果桔子问题的实现
甘肃农业大学
课程设计报告
课程名称:
操作系统课程设计
设计题目:
进程同步P、V操作模拟—吃水果问题
学院:
信息科学与技术学院
专业:
计算机科学与技术
学生姓名:
周小珍学号:
2011161053
指导教师:
李艳梅
目录
1需求分析3
1.1吃水果问题的描述3
1.2问题的转换3
2功能设计3
2.1数据结构3
2.2模块说明4
2.3操作的流程图5
3开发平台及源程序的主要部分7
3.1开发平台7
3.2源程序8
4测试用例,运行结果与运行情况分析15
4.1测试用例15
4.2运行结果16
5自我评价与总结17
6参考文献17
第一章需求分析
1.1吃水果问题的描述
桌上有一个空盘子,只允许放一个水果。
爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。
规定当盘空时,一次只能放一个水果。
1.2问题的转换
这是进程同步问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。
通过编程实践时,实际是随机的调用人一个进程的操作,而这些进程的操作相当于程序中的函数调用。
而计算机在执行时每一个时刻只能执行一个操作,这就默认了互斥。
同步的模拟可以类似于函数调用时的前提关系即先决条件。
这样进程同步模拟就完全可以通过函数的调用来实现。
具体的每一个操作的对应的函数的关系:
爸爸向盘子中放一个苹果:
Father()
妈妈向盘子中放一个橘子:
Mother()
儿子从盘子取一个橘子:
Son()
女儿从盘子取一个苹果:
Daugther()
第二章功能设计
2.1数据结构
(1)用一个整型变量Plate_Size表示盘子的水果量,初始值为0,当放水果时Plate_Size加1,取水果时Plate_Size减1。
变量Plate_Size的最大值为1,当为1时表示盘子已经满,此时若进行放水果操作,放水果将处于等待状态;为0时表示盘子为空,此时若进行取水果操作,取水果操作将处于等待状态。
(2)整型变量orange和apple分别表示盘子中的橘子和苹果数目,初始都为0,orange表示儿子的私有信号量,apple表示女儿的私有信号量,盘子中水果总量为Plate_Size=apple+orange。
(3)用4个bool型的变量Father_lag,Mother_lag,Son_lag,Daughter_lag表示四个进程是否处于等待状态。
处于等待时,变量值为true。
(4)两个放水果进程进程同时处于等待状态时,若有取水果的操作将自动执行等待的放水果进程,执行按等待的先后顺序;取苹果或橘子进程同时候处于等待状态,若有放苹果或橘子的操作将自动执行等待的取进程,进行按等待的先后顺序。
(5)用一个随机的函数产生0—3的4个整数,分别对应四个进程的调用。
2.2模块说明
2.2.1主函数
用一个随机的函数产生0—3的4个整数,分别对应四个进程的调用,调用的次数可以自己输入,本程序共产生了10次随机的调用进程。
2.2.24个调度进程函数
爸爸向盘子中放一个苹果操作:
Father()
妈妈向盘子中放一个橘子操作:
Mother()
儿子从盘子取一个橘子操作:
Son()
女儿从盘子取一个苹果操作:
Daugther()
2.2.3Print函数
用于输出盘子中苹果和橘子的个数,水果总个数及有哪些进程处于等待状态。
2.3操作的流程图
2.3.1放水果操作
爸爸放苹果进程的操作流程图:
图2.1爸爸放苹果进程的操作流程图
妈妈放桔子进程的操作流程图:
图2.2妈妈放桔子进程的操作流程图
2.3.2取水果操作
儿子取橘子的操作流程图:
图2.3儿子取橘子的操作流程图
第3章开发平台及程序清单的主要部分
3.1开发平台
(1)使用系统:
Windows XP
(2)使用语言:
VB
(3)开发工具:
Visual Basic 6.0
3.2源程序
VERSION5.00
BeginVB.FormForm1
Caption="Form1"
ClientHeight=7710
ClientLeft=120
ClientTop=450
ClientWidth=12765
LinkTopic="Form1"
ScaleHeight=7710
ScaleWidth=12765
StartUpPosition=3'窗口缺省
BeginVB.TimerTimer2
Enabled=0'False
Interval=100
Left=10680
Top=1320
End
BeginVB.TimerTimer1
Enabled=0'False
Interval=100
Left=10560
Top=600
End
BeginVB.CommandButtonCommand1
Caption="开始"
BeginPropertyFont
Name="宋体"
Size=15
Charset=134
Weight=700
Underline=0'False
Italic=0'False
Strikethrough=0'False
EndProperty
Height=735
Left=480
MaskColor=&H000080FF&
TabIndex=0
Top=480
Width=1695
End
BeginVB.ImageImjuzi
Height=555
Left=9480
Picture="Form1.frx":
0000
Stretch=-1'True
ToolTipText="橘子"
Top=5640
Width=600
End
BeginVB.ImageImapple
Height=765
Left=5520
Picture="Form1.frx":
26D16
Stretch=-1'True
ToolTipText="苹果"
Top=2520
Width=600
End
BeginVB.ImageImnver
Height=1365
Left=3000
Picture="Form1.frx":
33FBE
ToolTipText="女儿"
Top=4200
Width=705
End
BeginVB.ImageImerzi
Height=1350
Left=6480
Picture="Form1.frx":
34DC6
ToolTipText="儿子"
Top=6360
Width=660
End
BeginVB.Imageimmather
Height=1455
Left=9840
Picture="Form1.frx":
35C21
ToolTipText="母亲"
Top=4920
Width=705
End
BeginVB.ImageImfather
Height=1350
Left=6120
Picture="Form1.frx":
36C57
ToolTipText="父亲"
Top=2160
Width=615
End
BeginVB.ImageImbg
Height=8280
Left=0
Picture="Form1.frx":
379ED
Stretch=-1'True
Top=0
Width=13650
End
End
AttributeVB_Name="Form1"
AttributeVB_GlobalNameSpace=False
AttributeVB_Creatable=False
AttributeVB_PredeclaredId=True
AttributeVB_Exposed=False
PrivateSubCommand1_Click()
Timer1.Enabled=True
Timer2.Enabled=True
EndSub
PrivateSubTimer1_Timer()
IfImapple.Left<=6300OrImapple.Top<=3400Then
Imapple.Left=Imapple.Left+25
Imapple.Top=Imapple.Top+50
EndIf
EndSub
PrivateSubTimer2_Timer()
IfImjuzi.Left>=6800OrImjuzi.Top>=4440Then
Imjuzi.Left=Imjuzi.Left-80
Imjuzi.Top=Imjuzi.Top-40
EndIf
EndSub
PublicSubp操作(sAsInteger,xAsString)
s=s-1
Imerzi=UBound(阻塞队列())
Ifs<0Then
阻塞队列(zi)=x
zi=zi+1
ReDimPreserve阻塞队列(zi)AsString
Forj=2ToUBound(就绪队列())'从就绪队列中删除
就绪队列(j-1)=就绪队列(j)
Next
ji=UBound(就绪队列())-1
ReDimPreserve就绪队列(ji)AsString
Else
ExitSub
EndIf
EndSub
PublicSubV操作(sAsInteger,xAsString)
s=s+1
Ifs<=0Then
x=阻塞队列
(1)
Forj=2ToUBound(阻塞队列())
阻塞队列(j-1)=阻塞队列(j)
Next
zi=zi-1
ji=ji+1
ReDimPreserve就绪队列(ji)AsString
就绪队列(ji)=x
Else
ExitSub
EndIf
EndSub
SubFather()
DimaAsString
a="Imfather"
p操作s1,a
p操作s,a
w=False
Do
Timer1_Timer
LoopUntilw=True
V操作s,a
V操作s3,a
EndSub
PrivateSub时间片_Timer()
DimaAsString
Ifji=0Then
End
Else
a=就绪队列
(1)
SelectCasea
Case"Imfather"
Imfather
Case"Immather"
immather
Case"Imerzi"
Imerzi
Case"Imnver"
Imnver
EndSelect
Forj=2ToUBound(就绪队列())
就绪队列(j-1)=就绪队列(j)
Next
ji=UBound(就绪队列())-1
EndIf
Ifji<=0Then时间片.Enable=False
EndSub
第四章测试用例,运行结果与运行情况分析
4.1运行结果
第一次运行结果为:
图4.1第一次运行结果
第二次运行结果:
图4.2第二次运行结果
第五章自我评价与总结
经过一个星期的上机实践学习,使我对操作系统这门课程有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是以前的VB语言基础没打好,一些基本常识性东西都不知道,再有操作时有很多很生疏的东西,虽然在学习课本知识的时感觉什么东西都很简单,但真正操作起来确实如此之难,语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习操作系统,还是其它的课程,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。
第6章参考文献
6.1参考文献
计算机操作系统教程(第三版)张尧学史美林张高编著
VisualBasic程序设计实验教程李广主编贾嫣杨梅王敏王联国副主编