




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上操作系统课程实验报告姓名学号系计算机任课教师指导教师评阅教师实验地点丽泽楼C304-2 丽泽楼C304-1 (请勾选实际实验地点)实验时间实验课表现出勤和个人表现Q1(15+15(组长评分)=30分)得分:实验总分(Q1+Q2+Q3+Q4)实验完成情况Q2(45分(组长评分,教师根据实际情况微调)得分:实验编号与实验名称:第六次实验 内存分配与回收模拟实验目的:通过使用位图跟踪内存使用情况,模拟和评价不同的内存分配算法;熟悉内存分配和回收。实验内容及要求(详见实验讲义与实验指导书):1)要求用你熟悉的程序设计语言编写和调试一个内存分配和回收模拟程序;要求在主函数中测试
2、。2)实验报告中必须包括:设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图)、源代码、运行结果、体会等部分。3)必须模拟该4种内存分配算法:first fit,next fit,best fit和worst fit中的至少2种。4) 需显示出每次分配和回收后的空闲分区链的情况来以及内存占用情况图,并统计各种算法产生的碎片空闲区(小于3个单元(unit)的空闲区)数。5)计算2个性能参数:碎片数、平均搜索空闲区次数实验内容及关键步骤(流程图) First fit next fit实验内容及关键步骤(代码)Q3(15分)(1)First fit 代码 运行结果#include
3、<stdio.h>struct not_empty/已分配分区表char process_id;/作业标志符,此处采用-255的整数 int address_of_start;/起始地址int size_of_notempty;/作业请求的内存单元数int delete_or_not; /进程是否被创建,是否 Not_Empty20;void printnow(char ram)/输出内存分配情况 int i;for(i=1;i<=128;i+)printf("%c",rami);if(i%11=0)printf("n"); print
4、f("n");void printfree(char ram)/输出内存空闲区和内存空闲碎片int i,flag=0,can_not_use=0;printf("空闲区间为:n"); for(i=1;i<=128;i+)if(flag=0)if(rami='o')flag=i;printf("%d ",flag-1);elseif(rami='x'|i=128|(rami>='0'&&rami<='9')printf("%dn&
5、quot;,i-1);if(i-1-flag<3)can_not_use+;flag=0;printf("内存空闲碎片数为:%dn",can_not_use);int main()int time=0;char ram129,id,del;int flag=0,i,j,cos,size,what;int used_total=0;int cancreat_ornot=0;for(i=0;i<20;i+) Not_Emptyi.delete_or_not=1;for(i=1;i<=128;i+)rami='o'printf("1,分
6、配; 2,回收;n3,内存占用情况图; 4,退出;n"); while(scanf("%d",&what)&&what!=4)if(what=1)avetime=0;printf("请输入进程id(0255),占用空间大小(010)n");getchar();scanf("%c %d",&id,&cos);/输入进程id和所需空间if(Not_Emptyid-48.delete_or_not=0)/判断进程是否已经被创建printf("进程已存在!n"); else
7、 for(i=1;i<=128;i+)if(flag=0)if(rami='o')/判断该内存单元是否为空,是则标记第一个空的内存单元位置,已知连续的空闲单元为flag=i;size=1; elseif(size=cos)/如果连续的内存单元等于进程所需内存大小,则记录相应信息Not_Ecess_id=id;Not_Emptyid-48.address_of_start=flag;Not_Emptyid-48.size_of_notempty=cos;Not_Emptyid-48.delete_or_not=0;ramflag=id;cancre
8、at_ornot=1;/标记进程分配内存成功for(j=flag+1;j<flag+size;j+)ramj='x'/把已分配的内存标记为x break;if(rami='o')size+;else flag=0; if(cancreat_ornot=0)printf("没有足够的内存空间!n");elsecancreat_ornot=0;flag=0;printnow(ram);printfree(ram); else if(what=2)printf("请输入要删除的进程号n");getchar();scanf(
9、"%c",&del); /for(i=0;i<used_total;i+)if(Not_Ecess_id=del)if(Not_Emptydel-48.delete_or_not=0)/确认进程是否已销毁过for(j=Not_Emptydel-48.address_of_start;j<Not_Emptydel-48.address_of_start+Not_Emptydel-48.size_of_notempty;j+)ramj='o'printnow(ram);printfree(ram);Not_Empt
10、ydel-48.delete_or_not=1;/标记已经销毁elseprintf("进程不存在或已销毁!n"); if(what=3)printnow(ram);printf("1,分配; 2,回收;n3,内存占用情况图; 4,退出;n"); (2) next fit代码 运行结果#include<stdio.h> struct not_empty/已分配分区表 char process_id;/作业标志符,此处采用-255的整数 int address_of_start;/起始地址int size_of_notempty;/作业请求的内存
11、单元数int delete_or_not; /进程是否被创建,是否 Not_Empty20; void printnow(char ram)/输出内存分配情况 int i;for(i=1;i<=128;i+)printf("%c",rami);if(i%11=0)printf("n");printf("n");void printfree(char ram)/输出内存空闲区和内存空闲碎片int i,flag=0,can_not_use=0;printf("空闲区间为:n"); for(i=1;i<=12
12、8;i+)if(flag=0)if(rami='o')flag=i;printf("%d ",flag-1);elseif(rami='x'|i=128|(rami>='0'&&rami<='9')printf("%dn",i-1);if(i-1-flag<3)can_not_use+;flag=0;printf("内存空闲碎片数为:%dn",can_not_use);int main()char ram129,id,del;int fl
13、ag=0,i,j,cos,size,what;int next=1;int cancreat_ornot=0;for(i=0;i<20;i+) Not_Emptyi.delete_or_not=1;for(i=1;i<=128;i+)rami='o'printf("1,分配; 2,回收;n3,内存占用情况图; 4,退出;n"); while(scanf("%d",&what)&&what!=4)if(what=1)printf("输入进程的id(0255)和它占用空间的大小(010)n&quo
14、t;);getchar();scanf("%c %d",&id,&cos);/输入进程id和所需空间if(Not_Emptyid-48.delete_or_not=0)/判断进程是否已经被创建printf("进程已存在!n"); else for(i=next;i<=128;i+)if(flag=0)if(rami='o')/判断该内存单元是否为空,是则标记第一个空的内存单元位置,已知连续的空闲单元为flag=i;size=1;elseif(size=cos)/如果连续的内存单元等于进程所需内存大小,则记录相应信息/
15、printf("id:%dn",id-48);Not_Ecess_id=id;Not_Emptyid-48.address_of_start=flag;Not_Emptyid-48.size_of_notempty=cos;Not_Emptyid-48.delete_or_not=0;ramflag=id;cancreat_ornot=1;/标记进程分配内存成功/used_total+;for(j=flag+1;j<flag+size;j+)ramj='x'/把已分配的内存标记为x next=flag+size;break;i
16、f(rami='o')size+;else flag=0; if(i=129)for(i=1;i<next;i+)if(flag=0)if(rami='o')flag=i;size=1;elseif(size=cos)/printf("id:%dn",id-48);Not_Ecess_id=id;Not_Emptyid-48.address_of_start=flag;Not_Emptyid-48.size_of_notempty=cos;Not_Emptyid-48.delete_or_not=0;ramfl
17、ag=id;cancreat_ornot=1;/used_total+;for(j=flag+1;j<flag+size;j+)ramj='x'next=flag+size;flag=0;break;if(rami='o')size+;else flag=0; flag=0;if(cancreat_ornot=0)printf("没有足够的内存空间!n");elsecancreat_ornot=0;printnow(ram);printfree(ram); else if(what=2)printf("请输入要删除的进程号n&
18、quot;);getchar();scanf("%c",&del); if(Not_Ecess_id=del)if(Not_Emptydel-48.delete_or_not=0)/确认进程是否已销毁过for(j=Not_Emptydel-48.address_of_start;j<Not_Emptydel-48.address_of_start+Not_Emptydel-48.size_of_notempty;j+)ramj='o'printnow(ram);printfree(ram);Not_Emptydel-48.delete_or_not=1;/标记已经销毁elseprintf(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 流程管理年中工作总结
- 思想政治教育主要实施方法
- 建筑石膏抹灰施工课件
- 2025企业租赁合同范本模板
- 2025企业合同审核与流转管理流程
- 2025年土地租赁合同附加协议
- 2025标准商业租赁合同示范文本
- 2025石油贸易居间合同
- 2025代理合同风险评估与委托协议样本
- 让硬币浮起来课件
- 一人有限公司章程(范本)
- 员工惩罚通知单
- 2022全国高考真题化学汇编:专题 烃 卤代烃
- GB/T 25742.4-2022机器状态监测与诊断数据处理、通信与表示第4部分:表示
- 特殊感染手术的配合与术后处理
- 萧红《呼兰河传》课件
- 脑血管病介入诊疗并发症及其处理课件
- 机动车驾驶人考试场地及其设施设置规范
- 大学生三生教育主题班会
- 2023年宜昌市中医医院医护人员招聘笔试题库及答案解析
- 内部控制建设课件
评论
0/150
提交评论