版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、_大学_学院实验报告课程名称: 计算机操作系统 实验名称: 存储管理实验 实验日期: 班级: 姓名: 学号: 仪器编号: XX 实验报告要求:1.实验目的 2.实验要求 3.实验步骤 4.程序清单 5.运行情况 6.流程图 7.实验体会1、 实验目的 ?通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉虚存管理的各种页面淘汰法。 ?通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。2、 实验要求?设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表
2、,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。?设计一个可变式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 对分区的管理法可以是下面三种算法之一:首次适应算法;最坏适应算法;最佳适应算法。?编写并调试一个段页式存储管理的地址转换的模拟程序。首先设计好段表、页表,然后给出若干个有一定代表性的地址,通过查找段表页表后得到转换的地址。要求打印转换前的地址,相应的段表,页表条款及转换后的地址,以便检查。3、 实验步骤(1) 理解实验要求,联系所学知识; (2)根据要求编写调度算法; (3)编写完整的实验代码并在VC+ 环境下编译运行; (4)调试程序直至得出结果。4、
3、程序清单?#include #include #include#include#define NUM 4#define alloMemory(type) (type*)malloc(sizeof(type)struct partiTabint no;int size;int firstAddr;char state;parTabNUM;typedef struct partiTab PARTITAB;typedef struct jcb /*定义作业控制块JCB ,部分信息省略*/char name10; tate=Y;elseprintf(没有空闲分区,无法分配内存!n);void crea
4、teTab()int i;for( i=1;i=NUM;i+)o=i;parTabi-1.size=20;parTabi-1.firstAddr=21;parTabi-1.state=N;void checkTab() int i; printf(分区号t大小t起址t状态n);for(i=0;iNUM;i+)printf(%dt,parTabi.no);printf(%dt,parTabi.size);printf(%dt,parTabi.firstAddr);printf(%ct,parTabi.state);printf(n);void recycleMemory(int i)parTab
5、i-1.state=N;int main(int argc, char* argv)int i;printf(nntt*ttn);printf(tttt实验一 存储管理实验n);printf(tttt固定式分区分配存储管理n);printf(tt*ttn);createTab();checkTab();printf(请按任意键继续:n);getchar();printf(每个分区装入一道作业:n);for(i=0;iNUM;i+)AllocateMemory(i+1)*3);checkTab();printf(请按任意键继续:n);getchar();printf(假如一段时间后,其中一个作业
6、结束,回收给它分配的分区(假如该作业在第2分区)n);recycleMemory(2);checkTab();printf(请按任意键继续:n);getchar();printf(接着,从外存后备作业队列中选择一个作业装入该分区(假如该作业大小为10)n);AllocateMemory(10);checkTab();return 0;?#include#include #include#include#define n 10 #define m 10 #define minisize 100 structfloat address; float length; int flag; used_t
7、ablen; structfloat address; float length; int flag; free_tablem;void allocate(char J,float xk) int i,k;float ad;k=-1;for(i=0; i=xk&free_tablei.flag=1)if(k=-1|free_tablei.lengthfree_tablek.length)k=i;if(k=-1) printf(无可用空闲区n);return;if(free_tablek.length-xk=minisize)free_tablek.flag=0;ad=free_tablek.a
8、ddress;xk=free_tablek.length;elsefree_tablek.length=free_tablek.length-xk;ad=free_tablek.address+free_tablek.length;i=0;while(used_tablei.flag!=0&i=n) printf(无表目填写已分分区,错误n);if(free_tablek.flag=0)free_tablek.flag=1;else free_tablek.length=free_tablek.length+xk;return;else used_tablei.address=ad;used_
9、tablei.length=xk;used_tablei.flag=J;return;void reclaim(char J) int i,k,j,s,t;float S,L;s=0;while(used_tables.flag!=J|used_tables.flag=0)&s=n) printf(找不到该作业n);return;used_tables.flag=0;S=used_tables.address;L=used_tables.length;j=-1;k=-1;i=0;while(im&(j=-1|k=-1)if(free_tablei.flag=1)if(free_tablei.a
10、ddress+free_tablei.length=S)k=i;if(free_tablei.address=S+L)j=i;i+;if(k!=-1)if(j!=-1) /* 上邻空闲区,下邻空闲区,三项合并*/free_tablek.length=free_tablej.length+free_tablek.length+L;free_tablej.flag=0;else/*上邻空闲区,下邻非空闲区,与上邻合并*/free_tablek.length=free_tablek.length+L;else if(j!=-1) /*上邻非空闲区,下邻为空闲区,与下邻合并*/free_tablej.
11、address=S;free_tablej.length=free_tablej.length+L;else /*上下邻均为非空闲区,回收区域直接填入*/*在空闲区表中寻找空栏目*/t=0;while(free_tablet.flag=1&t=m) /*空闲区表满,回收空间失败,将已分配表复原*/printf(主存空闲表没有空间,回收空间失败n);used_tables.flag=J;return;free_tablet.address=S;free_tablet.length=L;free_tablet.flag=1;return;/*主存回收函数结束*/int main( )printf(
12、nntt*ttn);printf(tttt实验三 存储管理实验n);printf(nttt可变式分区分配 (最佳适应算法)n);printf(tt*n);int i,a;float xk;char J;/*空闲分区表初始化:*/free_table0.address=10240; /*起始地址假定为10240*/free_table0.length=10240; /*长度假定为10240,即10k*/free_table0.flag=1; /*初始空闲区为一个整体空闲区*/for(i=1; im; i+)free_tablei.flag=0; /*其余空闲分区表项未被使用*/*已分配表初始化:
13、*/for(i=0; in; i+)used_tablei.flag=0; /*初始时均未分配*/while(1)printf(功能选择项:n1。显示主存n2。分配主存n3。回收主存n4。退出n);printf(请选择相应功能1-4 :);scanf(%d,&a);switch(a)case 4:exit(0); /*a=4程序结束*/case 2: /*a=2分配主存空间*/printf(输入作业名J和作业所需空间xk: );scanf(%*c%c%f,&J,&xk);allocate(J,xk); /*分配主存空间*/break;case 3: /*a=3回收主存空间*/printf(输入
14、要回收分区的作业名);scanf(%*c%c,&J);reclaim(J); /*回收主存空间*/break;case 1: /*a=1显示主存情况*/*输出空闲区表和已分配表的内容*/printf(输出空闲区表:n起始地址 分区长度 标志n);for(i=0; im; i+)printf(%6dn,free_tablei.address,free_tablei.length, free_tablei.flag);printf( 按任意键,输出已分配区表n);getch();printf( 输出已分配区表:n起始地址 分区长度 标志n);for(i=0; in; i+)if(used_tabl
15、ei.flag!=0)printf(%6cn,used_tablei.address,used_tablei.length, used_tablei.flag);elseprintf(%6dn,used_tablei.address,used_tablei.length, used_tablei.flag);break;default:printf(没有该选项n);/*case*/*while*/return 1;?#include#includeusing namespace std;typedef struct Quick int qs;umssss1.flagssss1.plenssss
16、1.psta; cout请初始化第ss1段的页表,输入两个数据页表状态和对应块号endl; for(int sss1=0; sss1ssss1.plen; sss1+) pagess1sss1.num=sss1; cout请输入该段第sss1个页表的页表状态和对应块号pagess1sss1.flagpagess1sss1.block; um=bn; cout请输入第bn个内存块里的作业内容workbn.str; lag!=1|page.flag!=1) cout该页不在内存请输入一页在内存中的作为快表,请输入要作为快表的段号和页号; =page.block; menu();void chang
17、e() cout请输入要转化的逻辑地址,段号s,段内页号p,页内偏移地址d(B)snumpnumdnum; lock.strendl; cout物理地址是*bbs*1024+dnumendl; menu(); lag=0) cout缺段中断endl; menu(); else len-1) cout缺页中断=0&pnum=ssssnum.plen-1) if(pagessnumpnum.flag=0) cout缺页中断endl; menu(); else cout找到该页查询页表后对应块号pagessnumpnum.blockendl; cout该块内存的数据是workpagessnumpnum.block.strendl; cout转化得到的物理地址是:pagessnumpnum.block*bbs*1024+dnumend
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ktv投影施工方案(3篇)
- 人工伐木施工方案(3篇)
- 公司吃饭活动策划方案(3篇)
- 卵石镶嵌施工方案(3篇)
- 同城学校活动策划方案(3篇)
- 喷洒沥青施工方案(3篇)
- 墙面节能施工方案(3篇)
- 大钢管施工方案(3篇)
- 学生营销方案总结(3篇)
- 家用窨井施工方案(3篇)
- 2025年安徽省综合类事业单位招聘考试公共基础知识真题试卷及参考答案
- 生活垃圾收集人员培训管理方案
- 薪资核定及管理办法
- 劳动课自制沙拉课件
- 药膳养生鸡汤培训课件
- 监狱辅警面试题目及答案
- 十五五特殊教育发展提升行动计划
- 医院运营数据统计分析
- 幼儿跑酷培训
- 2025至2030年中国氟化液行业市场运行态势及产业趋势研判报告
- 毕业设计(论文)-包裹分拣机械结构设计
评论
0/150
提交评论