苹果桔子问题的实现.docx

上传人:b****2 文档编号:2683922 上传时间:2023-05-04 格式:DOCX 页数:16 大小:123.99KB
下载 相关 举报
苹果桔子问题的实现.docx_第1页
第1页 / 共16页
苹果桔子问题的实现.docx_第2页
第2页 / 共16页
苹果桔子问题的实现.docx_第3页
第3页 / 共16页
苹果桔子问题的实现.docx_第4页
第4页 / 共16页
苹果桔子问题的实现.docx_第5页
第5页 / 共16页
苹果桔子问题的实现.docx_第6页
第6页 / 共16页
苹果桔子问题的实现.docx_第7页
第7页 / 共16页
苹果桔子问题的实现.docx_第8页
第8页 / 共16页
苹果桔子问题的实现.docx_第9页
第9页 / 共16页
苹果桔子问题的实现.docx_第10页
第10页 / 共16页
苹果桔子问题的实现.docx_第11页
第11页 / 共16页
苹果桔子问题的实现.docx_第12页
第12页 / 共16页
苹果桔子问题的实现.docx_第13页
第13页 / 共16页
苹果桔子问题的实现.docx_第14页
第14页 / 共16页
苹果桔子问题的实现.docx_第15页
第15页 / 共16页
苹果桔子问题的实现.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

苹果桔子问题的实现.docx

《苹果桔子问题的实现.docx》由会员分享,可在线阅读,更多相关《苹果桔子问题的实现.docx(16页珍藏版)》请在冰点文库上搜索。

苹果桔子问题的实现.docx

苹果桔子问题的实现

甘肃农业大学

课程设计报告

课程名称:

操作系统课程设计

 

设计题目:

进程同步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程序设计实验教程李广主编贾嫣杨梅王敏王联国副主编

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2