计算机操作系统原理课程设计.docx
- 文档编号:25348581
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:25
- 大小:109.97KB
计算机操作系统原理课程设计.docx
《计算机操作系统原理课程设计.docx》由会员分享,可在线阅读,更多相关《计算机操作系统原理课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
计算机操作系统原理课程设计
上海电力学院
课程设计报告
课程名称:
操作系统原理
题目名称:
采用可变分区存储管理,模拟主存空间的分配和回收
姓名:
XXX学号:
XXX
班级:
2013054同组姓名:
XXX
课程设计时间:
2015.7.6〜2015.7.10
评语:
课程设计题目
一、设计内容及要求
可变分区存储管理模拟
设计内容:
编写程序模拟实现可变分区存储管理。
具体要求:
编写程序模拟实现可变分区存储管理,实现存储管理的基本功能,包括内存的分配、内存的回收、地址变换等。
输入:
1、输入新进程名称及使用内存的大小(可创建多个进程);
2、撤销某个指定的进程;3、某个进程的逻辑地址;
输出:
显示每次创建进程或者撤销进程后内存使用的状况,包括每一个进程占据的内存的位置和大小;
计算并输出给定逻辑地址对应的物理地址。
必须分别使用以下分配算法完成模拟:
1、首次适应算法;
2、最佳适应算法;
3、最差适应算法;
小组分工:
程序设计讨论:
程序主体设计:
程序调试及修改:
实验报告设计:
总结:
(要求注明小组分工情况)
详细设计
1)原理概述
对于可变分区存储管理的内存分配与回收,主要为设计以下几个部分:
1、设计动态输入空闲分区表的程序
2、设计内存分配的程序
3、设计内存回收的程序
首次适应算法:
FF算法要求空闲分区表或空闲分区链以地址递增的次序链接。
在分配内时,从链首开始查找,直至找到一个大小能满足要求分区为止;然后再按照作业大小,从该分区中划一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。
如从链首直至链尾都不能找到一个能满足要求的分区,则此次分配失败,返回
最佳适应算法:
BF算法是指每次为作业分配内存,总是把满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。
为了加速寻找,该算法要求所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。
这样,第一次找到能满足要求的空闲区,
必然是最佳的。
最差适应算法:
WF算法要扫描整个空闲分区表或链表,总是挑一个最大的空闲区分割给作业使用,其优点是可使剩下的空闲区不至于太小,产生碎片的几率最小,对中、小作业有利,同时最坏适应分配算法查找出效率很高。
该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。
2)主要数据结构
1、空闲分区表的定义
publicclassfenqu{
public
intfenquno
fenqusize
fenqustart;
public
Stringprocname;
public
staticint
cofenqusize
=0;//创建起始分区基址
public
{
fenqu(int
fenquno,int
fenqusize)
this
.fenquno=fenquno;
this
.fenqusize
=fenqusize;
this
.fenqustart
=cofenqusize
J
cofenqusize+=fenqusize;
procname=null;
}
publicfenqu(intfenquno,intfenqusize,intfenqustart)
{
this.fenquno=fenquno;
this.fenqusize=fenqusize;
this.fenqustart=fenqustart;
procname=null;
}
}
已分配分区表的定义
publicstaticvoidcreatefenqu()
{
int
intRe[]=
newint[5];
//fenquno
的随机数
int
intREE[]=
newint
[5];
//fenqusize
的随机数产生;
int
intRd;//
存放随机数
int
intRDD;
int
count=0,count1=O;
//
产生的随机数的个数,count是fenquno,count1是
fenqusize
intflag=0;//是否产生过随机数
Randomrdm=newRandom();while(count intRd=Math.abs(rdm.nextInt())%5; for(inti=0;i { if(intRe[i]==intRd) { flag=1;break; } else flag=0; } if(flag==0) {intRe[count]=intRd;count++; } } while(count1 { intRDD=(int)(Math.random()*(60+1-30))+30;for(inti=0;i { if(intREE[i]==intRDD) { flag=1;break; } else flag=0; } if(flag==0) {intREE[count1]=intRDD;count1++; }} for(inti=0;i<5;i++) { alist.add(newfenqu(intRe[i],intREE[i])); ll.add(newdoubleNode(null,null,intRe[i],intREE[i],0)); System.out.println( alist "+alist.get(i).fenqusize +" "+alist +"" +ll .get(i). "+ll.get(i).fenqusize+" I! +ll.get(i) } } .get(i).fenquno+".get(i).fenqustartfenquno+" re); 内存分配 public { staticvoidfenpeineicun(processp) booleanre=true } if(re) inti=0,j; if(alist.size() { for(i=0;i { for(j=0;j { if(aliste! =ll.get(j). .get(i).fenquno==ll.get(j).fenqusize) { alist.get(i). fenquno&&alist.get(i).fenqusiz fenqusize=ll.get(j).fenqusize rt+alist.get(i). fenquno ll .get(i+1). fenqusize alist.get(i). fenqusta fenqusize ); alist .add(fe); alist .get(i). procname =p.JCname; maxfenquno++; fenqufe=new fenqu(ll.get(i+1). } else { for(i=0;i { for(j=0;j { fenqusiz if(alist.get(i).fenquno==ll.get(j).fenquno&&alist.get(i).e==p.JCsize) { alist.get(i).procname=p.JCname; } } } } } else System.out.println("有同名进程,不能分配内存"); } publicstatic voidFF(processp) { sortaddressfenpeineicun } publicstatic { sortmintomaxfenpeineicun } publicstatic { sortmaxtominfenpeineicun (); (p); voidBF(processp) (); (p); voidWF(processp) (); (p); 1、内存回收 publicstaticvoiddropprocess(Stringname) { booleanre=true; for(inti=0;i { if(ll.get(i). re==1) for(intj=O;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)算法(流程图) 内存分配: 从该分区中划岀 u.size大小的分区 将该分区从链中移出 > 丁 将该分区分配给请求者修改有关数据结构 返回 public { static voidfenpeineicun(processp) if e! =ll fenqu( boolean for(int { } if re=true k=0;k if(p.JCname==alist re=false; (re) (alist .get(j). .get(k).procname) inti=0,j; .comparefenqusize(p. ll if JCsize maxfenquno); (alist for .get(i). .size() (i=0;i .theSize .size();i++) for(j=0;j fenquno==ll.get(j). fenqusize) { ll.get(i+1). fenquno alist.get(i).fenqufe=new,ll .get(i+1). rt+alist.get(i). fenqusize ); alist .add(fe); ;j++) fenquno fenqusize fenqusize &&alist.get(i). =ll.get(j). alist.get(i). fenqusiz fenqusize fenqusta } else for (i=0;i< if(alist.get(i).e==p.JCsize) .get(i).maxfenquno++; alist procname =p.JCname; alist.size();i++) for(j=0;j { fenquno==ll.get(j). { alist.get(i). ;j++) fenquno procname &&alist.get(i). =p.JCname; fenqusiz } } } else System.out.println(”有同名进程,不能分配内存"); } 1、首次适应算法 开始 是 不能输入作业~J 结束 实现算法主要代码: — publicstaticvoidsortaddress() { fenqud; II.removeAII(); for(inti=0;i { for(intj=i+1;j { if(alist.get(i).fenqustart>alist.get(j).fenqustart) { d=alist.get(i); 2、最佳适应算法 iI 否 "查看空闲区表'是否有空闲区 F是 将作业与排好的分区容量对比 J丿 1 F r I 最佳的进行输入 r / 长度=长度-XK起址=起址+XK J—1 f ■w 输出分配情况 结束 publicstaticvoidsortmintomax() { fenqud; II.removeAII(); for(inti=0;i { for(intj=i+1;j { fenqusize) if(alist.get(i).fenqusize>alist.get(j). { procname! =null) d=alist.get(i); alist .set(i,alist.get(j)); alist .set(j,d); } } } for(inti=0;i< alist.size();i++) { if(alist.get(i). ll .add( new doubleNode( null, null, alist •get(i) else ll .add( new doubleNode( null, null, alist •get(i) } fenquno alist .get(i). fenqusize 1)); fenquno alist .get(i). fenqusize 0)); 3、最差适应算法 结束 publicstaticvoidsortmaxtomin() { fenqud; ll.removeAll(); for(inti=0;i { for(intj=i+1;j { if(alist.get(i).fenqusize { 4)源程序文件名执行文件名doubleNode.java Fenqu.java Linkedlist.java Mainproc.java 三、实验结果与分析(要有结果截图) 随机产生内存分区: mainproc(1J卩劃冲AppiGtiD勺Q\MyfechpseProfessional\bnasy\com.sunji [区号 内樓地址 酚区庾大小舟配 1M jL S32 2S3 0 13. 32&3 132 Q 0 3585 a磋 0 4 39120 439 0 315» 从犬到小IfJ? 3刖 0 3 Ei 159 Dnull p C adlil 32Q onull Io 35 es onull ■ : 3 0皿IL 请谕人创建的进程数「卜于 输入进程: 请输入雉程售 请端人*吞大小 谙输人进再戌序殆地廿 嗟岫入進程客 .b 捂墉人逍程前i? 镰地址 20 対进程进行算法执行: 首次适应算法: 进理士内专分配咸5进程川内步分配咸3 总內存空问: 2i7剩余內存: 16? 可用为弯T辰 330 03 J 513 305 0 ? 40 432 1 □~~ 93£ C 445 13a0 C 1S7 1S04 - 石15 S31 0 进程名玮显 进程大小3 进衽所在內存分区汩 內存位置272 进程枷遅乜屯 ;: 2C 进探黄資字 逬程所在內存分区注 內看位盏: 44耽 进程韧哩%创 : 总 最佳适应算法: 恳內扫空闾: 鮎丁巨用內疤分区 剩余内稈 =167 5 13 30 3 C 6 15 二二 6 C 3 33 0 3 1 0 37 @£ 0 C 2 ! □ 加 2 1 4 45 135 4 C 51 ieo 1 C 内存位KjO~2S 艇物理地址煜0 : a 迟程英小泊d 说程斷在内存井区: 3 生祓宗称: h 逬程戈小: / 讨程所在内存分区订 卜疗位适: 『,叮 进程辆理电址: 相 最差适应算法: 踐恨a: 内专去蚯战于 別勺冇空网: "」<*^riTr•■■*-> 4 135< — 2 43a 0 0> ST 2 A W 耳 3D 0> 5 3D 01 亘 27 2103 Q 13I 0 : 占 辱卩百 D 95 进程越申 1755 进S*小口口…Ji崖知u ttfTMniSWEH RWiiHiMO-JM曲星物屋腿址mooIt徨物理尷址订酣 撤销进程操作: 晞帝A晋葺荷的进程名•悅丙存空间日釦剩亲内存江阳 可用心耳対区. 440 1354 1 侶B ■a Q3T BB? □ 130 ISOD 0 古帕 0丄 - 717 21Q3 0 «&& S3丁 Q 513 3口6 a 35 连程名柠沾 •E"L-U-J.CT 1755 遊K大小汕。 wr、jl 曲1宙在1*115#Ell进屁所在内脊佇区詁 內存isa-io*地址注皿 4軀搁理地址■■- 四、设计总结 为了实现此三种算法,首先需要配置两种数据结构,来描述空闲分区表和空闲分区链,由于对java的数据结构比较熟悉,本次就用了java语言,通过和小组成员的讨论,最后确定了,数组和双链表的结构和内容。 在本次编程中约到了许多问题,比如说,空闲分区表和空闲分区连,当进入一个新的进程的同时,必须让两个数据结构得以同步,开始的时候,总会出现进程分配成功,可是测试的时候没有显示出来的情况,经过两人的讨论和研究,最终解决了这个问题。 这次课程设计,复习了一下以前 学过的java编程,还有java的数据结构,也加深了对操作系统的内存分配方面加深了了解。 本次设计锻炼了自己的编程能力,对以后的学习奠定了基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统 原理 课程设计