操作系统可变分区存储管理模拟.docx

上传人:b****0 文档编号:283840 上传时间:2022-10-08 格式:DOCX 页数:20 大小:74.47KB
下载 相关 举报
操作系统可变分区存储管理模拟.docx_第1页
第1页 / 共20页
操作系统可变分区存储管理模拟.docx_第2页
第2页 / 共20页
操作系统可变分区存储管理模拟.docx_第3页
第3页 / 共20页
操作系统可变分区存储管理模拟.docx_第4页
第4页 / 共20页
操作系统可变分区存储管理模拟.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

操作系统可变分区存储管理模拟.docx

《操作系统可变分区存储管理模拟.docx》由会员分享,可在线阅读,更多相关《操作系统可变分区存储管理模拟.docx(20页珍藏版)》请在冰豆网上搜索。

操作系统可变分区存储管理模拟.docx

操作系统可变分区存储管理模拟

操作系统实验(三)可变分区存储管理模拟实验

作者:

顾熙杰

准考证号:

022*********

报到号:

177

实验地点:

浙工大计算机中心

1)实验目的

理解操作系统中可变分区管理的算法,

掌握分配和回收算法

掌握空闲分区的合并方法

掌握不同的适应算法

2)实验内容

建立数据结构

建立空闲分区队列

根据不同的适应算法建立队列

编写分配算法

编写回收算法

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

'表示内存分区的结构信息类型的变量类型

PrivateTypeMEM_tp

fenqu_shouzhiAsInteger'分区首地址

fenqu_changduAsInteger'分区长度

fenqu_zhuangtaiAsInteger'分区状态-1表示不存在,0表示空闲分区,1表示已经分配的分区

fenqu_huodongjinchengAsInteger'该分区正在活动的进程代号

EndType

'定义最多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语言的指针

DimiAsInteger

Fori=1To640

IfMEM(i).fenqu_zhuangtai=-1Then

get_FENQU=i

ExitFunction

EndIf

Next

get_FENQU=0

EndFunction

Functionget_kong_FENQU(ByValkjAsInteger)AsInteger

DimiAsInteger

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

ExitFunction

EndIf

EndIf

Nexti

Case1'最优适应,找最小可以满足的

MIN_L=10000

Fori=1To640

IfMEM(i).fenqu_zhuangtai=0Then

IfMEM(i).fenqu_changdu>=kjThen

IfMEM(i).fenqu_changdu

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()

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

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1