操作系统可变分区存储管理模拟文档格式.docx
- 文档编号:17311065
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:20
- 大小:74.47KB
操作系统可变分区存储管理模拟文档格式.docx
《操作系统可变分区存储管理模拟文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统可变分区存储管理模拟文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
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()
Dimp,nAsInteger
回收进程的内存和合并空闲分区
JC=CInt(Text_HUISHOU.Text)
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
ExitFor
Ifn<
有下邻
MEM(i).fenqu_changdu=MEM(i).fenqu_changdu+MEM(n).fenqu_changdu
MEM(n).fenqu_zhuangtai=-1
ElseIfi=640Then
p=0
找上一个相连的分区
IfMEM(j).fenqu_shouzhi+MEM(j).fenqu_changdu=MEM(i).fenqu_shouzhiThen
p=j
Ifp<
有上邻
MEM(p).fenqu_changdu=MEM(p).fenqu_changdu+MEM(i).fenqu_changdu
MEM(i).fenqu_zhuangtai=-1
0Andn<
既有上邻又有下邻
MEM(p).fenqu_changdu=MEM(p).fenqu_changdu+MEM(i).fenqu_changdu+MEM(n).fenqu_changdu
ElseIfp<
只有上邻
ElseIfn<
只有下邻
Callrefrensh_form
ExitSub
不存在这个进程!
PrivateSubForm_Load()
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)+"
MEM
(1).fenqu_shouzhi=0
MEM
(1).fenqu_changdu=640
MEM
(1).fenqu_zhuangtai=0
MEM
(1).fenqu_huodongjincheng=0
App.Title="
存储管理器"
Subdelay_TIME(ByValiAsInteger)
延迟i秒
Dimt1,t2AsLong
t1=Timer()
t2=t1
DoWhile(t2-t1<
i)
DoEvents
t2=Timer()
Loop
PrivateSubmen_home_Click()
Callnetnetopen_FILEpageIE("
)
PrivateSubmenu_about_Click()
作者:
顾熙杰"
+vbCrLf+"
考客主页:
48)
PrivateSubmenu_exit_Click()
UnloadMe
PrivateSubmenu_help_help_Click()
Callnetnetopen_FILEpageIE(App.Path+"
\help.htm"
PublicSubnetnetopen_FILEpageIE(ByValaddressAsString)
OnErrorGoToErrHandler
外浏览器访问网页
i=ShellExecute(0&
vbNullString,address,vbNullString,vbNullString,vbNormalFocus)
MsgBoxi
返回10767正确
返回2,文件不存在
Ifi=2Then
文件不存在"
ErrHandler:
MsgBoxError$
PrivateSubOption1_Click()
fenPEI_fangfa=0
PrivateSubOption2_Click()
fenPEI_fangfa=1
PrivateSubOption3_Click()
fenPEI_fangfa=2
Functionfind_pri_block(ByValbAsInteger)AsInteger
寻找上邻区
Fori=b-1To1Step-1
find_pri_block=i
Functionfind_next_block(ByValbAsInteger)AsInteger
寻找下邻区
Fori=b+1To640
find_next_block=i
7)运行结果
用户区分配前
分配了5个进程
一个进程退出以后
Downloadby
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 可变 分区 存储 管理 模拟