操作系统“内存管理”实验报告_第1页
操作系统“内存管理”实验报告_第2页
操作系统“内存管理”实验报告_第3页
操作系统“内存管理”实验报告_第4页
操作系统“内存管理”实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、洛阳理工学院实验报告系别计算机班级B学号B姓名孙帅杰课程名称操作系统实验日期2012.11.29实验名称内存管理成绩实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。实验条件: windows操作系统PC一台;VC+6.0平台实验原理:设计程序模拟内存的动态分区内存管理方法。内存空闲区使用空闲分区表进行管理,采用最先适应算法从空闲分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用40K。t1时刻,为作业A、B、C分配80K、60K、100K、的内存空间;t2时刻作业B完成;t3时刻为作业D分配5

2、0K的内存空间;t4时刻作业C、A完成;t5时刻作业D完成。要求编程序分别输出t1、t2、t3、t4、t5时刻内存的空闲区的状态。实验内容:#include#include#define maxPCB 6 /最大进程数#define maxPart 6/最大空闲分区数#define size 10/不在切割剩余分区的大小typedef struct PCB_typechar name; /进程名int address;/进程所占分区首地址 int len;/进程所占分区的长度int valid;/PCB标识符(有效,无效) PCB;typedef struct seqlist /进程信息队列P

3、CB PCBelemmaxPCB; /maxPCB为系统中允许的最多进程数int total; /系统中实际的进程数 PCBseql;/分区类型的描述typedef struct Partitionint address;/分区起址int len;/分区的长度int valid;/有效标识符(有效,无效)Part;/内存空闲分区表(顺序表)描述typedef struct Partlist /空白分区链Part PartelemmaxPart;/maxPart 为系统中可能的最多空闲分区数int sum;/系统中世纪的分区数Partseql;/全局变量PCBseql *pcbl; /进程队列指

4、针Partseql *partl; /空闲队列指针#includeMainManager.hvoid initpcb() /初始化进程表vpcbl int i;pcbl-PCBelem0.address=0;pcbl-PCBelem0.len=40;pcbl-PCB=s;pcbl-PCBelem0.valid=1;pcbl-total=0;for(i=1;iPCB=0;pcbl-PCBelemi.address=0;pcbl-PCBelemi.len=0;pcbl-PCBelemi.valid=0;void initpart() /初始化空闲分区表vpa

5、rtlint i;partl-Partelem0.address=40;partl-Partelem0.len=600;partl-Partelem0.valid=1; for(i=1;iPartelemi.address=0;partl-Partelemi.len=0;partl-Partelemi.valid=0;partl-sum=1;void request(char name,int len) /进程name请求len大小的内存int i,j,k;int address;for(i=0;isum;i+)if(partl-Partelemi.len=len)address=partl-

6、Partelemi.address;if(partl-Partelemi.len-len=size) partl-Partelemi.address+=len; partl-Partelemi.len-=len; partl-Partelemi.valid=1;elsefor(j=i;jPartelemj=partl-Partelemj+1;partl-Partelemj.valid=0;partl-Partelemj.address=0;partl-Partelemj.len=0;partl-sum-; for(k=0;kPCBelemk.valid=0) pcbl-PCBelemk.add

7、ress=address; pcbl-PCBelemk.len=len; pcbl-PCB=name; pcbl-PCBelemk.valid=1; pcbl-total+; break; break;elseprintf(内存紧张,暂时不予分配,请等待!);void release(char name) /回收name进程所占内存空间int i;for(i=0;iPCB=name)if(pcbl-PCBelemi.valid=0)printf(%c进程非运行进程,无法结束!,name);elsepcbl-PCBelemi.valid=0;pcbl-to

8、tal-;partl-Partelempartl-sum.address=pcbl-PCBelemi.address;partl-Partelempartl-sum.len=pcbl-PCBelemi.len;partl-Partelempartl-sum.valid=1;partl-sum+;void print() /输出内存空闲分区int i;printf(当前的进程有:n);printf(name address lengthn); for(i=1;iPCBelemi.valid=1)printf(%c %d %dn,pcbl-PCB,pcbl-PCBelemi.a

9、ddress,pcbl-PCBelemi.len);printf(当前的空闲分区有:n);printf(address lengthn);for(i=0;iPartelemi.valid=1)printf(%d %dn,partl-Partelemi.address,partl-Partelemi.len);void main()char ch;char pcbname;int pcblen;PCBseql pcb;Partseql part;pcbl=&pcb;partl=∂initpcb();initpart();printf(t*MENU*n);printf(t* Enter:

10、 r 请求分配内存*n);printf(t* Enter: s 结束进程 *n);printf(t* Enter: p 打印分配情况*n);printf(t* Enter: e 退出 *n);ch=getchar();fflush(stdin);while(ch!=e)switch(ch)case r:printf(请输入请求进程的name,len:);scanf(%c %d,&pcbname,&pcblen);fflush(stdin);request(pcbname,pcblen);break;case s:printf(请输入要结束进程的name:);scanf(%c,&pcbname)

11、;fflush(stdin); release(pcbname);break;case p:print();break;case e:exit(0);ch=getchar();fflush(stdin);原始数据纪录:输入数据及输出数据: *MENU* * Enter: r 请求分配内存 * * Enter: s 结束进程 * * Enter: p 打印分配情况 * * Enter: e 退出 *r请输入请求进程的name,len:a 80r请输入请求进程的name,len:b 60r请输入请求进程的name,len:c 100p当前的进程有:name address lengtha 40 8

12、0b 120 60c 180 100当前的空闲分区有:address length280 360s请输入要结束进程的name:bp当前的进程有:name address lengtha 40 80c 180 100当前的空闲分区有:address length280 360120 60r请输入请求进程的name,len:d 50p当前的进程有:name address lengtha 40 80d 280 50c 180 100当前的空闲分区有:address length330 310120 60s请输入要结束进程的name:ap当前的进程有:name address lengthd 280 50c 180 100当前的空闲分区有:address length330 310120 6040 80s请输入要结束进程的name:cs请输入要结束进程的name:dp当前的进程有:name a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论