操作系统可变分区存储管理模拟Word文档格式.docx
《操作系统可变分区存储管理模拟Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统可变分区存储管理模拟Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
根据不同的适应算法建立队列
编写分配算法
编写回收算法
3)数据结构
PrivateTypeMEM_tp
fenqu_shouzhiAsInteger'
分区首地址
fenqu_changduAsInteger'
分区长度
fenqu_zhuangtaiAsInteger'
分区状态-1表示不存在,0表示空闲分区,1表示已经分配的分区
fenqu_huodongjinchengAsInteger'
该分区正在活动的进程代号
EndType
4)程序流程图
面向对象程序设计由事件驱动,画流程图比较困难。
(1)分配新的分区
最先适应按地址找
最优适应,找最小可以满足的
最坏适应,找最大可以满足的
(2)分区回收
既无上邻又无下邻
既有上邻又有下邻
只有上邻
只有下邻
5)实验中需要改进的地方
由于没有使用链表,程序结构比较混乱,需要大大改进,提高可阅读性。
6)程序代码(VB)
OptionExplicit
PrivateDeclareFunctionShellExecuteLib"
Shell32.dll"
Alias"
ShellExecuteA"
(ByValhwndAsLong,ByVallpOperationAsString,ByVallpFileAsString,ByVallpParametersAsString,ByVallpDirectoryAsString,ByValnShowCmdAsLong)AsLong
'
表示内存分区的结构信息类型的变量类型
定义最多640个,总共640K内存数组
DimMEM(1To640)AsMEM_tp
表示可以使用的进程代号
Dimjincheng(1To640)AsInteger
0表示该进程号可以使用
.>
=1表示该进程号不可以使用
表示分配方法
DimfenPEI_fangfaAsInteger
0=最先分配
1=最优分配
2=最坏分配
Functionget_jincheng()AsInteger
取可以使用的进程号
DimiAsInteger
Fori=1To640
Ifjincheng(i)=0Then
jincheng(i)=1
get_jincheng=i
ExitFunction
EndIf
Next
get_jincheng=0
EndFunction
Functionget_FENQU()AsInteger
取可以使用的为了表示分区的存储空间,模拟c语言的指针
IfMEM(i).fenqu_zhuangtai=-1Then
get_FENQU=i
get_FENQU=0
Functionget_kong_FENQU(ByValkjAsInteger)AsInteger
DimMIN_LAsInteger
DimMAX_LAsInteger
DimMIN_P,MAX_PAsInteger
分配新的分区
SelectCasefenPEI_fangfa
Case0'
Fori=1To640
IfMEM(i).fenqu_zhuangtai=0Then
IfMEM(i).fenqu_changdu>
=kjThen
get_kong_FENQU=i
Nexti
Case1'
MIN_L=10000
IfMEM(i).fenqu_changdu<
MIN_LThen
MIN_L=MEM(i).fenqu_changdu
MIN_P=i
IfMIN_P=0Then
CallMsgBox("
内存不足!
"
vbCritical)
Else
get_kong_FENQU=MIN_P
Case2'
最坏适应,找最大可以满足的
MAX_LThen
MAX_L=MEM(i).fenqu_changdu
MAX_P=i
IfMAX_P=0Then
get_kong_FENQU=MAX_P
EndSelect
CallMsgBox("
PrivateSubCMD_fenPEI_Click()
OnErrorGoToerr_handel
DimkjAsInteger
DimJCAsInteger
DimjAsInteger
DimLAsInteger
DimFQAsInteger
新的进程进入
kj=CInt(Text_FENPEI.Text)
JC=get_jincheng()
i=get_kong_FENQU(kj)
MEM(i).fenqu_zhuangtai=1
L=MEM(i).fenqu_changdu-kj
MEM(i).fenqu_changdu=kj
MEM(i).fenqu_huodongjincheng=JC
IfL>
0Then
FQ=get_FENQU()
MEM(FQ).fenqu_zhuangtai=0
MEM(FQ).fenqu_changdu=L
MEM(FQ).fenqu_shouzhi=MEM(i).fenqu_shouzhi+kj
EndIf
Callrefrensh_form
Randomize(Timer)
i=Int(Rnd
(1)*6+1)
Text_FENPEI.Text=Str(i)
ExitSub
err_handel:
MsgBox"
请在文本框内输入正确的数字"
EndSub
Subrefrensh_form()
刷新显示
DimclAsLong
DimszAsInteger
Dimj,kAsInteger
IfMEM(i).fenqu_zhuangtai<
>
-1Then
IfMEM(i).fenqu_zhuangtai=1Then
If(iMod2)=1Then
cl=Label4.BackColor
cl=Label5.BackColor
cl=Label6.BackColor
JC=MEM(i).fenqu_huodongjincheng
sz=MEM(i).fenqu_shouzhi
kj=MEM(i).fenqu_changdu
j=sz+1
FG.TextMatrix(j,1)=Str(i)
FG.TextMatrix(j,2)=Str(MEM(i).fenqu_shouzhi)+"
K"
FG.TextMatrix(j,3)=Str(MEM(i).fenqu_changdu)+"
FG.TextMatrix(j,4)=Str(MEM(i).fenqu_zhuangtai)+"
已分配"
FG.TextMatrix(j,5)=Str(JC)+"
号进程"
ElseIfMEM(i).fenqu_zhuangtai=0Then
未分配"
FG.TextMatrix(j,5)="
Fork=1To5
FG.Col=k
Forj=sz+1Tosz+kj
FG.Row=j
FG.CellBackColor=cl
Ifj<
sz+1Then
FG.TextMatrix(FG.Row,FG.Col)="
Nextj
Nextk
PrivateSubCMD_HUISHOU_Click()