MIN_L=MEM(i).fenqu_changdu
MIN_P=i
EndIf
EndIf
EndIf
Nexti
IfMIN_P=0Then
CallMsgBox("内存不足!
",vbCritical)
Else
get_kong_FENQU=MIN_P
EndIf
ExitFunction
Case2'最坏适应,找最大可以满足的
MIN_L=10000
Fori=1To640
IfMEM(i).fenqu_zhuangtai=0Then
IfMEM(i).fenqu_changdu>=kjThen
IfMEM(i).fenqu_changdu>MAX_LThen
MAX_L=MEM(i).fenqu_changdu
MAX_P=i
EndIf
EndIf
EndIf
Nexti
IfMAX_P=0Then
CallMsgBox("内存不足!
",vbCritical)
Else
get_kong_FENQU=MAX_P
EndIf
ExitFunction
EndSelect
CallMsgBox("内存不足!
",vbCritical)
EndFunction
PrivateSubCMD_fenPEI_Click()
OnErrorGoToerr_handel
DimkjAsInteger
DimiAsInteger
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()
'刷新显示
DimiAsInteger
DimclAsLong
DimkjAsInteger
DimJCAsInteger
DimszAsInteger
Dimj,kAsInteger
Fori=1To640
IfMEM(i).fenqu_zhuangtai<>-1Then
IfMEM(i).fenqu_zhuangtai=1Then
If(iMod2)=1Then
cl=Label4.BackColor
Else
cl=Label5.BackColor
EndIf
Else
cl=Label6.BackColor
EndIf
JC=MEM(i).fenqu_huodongjincheng
sz=MEM(i).fenqu_shouzhi
kj=MEM(i).fenqu_changdu
j=sz+1
IfMEM(i).fenqu_zhuangtai=1Then
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)+"K"
FG.TextMatrix(j,4)=Str(MEM(i).fenqu_zhuangtai)+"已分配"
FG.TextMatrix(j,5)=Str(JC)+"号进程"
ElseIfMEM(i).fenqu_zhuangtai=0Then
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)+"K"
FG.TextMatrix(j,4)=Str(MEM(i).fenqu_zhuangtai)+"未分配"
FG.TextMatrix(j,5)=""
EndIf
Fork=1To5
FG.Col=k
Forj=sz+1Tosz+kj
FG.Row=j
FG.CellBackColor=cl
Ifj<>sz+1Then
FG.TextMatrix(FG.Row,FG.Col)=""
EndIf
Nextj
Nextk
EndIf
Next
EndSub
PrivateSubCMD_HUISHOU_Click()
DimiAsInteger
DimJCAsInteger
Dimp,nAsInteger
DimjAsInteger
'回收进程的内存和合并空闲分区
OnErrorGoToerr_handel
JC=CInt(Text_HUISHOU.Text)
Fori=1To640
IfMEM(i).fenqu_huodongjincheng=JCThen
'既无上邻又无下邻
MEM(i).fenqu_huodongjincheng=0
MEM(i).fenqu_zhuangtai=0
jincheng(JC)=0
Ifi=1Then
n=0
'找下一个相连的分区
Forj=1To640
IfMEM(i).fenqu_shouzhi+MEM(i).fenqu_changdu=MEM(j).fenqu_shouzhiThen
IfMEM(j).fenqu_zhuangtai=0Then
n=j
EndIf
ExitFor
EndIf
Nextj
Ifn<>0Then
'有下邻
MEM(i).fenqu_changdu=MEM(i).fenqu_changdu+MEM(n).fenqu_changdu
MEM(n).fenqu_zhuangtai=-1
EndIf
ElseIfi=640Then
p=0
'找上一个相连的分区
Forj=1To640
IfMEM(j).fenqu_shouzhi+MEM(j).fenqu_changdu=MEM(i).fenqu_shouzhiThen
IfMEM(j).fenqu_zhuangtai=0Then
p=j
EndIf
ExitFor
EndIf
Nextj
Ifp<>0Then
''有上邻
MEM(p).fenqu_changdu=MEM(p).fenqu_changdu+MEM(i).fenqu_changdu
MEM(i).fenqu_zhuangtai=-1
EndIf
Else
p=0
n=0
'找上一个相连的分区
Forj=1To640
IfMEM(j).fenqu_shouzhi+MEM(j).fenqu_changdu=MEM(i).fenqu_shouzhiThen
IfMEM(j).fenqu_zhuangtai=0Then
p=j
EndIf
ExitFor
EndIf
Nextj
'找下一个相连的分区
Forj=1To640
IfMEM(i).fenqu_shouzhi+MEM(i).fenqu_changdu=MEM(j).fenqu_shouzhiThen
IfMEM(j).fenqu_zhuangtai=0Then
n=j
EndIf
ExitFor
EndIf
Nextj
Ifp<>0Andn<>0Then
'既有上邻又有下邻
MEM(p).fenqu_changdu=MEM(p).fenqu_changdu+MEM(i).fenqu_changdu+MEM(n).fenqu_changdu
MEM(i).fenqu_zhuangtai=-1
MEM(n).fenqu_zhuangtai=-1
ElseIfp<>0Then
''只有上邻
MEM(p).fenqu_changdu=MEM(p).fenqu_changdu+MEM(i).fenqu_changdu
MEM(i).fenqu_zhuangtai=-1
ElseIfn<>0Then
'只有下邻
MEM(i).fenqu_changdu=MEM(i).fenqu_changdu+MEM(n).fenqu_changdu
MEM(n).fenqu_zhuangtai=-1
EndIf
EndIf
Callrefrensh_form
ExitSub
EndIf
Next
CallMsgBox("不存在这个进程!
",vbCritical)
ExitSub
err_handel:
CallMsgBox("不存在这个进程!
",vbCritical)
EndSub
PrivateSubForm_Load()
DimiAsInteger
FG.ColWidth
(1)=1800
FG.ColWidth
(2)=1800
FG.ColWidth(3)=1800
FG.ColWidth(4)=1800
FG.ColWidth(5)=1800
FG.TextMatrix(0,0)="内存地址"
FG.TextMatrix(0,1)="分区号"
FG.TextMatrix(0,2)="分区首址"
FG.TextMatrix(0,3)="分区长度"
FG.TextMatrix(0,4)="分配状态"
FG.TextMatrix(0,5)="活动进程"
Me.Top=0
Me.Left=0
Fori=0To639
FG.TextMatrix(i+1,0)=Str(i)+"K"
Next
Fori=1To640
MEM(i).fenqu_zhuangtai=-1
Next
MEM
(1).fenqu_shouzhi=0
MEM
(1).fenqu_changdu=640
MEM
(1).fenqu_zhuangtai=0
MEM
(1).fenqu_huodongjincheng=0
App.Title="存储管理器"
EndSub
Subdelay_TIME(ByValiAsInteger)
'延迟i秒
Dimt1,t2AsLong
t1=Timer()
t2=t1
DoWhile(t2-t1
DoEvents
t2=Timer()
Loop
EndSub
PrivateSubmen_home_Click()
Callnetnetopen_FILEpageIE("")
EndSub
PrivateSubmenu_about_Click()
CallMsgBox("作者:
顾熙杰"+vbCrLf+"考客主页:
",48)
EndSub
PrivateSubmenu_exit_Click()
UnloadMe
EndSub
PrivateSubmenu_help_help_Click()
Callnetnetopen_FILEpageIE(App.Path+"\help.htm")
EndSub
PublicSubnetnetopen_FILEpageIE(ByValaddressAsString)
DimiAsInteger
OnErrorGoToErrHandler
'外浏览器访问网页
i=ShellExecute(0&,vbNullString,address,vbNullString,vbNullString,vbNormalFocus)
'MsgBoxi
'返回10767正确
'返回2,文件不存在
Ifi=2Then
CallMsgBox("文件不存在",48)
EndIf
ExitSub
ErrHandler:
MsgBoxError$
EndSub
PrivateSubOption1_Click()
fenPEI_fangfa=0
EndSub
PrivateSubOption2_Click()
fenPEI_fangfa=1
EndSub
PrivateSubOption3_Click()
fenPEI_fangfa=2
EndSub
Functionfind_pri_block(ByValbAsInteger)AsInteger
'寻找上邻区
DimiAsInteger
Fori=b-1To1Step-1
IfMEM(i).fenqu_zhuangtai<>-1Then
find_pri_block=i
ExitFunction
EndIf
Next
EndFunction
Functionfind_next_block(ByValbAsInteger)AsInteger
'寻找下邻区
DimiAsInteger
Fori=b+1To640
IfMEM(i).fenqu_zhuangtai<>-1Then
find_next_block=i
ExitFunction
EndIf
Next
EndFunction
7)运行结果
用户区分配前
分配了5个进程
一个进程退出以后
Downloadby