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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机操作系统.docx

1、计算机操作系统实验5 动态分区分配方式的模拟一、实验目的了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。二、实验内容及步骤(1)用C 语言分别实现采用首次适应算法(地址从小到大)和最佳适应算法(空闲块大小从小到大)的动态分区分配过程myalloc() 和回收过程myfree()(即自己编写一个分区分配和释放的函数) 。其中,空闲分区通过空闲分区链来管理;在进行内存分配时,系统优先使用空闲区低端的空间。(2)假设初始状态下,可用的内存空间为640 KB(即程序开始运行时,用malloc()函数一次申请640KB的内存空间,程序结束时用free

2、()函数释放空间。然后自己编写程序在这640KB的空间上模拟首次适应算法和最佳适应算法的分配过程。自己编写的分配过程不是真正去向操作系统申请空间,而是在这640KB空间上标记那块占用了;释放过程也不是真正释放空间,只是标记哪块分区空闲),作业请求序列如下:作业l 申请130 KB 。作业2 申请60 KB 。作业3 申请100 KB 。作业2 释放60 KB 。作业4 申请200 KB 。作业3 释放100 KB 。作业l 释放130 KB 。作业5 申请140 KB 。作业6 申请60 KB 。作业7 申请50 KB 。作业6 释放60 KB 。请分别采用首次适应算法和最佳适应算法进行内存块

3、的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。三、实验步骤与调试过程:每个分区有4个数据项,起始地址,大小,状态,进程号,其实地址和大小以KB为单位,状态分为“已分”或“空闲”,进程号:若分区是已分,则填上此分区的进程号,若分区是空闲,则填入? 这里先采用首次适应算法,首次适应算法是将空闲区按起始地址从小到大排序后,会给出3种选择 1.分配空间:输入申请空间的进程号,不能与已经存在的进程号相同,申请空间的大小和阀值,如果分配成功,则重新排序,再次给出3种选择 2.回收空间:则只用输入回收空间的进程号,回收是考虑上下是否邻街空闲区,显示回收后的内存分配情况。 3.结束:直接退出程

4、序四、实验结果:Distribution of memory: work1:130 free :500 Distribution of memory: work1:130 work2:60 free :440 Distribution of memory: work1:130 work2:60 work3:100 free :340 Distribution of memory: work1:130 free :60 work3:100 free :340 Distribution of memory: work1:130 free :60 work3:100 work4:200 free :

5、140 Distribution of memory: work1:130 free :160 work4:200 free :140 Distribution of memory: free :290 work4:200 free :140 Distribution of memory: work5:140 free :150 work4:200 free :140 Distribution of memory: work5:140 work6:60 free :90 work4:200 free :140Distribution of memory: work5:140 work6:60

6、work7:50 free :40 work4:200 free :140 Distribution of memory:五、主要算法和程序清单:#include#define getpch(type) (type*)malloc(sizeof(type) struct LNode int size; int start; int end; struct LNode *next; struct LNode *front;*L; /*L为头指针*/typedef struct LNode LN;LN *find;int n;void InsertList(int size,int start)

7、/ 在带头结点的单链线形表头结点后插入 LN *p,*s,*t; p=L; t=p-next; s=getpch(LN); /生成新结点 s-size=size; s-start=start; s-end=start + size ; s-next=t; /插入L中 p-next=s; if(t) t-front=s; s-front=p;/end of InsertListvoid PrintList() /*打印*/ LN *p; int i; p=L-next; printf(n空闲区号 长度 起始位置 终止位置n); for(i=1;isize, p-start,p-end); p=p

