ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:230.73KB ,
资源ID:10873014      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10873014.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(主存空间的分配与回收.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

主存空间的分配与回收.docx

1、主存空间的分配与回收操作系统实验报告实验三:主存空间的分配与回收一、 实验题目采用可变式分区管理,使用首次或最佳适应算法实现主存的分配与回收二、 实验内容主存是中央处理机能直接存取指令和数据的存储器。能否合理而有效地使用主存,在很大程度上将影响到整个计算机系统的性能。本实验采用可变式分区管理,使用首次或最佳适应算法实现主存空间的分配与回收。要求采用分区说明表进行。三、 实验目的通过本次实验,帮助学生理解在可变式分区管理方式下,如何实现主存空间的分配与回收。提示:(1) 可变式分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需要,并且分区个数是可以调整的。当要装入一个作业时,根据作

2、业需要的主存量,查看是否有足够的空闲空间,若有,则按需求量分割一部分给作业;若无,则作业等待。随着作业的装入、完成,主存空间被分割成许多大大小小的分区。有的分区被作业占用,有的分区空闲。例如,某时刻主存空间占用情况如图1所示。 0表1 空闲区说明表操作系统(10KB)10K作业1(10KB) 20K作业4(25KB) 45K空闲区1(20KB) 65K作业2(45KB)110K256K空闲区2(146KB)起始地址长度状态45K20KB未分配110K146KB未分配空表目空表目空表目图1 主存空间占用情况为了说明哪些分区是空闲的,可以用来装入新的作业,必须要有一张空闲区说明表,如表1所示。其中

3、,起始地址指出各空闲区的主存起始地址,长度指出空闲区大小。状态栏未分配指该栏目是记录的有效空闲区,空表目指没有登记信息。由于分区个数不定,所以空闲区说明表中应有足够的空表目项,否则造成溢出,无法登记。同样,再设一个已分配区表,记录作业或进城的主存占用情况。(2) 当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找到的空闲区可能大于作业需求量,这时应该将空闲区一分为二。一个分给作业,另一个仍作为空闲区留在空闲区表中。为了尽量减少由于分割造成的碎片,尽可能分配低地址部分的空闲区,将较大空闲区留在高地址端,以利于大作业的装入。为此在空闲区表中,按空闲区首地址从低到高

4、进行登记。为了便于快速查找,要不断地对表格进行紧缩,即让“空表目”项留在表的后部。其分配框图如图2所示。(3)当一个作业执行完时,作业所占用的分区应归还给系统。在归还时要考虑相邻空闲区合并的问题。作业的释放区与空闲区的邻接分一下4种情况考虑:A释放区下邻(低地址邻接)空闲区;B释放区上邻(高地址邻接)空闲区;C释放区上下都与空闲区邻接;D释放区与空闲区不邻接。首次适应算法回收框图如图3所示。若采用最佳适应算法,则空闲区说明表中的空闲区按其大小排序。有关最佳适应算法的分配和回收框图由学生自己给出。(4)请按首次(或最佳)适应算法设计主存分配和回收程序。以图1作为主存当前使用的基础,初始化空闲区和

5、已分配区说明表的值。学生自己设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配与回收。把空闲区说明表的变化情况以及各作业的申请、释放情况显示或打印出来。为了说明哪些分区是空闲的,必须要有一张空闲区说明表,格式如下表所示:起始地址长度状态20K20K180K50K1150K100K1300K30K0(空表目)600K100K1空表目四、代码及运行结果分析Main.javapackage Exp4; import java.util.ArrayList; import java.util.Scanner; public class Main static Scanner scanner

6、= new Scanner(System.in); static ArrayList blockList = new ArrayList(); static int application; static int adr; static int size; public static void main(String args) initalize(); public static void initalize() / 将整个存储区作为freeBlock初始化并显示信息 FreeBlock freeBlock = new FreeBlock(0, 32767); blockList.add(f

7、reeBlock); printAll(); print(Please input the way (1-best,2-first):); int way = scanner.nextInt(); if (way = 1) bestClass(); /最佳适应算法 else if (way = 2) firstClass(); /首次适应算法 else print(Error!n); public static void bestClass() int type = getRequest(); if (type = 1) assign(1, application); else if (typ

8、e = 2) accept(adr, size); else print(Error!n); bestClass(); public static void firstClass() int type = getRequest(); if (type = 1) assign(2, application); else if (type = 2) accept(adr, size); else print(Error!n); firstClass(); public static void printAll() print(adrtendtsizen); print(-n); for (Free

9、Block block : blockList) block.printME(); public static int getRequest() print(Assign or Accept (1-Assign,2-Accept):); int type = scanner.nextInt(); if (type = 1) print(input Application:); application = scanner.nextInt(); else if (type = 2) print(input adr and size:); adr = scanner.nextInt(); size

10、= scanner.nextInt(); else print(Error!n); return type; public static boolean assign(int p_way, int p_application) / 判断是否有空闲区 if (blockList.isEmpty() print(没有任何空闲区域可供分配!n); return false; / 按各自的原则查找空闲区 if (p_way = 1) / best int minSize = 32767; int minIndex = -1; for (FreeBlock block : blockList) if (

11、block.getSize() = p_application) minSize = block.getSize(); minIndex = blockList.indexOf(block); if (minIndex = -1) print(没有符合要求的空闲区域!n); return false; else FreeBlock tempBlock1 = blockList.get(minIndex); if (tempBlock1.getSize() = p_application) blockList.remove(tempBlock1); printAll(); return true

12、; FreeBlock tempBlock2 = new FreeBlock(tempBlock1.getAdr(), tempBlock1.getSize() - p_application); blockList.set(minIndex, tempBlock2); printAll(); return true; else if (p_way = 2) / first int minAdr = 32766; int minIndex = -1; for (FreeBlock block : blockList) if (block.getAdr() = p_application) mi

13、nAdr = block.getSize(); minIndex = blockList.indexOf(block); if (minIndex = -1) print(没有符合要求的空闲区域!n); return false; else FreeBlock tempBlock1 = blockList.get(minIndex); if (tempBlock1.getSize() = p_application) blockList.remove(tempBlock1); printAll(); return true; FreeBlock tempBlock2 = new FreeBlo

14、ck(tempBlock1.getAdr(), tempBlock1.getSize() - p_application); blockList.set(minIndex, tempBlock2); printAll(); return true; else print(Error!n); return false; public static boolean accept(int p_adr, int p_size) int p_end = adr + size - 1; / 检查:首地址小于最小地址(0) if (p_adr 32766) print(错误:回收空间大于最大空间(32766

15、)!n); return false; / 检查:回收空间和空闲空间重叠 for (FreeBlock block : blockList) if (p_adr = block.getAdr() & p_adr = block.getAdr() & p_end 0) return adr + size - 1; else return 0; public int getAdr() return adr; public void setAdr(int adr) this.adr = adr; public int getSize() return size; public void setSize(int size) this.size = size; 最佳适应算法结果首次适应算法结果五、心得体会经过这次实验,对可变式分区管理方式下,如何实现主存空间的分配与回收,有了很深的了解,使用了两种不同的算法,来实现对主存空间的控制,两种算法使用的数据结构相同,只是在分配的时候有差异。同时在回收内存的时候,要尤其注意回收空间与空闲空间的位置对应关系。Welcome ToDownload !欢迎您的下载,资料仅供参考!

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

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