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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统内存分配算法模拟实现.docx

1、操作系统内存分配算法模拟实现实验名称内存分配与回收算法实现同组人姓名实验性质基本操作 验证性 综合性 设计性实验日期2010-5-17实验成绩教师评价:实验预习口 实验操作口 实验结果口 实验报告口 其它口教师签名:一、实验目的及要求1) 掌握为实现多道程序并发执行,操作系统是如何通过作业调度选择作业进入内存2) 系统如何为进入内存的作业分配内存空间,实现多道作业冋时驻留内存,就绪进程队列中的多个进程是如何以分式方式共享 CPU作业运行完成离开系统时,系统如何进行内存回收,计算进程周转时间。3) 掌握各种调度算法,以及实现所需的各种数据结构。二、实验内容根据给定的动态分区分配算法流程图,用你熟

2、悉的计算机编程语言编写一程 序,该程序实现内存的合理分配后回收。三、主要设备及软件PC Windows2000操作系统、Linux操作系统四、实验流程、操作步骤或核心代码、算法片段2、算法模拟实现1相关数据结构定义空闲分区块类:class FreeBlock空闲分区链类:class FreeList内存分配回收算法类: class MemoryMa nager测试类(主类):class TestForMemManage2具体实现请允许我先列出核心部分,内存分配回收算法类的实现:package com.kaip in g.memoryma nage;/ 个人包import java.util.S

3、ca nner;public class MemoryMa nager FreeList flist; / 空闲分区类对象public MemoryMa nager()flist = new FreeList();flist.I nitFBlock();public void memAllocati on (i nt size, Stri ng n ew_job _n ame)/ 内存分酉己(首次适应算法)FreeBlock q=flist.head;FreeBlock p=flist.head. next;while(p != n ull)if(size = size)q = new Fre

4、eBlock(p.size - size);p.size = size;p.state = true;p. job_ name = new_job_n ame;q. n ext = p.n ext;p.n ext = q;break; /完成分配elsep = p.n ext; / 移动到足够分配的空闲块if(p = n ull)if(flist.flistsize = size)System.out.pri ntl n(” 目前尚无足够大的空闲块,系统将进行重定位操作.);relocation(); / 重定向memAllocation(size,newob_name); / 重新分配内存e

5、lseSystem.out.println(” 作业+new_job_name+内存尚未分配成功! ”);else /分配内存后可能存在大小为 0的空间,将其清除System.out.println(” 作业+new_job_name+内存分配成功! ”);p = flist.head .n ext;q = flist.head;while(p != n ull)if(p.size = 0)flist.deleteFBlock(p);p = p.n ext;private void memRecovery(FreeBlock target) / 内存回收FreeBlock p = flist.

6、head .n ext;while(p != null)/回收区与插入点的前一个空闲分区相邻接if(p.next = target & p.state = false)p.size += target.size;p.n ext = target. next;/回收区同时与插入点的前后两个空闲分区相邻接if(!p. next.state)p.size += p.n ext.size;p.next = p.n ext .n ext;break;if(p = target)/回收区与插入点的后一空闲分区相邻接if(!p. next.state)target.size += p.n ext.size;

7、 target .next = p.n ext .n ext;break; /若两不邻接,则直接跳出p = p.n ext;private void relocation() /FreeBlock fron t_r=flist.head;FreeBlock r=front_r.n ext;FreeBlock beh in d_r=r. next;空闲资源重定向,回收空闲空间/当前重定向空闲块while(r != n ull)/将r定位到第一块空闲分区块if(r.state = false)break;r = r.n ext;behi nd_r = r.n ext;front=front_r.n

8、 ext; / 记录第一块空闲分区的上一块while(beh ind_r != nu ll)if(beh in d_r.state)front_r.n ext = beh in d_r;r.n ext = beh in d_r. next;beh in d_r. next = r;front_r = beh ind_r;elser.size += beh in d_r.size;r.n ext = beh in d_r. next;behi nd_r = r.n ext;System.out.pri ntln(” 重定向成功,继续为作业分配内存 .);public void addJob()

9、/ 添加作业intnewSize; /新作业所需内存大小String nJobName = new String();Scanner sca nner=new Sca nn er(System.i n);System.out.pri nt( 请输入新任务的名称:);nJ obName = sca nner.n extL in e();System.out.pri nt( 请输入新任务所需内存大小: );n ewSize = sca nner.n ext In t();memAllocati on(n ewSize ,nJ obName);public void delJob() / 销毁作业S

10、tring cur_job_ name = new Strin g();boolea n flag = false;/指示作业是否删除成功FreeBlock q=flist.head. next;Scanner sca nner=new Sca nn er(System.i n);System.out.pri nt( 请输入需要回收的作业名称 :”);cur_j ob_n ame = sca nner.n extL in e(); while(q != n ull)if(q.job_ name = cur_job_ name) q.state = false;q.job_ name =; me

11、mRecovery(q); / 回收内存flag = true; break;elseq = q.n ext;if(flag)System.out.pri ntl n(elseSystem.out.pri ntl n(public void prin tJob In fo() /FreeBlock p = flist.head .n ext;/找到要删除的作业的下一个结点删除作业成功!);删除作业未成功!);打印作业信息int pro_num = 1; /用户程序号int mem num = 1; /内存分区块号System.out.println(” 用户程序信息 );while(p !=

12、n ull) if(p.state)System.out.pri ntln(” 用 户 程 序+pro_ num+(+p.job_ name+)+t 占用第+mem_num+分区块”);pro_ nu m+;mem_ nu m+;p = p.n ext;public void prin tFreeSubareal nfo() / 打印空闲分区信息FreeBlock p = flist.head .n ext;int leav_size = 0; II剩余内存大小int mem_num = 1; II内存分区块号System.out.println(” 空闲分区信息 );System.out.p

13、rintln(t 分区块号 t 大小);while(p != n ull)if(!p.state)System.out.pri ntl n(t+mem _nu m+t+p.size);leav_size += p.size;mem_ nu m+;p = p.n ext;System.out.pri ntl n(” 剩余内存总打小为+leav_size);其它类的实现空闲分区块类:package com.kaip in g.memoryma nage;public class FreeBlock int size; II 空闲块大小boolean state; IIfalse 表示空闲,true

14、表示已经装入作业String job_name; /装入的作业名称FreeBlock next; /下一空闲块的自引用public FreeBlock(i nt s)size = s;state = false;job_ name = new Strin g();n ext = n ull;空闲分区链类:package com.kaip in g.memoryma nage;import java.util.Sca nner;public class FreeList FreeBlock fblock;FreeBlock head;int fblockNum; / 空闲块数int sumMemCount; / 内存总大小int flistsize; /空闲分区总和public FreeList

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

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