8、-next; void BFSortList() /*最佳适应算法的排序*/ LN *p,*s,*t; int min_size,i; int size,start,end; t=L-next; p=L-next; for(i=0;inext; min_size = p-size; while(s) if(min_size s-size) min_size=s-size; t=s; s=s-next; size=t-size; start=t-start; end=t-end; t-size=p-size; t-start=p-start; t-end=p-end; p-size=size;

9、p-start=start; p-end=end; t=p-next; p=p-next; / end of BF_SortListvoid SortList() /*首次和循环首次适应算法的排序*/ LN *p,*s,*t; int min_start,i; int size,start,end; t=L-next; p=L-next; for(i=0;inext; min_start = p-start; while(s) if(min_start s-start) min_start=s-start; t=s; s=s-next; size=t-size; start=t-start;

10、end=t-end; t-size=p-size; t-start=p-start; t-end=p-end; p-size=size; p-start=start; p-end=end; t=p-next; p=p-next; / end of BF_SortListvoid GetFree() /*生成空闲分区链*/ int size,start,i; L=getpch(LN); /*生成一个表头结点*/ L-next=NULL; L-front=NULL; printf(请输入空闲区数:); scanf(%d,&n); for(i=1;inext; t=L; while(p) if(si

11、ze p-size) p=p-next; t=t-next; if(!p) printf(没有足够大的空闲区分配!分配不成功); else p-size = p-size - size; p-start= p-start + size ; if(p-size=0) t-next = p-next ; p-next-front=t; n-; free(p); printf(分配成功!n); printf(分配后的空闲链表情况如下:n); PrintList(); break; / end of FF_Assignint flag=-1;void NF_Assign(int size)/*循环首次

12、适应算法的分配*/ LN *p,*t; int i=n; p=find-next; t=find; while(p) if(size p-size) p=p-next; t=t-next; if(!p) printf(没有足够大的空闲区分配!分配不成功); else p-size = p-size - size; p-start= p-start + size ; find=p; if(p-size=0) t-next = p-next; p-next-front=t; n-; free(p); printf(分配成功!n); flag=1; printf(分配后的空闲链表情况如下:n); P

13、rint(L); break; if(flag=-1) p=L-next; t=L; while(p!=find) if(size p-size) p=p-next; t=t-next; if(!p) printf(没有足够大的空闲区分配!分配不成功); else p-size = p-size - size; p-start= p-start + size ; find=t; if(p-size=0) t-next = p-next ; p-next-front=t; n-; free(p); printf(分配成功!n); printf(分配后的空闲链表情况如下:); PrintList(

14、L); break; / end of NF_Assignvoid Recover(int start, int end) /*回收*/ LN *p,*t; int size,flag=0; size=end-start; p=L-next; t=p-next; while(p) if(t & p-end=start & t-start=end)/回收区在两个空闲区中间 p-size = p-size + size + t-size; p-end = t-end; p-next=t-next; t-next-front=p; free(t); n-; SortList(L); flag=1;

15、break; else if(p-end = start)/回收区在空闲区下方 flag=1; p-size = p-size + size; p-end = p-end + size ; SortList(L); break; else if( p-start = end)/回收区在空闲区上方 p-size= p-size +size; p-start=start; SortList(L); flag=1; break; p=p-next; if(p) t=p-next; /回收区不与任何一个空闲区相邻 if(flag=0) InsertList(size,start); n+; print

16、f(回收后的空闲链表情况如下:); PrintList(); printf(n按任意键继续); void main() int start,end,size; int m; GetFree(); getch(); system(cls);/*清屏*/ printf(请选择服务类型:n); printf(t1:首次适应算法n); printf(t2:循环首次适应算法n); printf(t3:最佳适应算法n); printf(t4:回收内存n); printf(t0:退出n); printf(t输入您要的选项:); scanf(%d,&m); if(m=2) find=L; while(m) s

17、witch(m) case 1: SortList(); printf(n空闲链表情况:n); PrintList(); printf(请输入进程需要的空闲区大小:); scanf(%d,&size); Assign(size); printf(n按任意键继续); break; case 2: SortList(); printf(n空闲链表情况:n); PrintList(); printf(请输入进程需要的空闲区大小:); scanf(%d,&size); NF_Assign(size);printf(n按任意键继续); break; case 3: BFSortList(); print

18、f(n空闲链表情况:n); PrintList(); printf(请输入进程需要的空闲区大小:); scanf(%d,&size); Assign(size);printf(n按任意键继续); break; case 4: printf(请输入回收区的首地址和中止地址:); scanf(%3d,%3d,&start,&end); Recover(start,end); break; case 0: exit(0); default : printf(ntt输入错误,请重新输入); getch(); getch(); system(cls);/*清屏*/ printf(请选择服务类型:n); printf(t1:首次适应算法n); printf(t2:循环首次适应算法n); printf(t3:最佳适应算法n); printf(t4:回收内存n); printf(t0:退出n); printf(t输入您要的选项:); scanf(%d,&m);

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

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