




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验(三)可变分区存储管理模拟实验作者 :顾熙杰准考证号:022502100574报到号 :177实验地点:浙工大计算机中心1) 实验目的理解操作系统中可变分区管理的算法, 掌握分配和回收算法 掌握空闲分区的合并方法 掌握不同的适应算法2) 实验内容建立数据结构建立空闲分区队列根据不同的适应算法建立队列编写分配算法编写回收算法3) 数据结构Private Type MEM_tp fenqu_shouzhi As Integer 分区首地址 fenqu_changdu As Integer 分区长度 fenqu_zhuangtai As Integer 分区状态 -1表示不存在,0表示空闲分区,1表示已经分配的分区 fenqu_huodongjincheng As Integer 该分区正在活动的进程代号End Type4) 程序流程图面向对象程序设计由事件驱动,画流程图比较困难。(1)分配新的分区最先适应 按地址找最优适应,找最小可以满足的 最坏适应,找最大可以满足的 (2)分区回收 既无上邻又无下邻 既有上邻又有下邻 只有上邻 只有下邻 5) 实验中需要改进的地方由于没有使用链表,程序结构比较混乱,需要大大改进,提高可阅读性。 6) 程序代码(VB)Option ExplicitPrivate Declare Function ShellExecute Lib Shell32.dll Alias ShellExecuteA (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long表示内存分区的结构信息类型的变量类型Private Type MEM_tp fenqu_shouzhi As Integer 分区首地址 fenqu_changdu As Integer 分区长度 fenqu_zhuangtai As Integer 分区状态 -1表示不存在,0表示空闲分区,1表示已经分配的分区 fenqu_huodongjincheng As Integer 该分区正在活动的进程代号End Type定义最多640个,总共640K内存数组Dim MEM(1 To 640) As MEM_tp表示可以使用的进程代号Dim jincheng(1 To 640) As Integer0表示该进程号可以使用.=1表示该进程号不可以使用表示分配方法Dim fenPEI_fangfa As Integer0=最先分配1=最优分配2=最坏分配Function get_jincheng() As Integer取可以使用的进程号Dim i As IntegerFor i = 1 To 640 If jincheng(i) = 0 Then jincheng(i) = 1 get_jincheng = i Exit Function End IfNextget_jincheng = 0End FunctionFunction get_FENQU() As Integer取可以使用的为了表示分区的存储空间,模拟c语言的指针Dim i As IntegerFor i = 1 To 640 If MEM(i).fenqu_zhuangtai = -1 Then get_FENQU = i Exit Function End IfNextget_FENQU = 0End FunctionFunction get_kong_FENQU(ByVal kj As Integer) As IntegerDim i As IntegerDim MIN_L As IntegerDim MAX_L As IntegerDim MIN_P, MAX_P As Integer分配新的分区Select Case fenPEI_fangfaCase 0 最先适应 按地址找 For i = 1 To 640 If MEM(i).fenqu_zhuangtai = 0 Then If MEM(i).fenqu_changdu = kj Then get_kong_FENQU = i Exit Function End If End If Next iCase 1 最优适应,找最小可以满足的 MIN_L = 10000 For i = 1 To 640 If MEM(i).fenqu_zhuangtai = 0 Then If MEM(i).fenqu_changdu = kj Then If MEM(i).fenqu_changdu = kj Then If MEM(i).fenqu_changdu MAX_L Then MAX_L = MEM(i).fenqu_changdu MAX_P = i End If End If End If Next i If MAX_P = 0 Then Call MsgBox(内存不足!, vbCritical) Else get_kong_FENQU = MAX_P End If Exit FunctionEnd SelectCall MsgBox(内存不足!, vbCritical)End FunctionPrivate Sub CMD_fenPEI_Click()On Error GoTo err_handelDim kj As IntegerDim i As IntegerDim JC As IntegerDim j As IntegerDim L As IntegerDim FQ As Integer新的进程进入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 = JCIf L 0 Then FQ = get_FENQU() MEM(FQ).fenqu_zhuangtai = 0 MEM(FQ).fenqu_changdu = L MEM(FQ).fenqu_shouzhi = MEM(i).fenqu_shouzhi + kjEnd IfCall refrensh_formRandomize (Timer)i = Int(Rnd(1) * 6 + 1)Text_FENPEI.Text = Str(i)Exit Suberr_handel:MsgBox 请在文本框内输入正确的数字End SubSub refrensh_form()刷新显示Dim i As IntegerDim cl As LongDim kj As IntegerDim JC As IntegerDim sz As IntegerDim j, k As IntegerFor i = 1 To 640 If MEM(i).fenqu_zhuangtai -1 Then If MEM(i).fenqu_zhuangtai = 1 Then If (i Mod 2) = 1 Then cl = Label4.BackColor Else cl = Label5.BackColor End If Else cl = Label6.BackColor End If JC = MEM(i).fenqu_huodongjincheng sz = MEM(i).fenqu_shouzhi kj = MEM(i).fenqu_changdu j = sz + 1 If MEM(i).fenqu_zhuangtai = 1 Then 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) + 号进程 ElseIf MEM(i).fenqu_zhuangtai = 0 Then 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) = End If For k = 1 To 5 FG.Col = k For j = sz + 1 To sz + kj FG.Row = j FG.CellBackColor = cl If j sz + 1 Then FG.TextMatrix(FG.Row, FG.Col) = End If Next j Next k End IfNextEnd SubPrivate Sub CMD_HUISHOU_Click()Dim i As IntegerDim JC As IntegerDim p, n As IntegerDim j As Integer回收进程的内存和合并空闲分区On Error GoTo err_handelJC = CInt(Text_HUISHOU.Text)For i = 1 To 640 If MEM(i).fenqu_huodongjincheng = JC Then 既无上邻又无下邻 MEM(i).fenqu_huodongjincheng = 0 MEM(i).fenqu_zhuangtai = 0 jincheng(JC) = 0 If i = 1 Then n = 0 找下一个相连的分区 For j = 1 To 640 If MEM(i).fenqu_shouzhi + MEM(i).fenqu_changdu = MEM(j).fenqu_shouzhi Then If MEM(j).fenqu_zhuangtai = 0 Then n = j End If Exit For End If Next j If n 0 Then 有下邻 MEM(i).fenqu_changdu = MEM(i).fenqu_changdu + MEM(n).fenqu_changdu MEM(n).fenqu_zhuangtai = -1 End If ElseIf i = 640 Then p = 0 找上一个相连的分区 For j = 1 To 640 If MEM(j).fenqu_shouzhi + MEM(j).fenqu_changdu = MEM(i).fenqu_shouzhi Then If MEM(j).fenqu_zhuangtai = 0 Then p = j End If Exit For End If Next j If p 0 Then 有上邻 MEM(p).fenqu_changdu = MEM(p).fenqu_changdu + MEM(i).fenqu_changdu MEM(i).fenqu_zhuangtai = -1 End If Else p = 0 n = 0 找上一个相连的分区 For j = 1 To 640 If MEM(j).fenqu_shouzhi + MEM(j).fenqu_changdu = MEM(i).fenqu_shouzhi Then If MEM(j).fenqu_zhuangtai = 0 Then p = j End If Exit For End If Next j 找下一个相连的分区 For j = 1 To 640 If MEM(i).fenqu_shouzhi + MEM(i).fenqu_changdu = MEM(j).fenqu_shouzhi Then If MEM(j).fenqu_zhuangtai = 0 Then n = j End If Exit For End If Next j If p 0 And n 0 Then 既有上邻又有下邻 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 ElseIf p 0 Then 只有上邻 MEM(p).fenqu_changdu = MEM(p).fenqu_changdu + MEM(i).fenqu_changdu MEM(i).fenqu_zhuangtai = -1 ElseIf n 0 Then 只有下邻 MEM(i).fenqu_changdu = MEM(i).fenqu_changdu + MEM(n).fenqu_changdu MEM(n).fenqu_zhuangtai = -1 End If End If Call refrensh_form Exit Sub End If NextCall MsgBox(不存在这个进程!, vbCritical)Exit Suberr_handel:Call MsgBox(不存在这个进程!, vbCritical)End SubPrivate Sub Form_Load()Dim i As IntegerFG.ColWidth(1) = 1800FG.ColWidth(2) = 1800FG.ColWidth(3) = 1800FG.ColWidth(4) = 1800FG.ColWidth(5) = 1800FG.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 = 0Me.Left = 0For i = 0 To 639 FG.TextMatrix(i + 1, 0) = Str(i) + KNextFor i = 1 To 640 MEM(i).fenqu_zhuangtai = -1NextMEM(1).fenqu_shouzhi = 0MEM(1).fenqu_changdu = 640MEM(1).fenqu_zhuangtai = 0MEM(1).fenqu_huodongjincheng = 0App.Title = 存储管理器End SubSub delay_TIME(ByVal i As Integer) 延迟i秒 Dim t1, t2 As Long t1 = Timer() t2 = t1 Do While (t2 - t1 i) DoEvents t2 = Timer() Loop End SubPrivate Sub men_home_Click()Call netnetopen_FILEpageIE()End SubPrivate Sub menu_about_Click()Call MsgBox(作者:顾熙杰 + vbCrLf + 考客主页:, 48)End SubPrivate Sub menu_exit_Click()Unload MeEnd SubPrivate Sub menu_help_help_Click()Call netnetopen_FILEpageIE(App.Path + help.htm)End SubPublic Sub netnetopen_FILEpageIE(ByVal address As String)Dim i As IntegerOn Error GoTo ErrHandler外浏览器访问网页i = ShellExecu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 糖尿病脾胃病护理诊断和综合管理措施
- 冬雨季建筑施工技术措施
- 多样化课后活动支持一年级语文能力的措施
- 养老院第三季度药品安全管理检查及整改措施
- 桥梁施工中的绿色技术重点难点及应对措施
- 能源项目施工安全防护设施完善计划
- 机场疫情防控各小组职责
- 单指标模型在证券投资风险预测中的效能与实践探究
- 消费者行为分析报告-洞察及研究
- GB/T 35206-2025页岩和泥岩岩石薄片鉴定
- 国家开放大学《统计与数据分析基础》形考任务1-5答案
- 车务段培训课件
- 少儿创意美术:奇幻蘑菇绘画教程
- 《古代水利工程奇迹:都江堰教学课件》课件
- 投资占股协议合同
- 2025年铁路客运值班员(高级)考前必练题库500题(含真题、重点题)
- 长周期材料在高压环境下的适应性研究
- 肿瘤患者VTE预防治疗
- 被迫解除劳动合同通知书范本
- 米粉生产工艺培训
- 《poct院内培训》课件
评论
0/150
提交评论