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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

可变分区存储管理.docx

1、可变分区存储管理实验一 可变分区存储管理一、实验内容编写程序模拟内存分配与回收的过程。二、实验目的 1加深对可变分区的存储管理的理解; 2提高用 C 语言编制大型系统程序的能力,特别是掌握C 语言编程的难点: 指针和指针作为函数参数; 3掌握用指针实现链表和在链表上的基本操作。三、实验题目编写一个C程序,用char *malloc(unsigned size)函数向系统申请一次内存空间(如size=1000,单位为字节),模拟可变分区内存管理,实现对该内存区的分配和释放管理。(1)设计思路 用 char*malloc(unsigned size)函数向系统申请一次内存空间(如size=1000

2、,单位为字节),用循环首次适应法addr = (char *)lmalloc(unsigned size)和lfree(unsigned size,char * addr)模拟UNIX 可变分区内存管理,实现对该内存区的分配和释放管理。 (2)循环首次适应算法 模拟UNIX 的进程管理程序采用的是循环首次适应算法,具体算法如下: 系统每次为进程分配资源时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。(3)数据结构(4)系统总体框图4、源程序代码#include #include #include #includ

3、e #include #define getpch(type) (type*)malloc(sizeof(type)#define maxm 600 /* 最大内存空间*/#define null 0struct spd /* 分区说明表 */ int j; /*分区名*/ int len; /*大小*/ char state; /*状态:e,f,a*/ int saddre; /*起始地址*/ struct spd *next;*rspd=null,*p;struct jcb char name10; int xk; int sadd; struct jcb *next;*jp,*ready

4、;typedef struct spd SPD;typedef struct jcb JCB;void mainmenu();void input();void disp0();void disp();void initm();void allationm();void freem();void initm()/*初始化*/ p=getpch(SPD); p-j=1; p-len=maxm; p-state=e; p-saddre=0; rspd=p; rspd-next=null;void disp2() JCB *first; int i=0; first=ready; if(ready!

5、=null) printf(n内存中现有作业:n); while(first!=null) printf(%st,first-name); i+; if(i=5)printf(n); first=first-next; else printf(内存中无作业.n);void input() JCB *first; int xk; char name10; first=ready; printf(n请输入作业名:); scanf(%s,&name); while(first!=null) if(strcmp(name,jp-name)=0) printf(n此文件名已存在,请重新输入:); sca

6、nf(%s,&name); else first=first-next; first=ready; printf(n请输入作业所需的内存空间:); scanf(%d,&xk); if(xk600|xkname,name); jp-xk=xk; jp-sadd=null; if(ready=null)/* 排序 */ ready=jp; ready-next=null; else while(first-next!=null) first=first-next; first-next=jp; first=first-next; first-next=null; void allationm()

7、int flag=0; SPD *first; first=rspd; input(); while(first!=null) if(first-state=e&first-len=jp-xk)jp-sadd=first-saddre; first-state=f; if(first-lenjp-xk) p=getpch(SPD); p-j=first-j+1; p-len=first-len-jp-xk; first-len=jp-xk; p-saddre=first-saddre+jp-xk; p-state=e; p-next=first-next; first-next=p; flag

8、=1; while(p-next!=null) p-next-j=p-next-j+1; p=p-next; else first=first-next; if(flag=1)break; if(first=null) printf(内存不足.n); getch(); void freem() JCB *first,*second,*pp; SPD *pre; int add=null,i; int flag=0,flag1=0; long temp; disp2(); printf(n请输入要撤销的作业名:); jp=getpch(JCB); scanf(%s,&jp-name); jp-s

9、add=null;jp-xk=null;jp-next=null; pre=rspd; p=pre-next; first=ready; second=first-next; /*寻找要撤销的作业,并撤销它*/ if(strcmp(first-name,jp-name)=0) flag=1; ready=second; first-next=null; add=first-sadd; free(first); while(flag=0&second!=null) if(strcmp(second-name,jp-name)=0) flag=1; first-next=second-next;

10、second-next=null; add=second-sadd; free(second); break; if(second-next!=null) first=first-next; second=second-next; else break; /*找出作业的内存地址,释放之*/ if(add=pre-saddre&flag=1) flag1=1; pre-state=e; if(p-state=e) pre-len=p-len+pre-len; pre-next=p-next; p-next=null; while(pre-next!=null)pre-next-j=pre-nex

11、t-j-1; pre=pre-next; free(p); while(flag=1&flag1=0&p!=null) i=add; pp=ready; if(add=p-saddre) flag1=1; p-state=e; if(pre-state=e) if(p-next!=null&p-next-state=e) pre-len=pre-len+p-len+p-next-len; pre-next=p-next; p-next=null; free(p); p=pre-next; pre-next=p-next; p-next=null; free(p); p=rspd; while(

12、pre-next!=null) pre-next-j=pre-next-j-2; pre=pre-next; else pre-len=p-len+pre-len; pre-next=p-next; p-next=null; free(p); while(pre-next!=null) pre-next-j=pre-next-j-1; pre=pre-next; else if(p-next!=null&p-next-state=e) p-len=p-len+p-next-len; p-state=e; pre=p-next; p-next=p-next-next; pre-next=null

13、; free(pre); while(p-next!=null) p-next-j=p-next-j-1; p=p-next; else p-state=e; /*if*/ if(flag1=1)break; p=p-next; pre=pre-next; /*while*/ if(flag=0)printf(n作业不存在,无法撤消.n); if(flag1=1) printf(n.正在撤消n); for(temp=1;tempj); if(ready!=null&p-state=f) if(first!=null) printf(t%s,first-name); first=first-ne

14、xt; if(p-state=e) printf(tt%4d kB,p-saddre); else printf(t%4d kB,p-saddre); printf(t %4d kB,p-len); if(p-state=e)printf( 未分配); if(p-state=f)printf( 已分配); printf(n); p=p-next; void disp() disp0(); printf(按任意键返回选择执行操作.n); getch(); void main()/*界面*/ initm(); int c; printf( *n); printf( * 主存空间的分配与回收 *n)

15、; printf( *n); printf( 1.分配内存 2.回收内存 3.显示分配 4.退出n); while(1) printf(n请选择要执行的操作(14):); scanf(%d,&c); if(c4|c1) printf(输入错误,请重新输入:n); continue; switch(c) case 1:allationm(); break; case 2:if(ready!=null)freem(); else printf(n内存中没有作业.n); getch(); break; case 3:disp();break; case 4:goto end; end: getchar();5、程序运行时初值和运行结果1.运行结果(1)初始界面(2)分配内存演示结果(3)显示分配演示结果(4)回收内存演示结果6、实验总结 通过本次实验加深了对循环首次适应算法,内存分配与回收的机制的理解,也巩固了C+程序语言设计的基础。

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

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