欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    计算机操作系统原理课程设计.doc

    • 资源ID:89806271       资源大小:196.50KB        全文页数:15页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机操作系统原理课程设计.doc

    优质文本上海电力学院课程设计报告课程名称: 操作系统原理 题目名称:采用可变分区存储管理,模拟主存空间的分配和回收 姓 名: xxx 学 号: xxx 班 级: 2013054 同组姓名: xxx 课程设计时间: 2015.7.62015.7.10 评 语: 成 绩: 课程设计题目一、 设计内容及要求可变分区存储管理模拟 设计内容: 编写程序模拟实现可变分区存储管理。具体要求:编写程序模拟实现可变分区存储管理,实现存储管理的根本功能,包括内存的分配、内存的回收、地址变换等。输入:1、输入新进程名称及使用内存的大小可创立多个进程;2、撤销某个指定的进程;3、某个进程的逻辑地址;输出:显示每次创立进程或者撤销进程后内存使用的状况,包括每一个进程占据的内存的位置和大小; 计算并输出给定逻辑地址对应的物理地址。必须分别使用以下分配算法完成模拟:1、首次适应算法;2、最正确适应算法;3、最差适应算法;小组分工:程序设计讨论: 程序主体设计: 程序调试及修改: 实验报告设计: 总结: 要求注明小组分工情况二、 详细设计1) 原理概述 对于可变分区存储管理的内存分配与回收,主要为设计以下几个局部:         1、设计动态输入空闲分区表的程序         2、设计内存分配的程序         3、设计内存回收的程序首次适应算法:FF算法要求空闲分区表或空闲分区链以地址递增的次序链接。在分配内时,从链首开始查找,直至找到一个大小能满足要求分区为止;然后再按照作业大小,从该分区中划一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。如从链首直至链尾都不能找到一个能满足要求的分区,那么此次分配失败,返回最正确适应算法: BF算法是指每次为作业分配内存,总是把满足要求、又是最小的空闲分区分配给作业,防止“大材小用。为了加速寻找,该算法要求所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样,第一次找到能满足要求的空闲区,必然是最正确的。最差适应算法: WF算法要扫描整个空闲分区表或链表,总是挑一个最大的空闲区分割给作业使用,其优点是可使剩下的空闲区不至于太小,产生碎片的几率最小,对中、小作业有利,同时最坏适应分配算法查找出效率很高。该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。2) 主要数据结构1、 空闲分区表的定义 public class fenqu public int fenquno,fenqusize,fenqustart;public String procname;public static int cofenqusize=0;/创立起始分区基址public fenqu(int fenquno,int fenqusize)this.fenquno=fenquno;this.fenqusize=fenqusize;this.fenqustart=cofenqusize;cofenqusize+=fenqusize;procname=null;public fenqu(int fenquno,int fenqusize,int fenqustart)this.fenquno=fenquno;this.fenqusize=fenqusize;this.fenqustart=fenqustart;procname=null;已分配分区表的定义public static void createfenqu()int intRe=new int5;/fenquno的随机数int intREE=new int5;/fenqusize的随机数产生;int intRd;/存放随机数int intRDD;int count=0,count1=0;/产生的随机数的个数,count是fenquno,count1是fenqusizeint flag=0;/是否产生过随机数Random rdm=new Random();while (count<intRe.length)intRd=Math.abs(rdm.nextInt()%5;for(int i=0;i<count;i+)if(intRei=intRd)flag=1;break;elseflag=0;if(flag=0)intRecount=intRd;count+;while(count1<intREE.length)intRDD=(int)(Math.random()*(60+1-30)+30;for(int i=0;i<count1;i+)if(intREEi=intRDD)flag=1;break;elseflag=0;if(flag=0)intREEcount1=intRDD;count1+;for(int i=0;i<5;i+)alist.add(new fenqu(intRei,intREEi);ll.add(new doubleNode(null,null,intRei,intREEi,0);System.out.println("区号"+" 内存"+" 地址"+" 原分区"+" 原大小"+" 分配");for(int i=0;i<alist.size();i+)System.out.println(alist.get(i).fenquno+" "+alist.get(i).fenqusize+" "+alist.get(i).fenqustart+" "+ll.get(i).fenquno+" "+ll.get(i).fenqusize+" "+ll.get(i).re);内存分配public static void fenpeineicun(process p)boolean re=true;for(int k=0;k<alist.size();k+)if(p.JCname=alist.get(k).procname)re=false;if(re)int i=0,j;ll parefenqusize(p.JCsize, maxfenquno);if(alist.size()<ll.theSize)for(i=0;i<alist.size();i+)for(j=0;j<ll.theSize;j+)if(alist.get(i).fenquno=ll.get(j).fenquno&&alist.get(i).fenqusize!=ll.get(j).fenqusize)alist.get(i).fenqusize=ll.get(j).fenqusize;fenqu fe=new fenqu(ll.get(i+1).fenquno,ll.get(i+1).fenqusize,alist.get(i).fenqustart+alist.get(i).fenqusize);alist.add(fe);alist.get(i).procname=p.JCname;maxfenquno+;elsefor(i=0;i<alist.size();i+)for(j=0;j<ll.theSize;j+)if(alist.get(i).fenquno=ll.get(j).fenquno&&alist.get(i).fenqusize=p.JCsize)alist.get(i).procname=p.JCname;elseSystem.out.println("有同名进程,不能分配内存");public static void FF(process p)sortaddress();fenpeineicun(p);public static void BF(process p)sortmintomax();fenpeineicun(p);public static void WF(process p)sortmaxtomin();fenpeineicun(p);1、 内存回收public static void dropprocess(String name)boolean re=true;for(int i=0;i<ll.theSize;i+)if(ll.get(i).re=1)for(int j=0;j<alist.size();j+)if(ll.get(i).fenquno=alist.get(j).fenquno&&alist.get(j).procname.equals(name)ll.get(i).re=0;alist.get(i).procname=null;re=false;System.out.println("进程撤销成功");if(re)System.out.println("不存在该进程");3) 算法流程图内存分配:public static void fenpeineicun(process p)boolean re=true;for(int k=0;k<alist.size();k+)if(p.JCname=alist.get(k).procname)re=false;if(re)int i=0,j;ll parefenqusize(p.JCsize, maxfenquno);if(alist.size()<ll.theSize)for(i=0;i<alist.size();i+)for(j=0;j<ll.theSize;j+)if(alist.get(i).fenquno=ll.get(j).fenquno&&alist.get(i).fenqusize!=ll.get(j).fenqusize)alist.get(i).fenqusize=ll.get(j).fenqusize;fenqu fe=new fenqu(ll.get(i+1).fenquno,ll.get(i+1).fenqusize,alist.get(i).fenqustart+alist.get(i).fenqusize);alist.add(fe);alist.get(i).procname=p.JCname;maxfenquno+;elsefor(i=0;i<alist.size();i+)for(j=0;j<ll.theSize;j+)if(alist.get(i).fenquno=ll.get(j).fenquno&&alist.get(i).fenqusize=p.JCsize)alist.get(i).procname=p.JCname;elseSystem.out.println("有同名进程,不能分配内存");1、 首次适应算法开始 申请主存区j :=0j :=j+1查看空闲区表是否有空闲区是否为未分配状态此区已满长度>所需要的吗? < = >否长度=长度-XK起址=起址+XK是否为最后的分区块输出分配情况 不能输入作业 是结束实现算法主要代码:public static void sortaddress()fenqu d;ll.removeAll();for(int i=0;i<alist.size();i+)for(int j=i+1;j<alist.size();j+)if(alist.get(i).fenqustart>alist.get(j).fenqustart)d=alist.get(i);alist.set(i,alist.get(j);alist.set(j,d);for(int i=0;i<alist.size();i+)if(alist.get(i).procname!=null)ll.add(new doubleNode(null,null,alist.get(i).fenquno,alist.get(i).fenqusize,1);elsell.add(new doubleNode(null,null,alist.get(i).fenquno,alist.get(i).fenqusize,0);2、 最正确适应算法开始 申请主存区j :=0j :=j+1查看空闲区表是否有空闲区 否将作业与排好的分区容量比照 是最正确的进行输入长度=长度-XK起址=起址+XK 输出分配情况 结束public static void sortmintomax()fenqu d;ll.removeAll();for(int i=0;i<alist.size();i+)for(int j=i+1;j<alist.size();j+)if(alist.get(i).fenqusize>alist.get(j).fenqusize)d=alist.get(i);alist.set(i,alist.get(j);alist.set(j,d);for(int i=0;i<alist.size();i+)if(alist.get(i).procname!=null)ll.add(new doubleNode(null,null,alist.get(i).fenquno,alist.get(i).fenqusize,1);elsell.add(new doubleNode(null,null,alist.get(i).fenquno,alist.get(i).fenqusize,0);3、最差适应算法申请主存区j :=0j :=j+1查看空闲区表是否有空闲区 否将作业与排好的分区容量比照 是空闲区最大的进行输入长度=长度-XK起址=起址+XK 输出分配情况 结束public static void sortmaxtomin()fenqu d;ll.removeAll();for(int i=0;i<alist.size();i+)for(int j=i+1;j<alist.size();j+)if(alist.get(i).fenqusize<alist.get(j).fenqusize)d=alist.get(i);alist.set(i,alist.get(j);alist.set(j,d);for(int i=0;i<alist.size();i+)if(alist.get(i).procname!=null)ll.add(new doubleNode(null,null,alist.get(i).fenquno,alist.get(i).fenqusize,1);elsell.add(new doubleNode(null,null,alist.get(i).fenquno,alist.get(i).fenqusize,0);4) 源程序文件名 执行文件名 doubleNode.java Fenqu.java Linkedlist.java Mainproc.java三、 实验结果与分析(要有结果截图) 随机产生内存分区: 输入进程:対进程进行算法执行:首次适应算法:最正确适应算法: 最差适应算法: 撤销进程操作: 四、设计总结 为了实现此三种算法,首先需要配置两种数据结构,来描述空闲分区表和空闲分区链,由于对java的数据结构比拟熟悉,本次就用了java语言,通过和小组成员的讨论,最后确定了,数组和双链表的结构和内容。 在本次编程中约到了许多问题,比方说,空闲分区表和空闲分区连,当进入一个新的进程的同时,必须让两个数据结构得以同步,开始的时候,总会出现进程分配成功,可是测试的时候没有显示出来的情况,经过两人的讨论和研究,最终解决了这个问题。 这次课程设计,复习了一下以前学过的java编程,还有java的数据结构,也加深了对操作系统的内存分配方面加深了了解。本次设计锻炼了自己的编程能力,对以后的学习奠定了根底。

    注意事项

    本文(计算机操作系统原理课程设计.doc)为本站会员(z****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开