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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统实验二存储管理动态分区分配及回收算法.docx

1、操作系统实验二存储管理动态分区分配及回收算法操作系统实验二存储管理动态分区分配及回收算法实验二 存储管理动态分区分配及回收算法一、 实验目的通过分区管理实验,了解操作系统的基本概念,理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。通过课程设计,我们可以进一步理解在计算机系统上运行的其它各类操作系统,并懂得在操作系统的支持下建立自己的应用系统。二、 实验要求本实验要求用一种结构化高级语言构造分区描述器,编制动态分区分配算法和回收算法模拟程序,并掌握分配算法的特点,提高编程技巧和对算法的理解和掌握。三、 实验过程1 准备 (一)主程序 1、

2、定义分区描述器node,包括 3个元素: (1)adr分区首地址 (2)size分区大小 (3)next指向下一个分区的指针 2、定义 3个指向node结构的指针变量: (1)head1空闲区队列首指针 (2)back1指向释放区node结构的指针 (3)assign指向申请的内存分区node结构的指针 3、定义 1个整形变量: free用户申请存储区的大小(由用户键入) (二)过程 1、定义check过程,用于检查指定的释放块(由用户键入)的合法性 2、定义assignment1过程,实现First Fit Algorithm 3、定义assignment2过程,实现Best Fit Alg

3、orithm 4、定义acceptment1过程,实现First Fit Algorithm的回收算法 5、定义acceptment2过程,实现Best Fit Algorithm的回收算法 6、定义print过程,打印空闲区队列 (三)执行 程序首先申请一整块空闲区,其首址为0,大小为32767;然后,提示用户使用哪种分配算法,再提示是分配还是回收;分配时要求输入申请区的大小,回收时要求输入释放区的首址和大小。 (四)输出 要求每执行一次,输出一次空闲区队列情况,内容包括: 编号 首址 终址 大小 2.主要流程和源代码实验二源代码#include#include#include#define

4、 MAX_SIZE 32767typedef struct node int id; int adr; int size; struct node *next; Node;Node *head1,*head2,*back1,*back2,*assign;int request; int check(int add,int siz,char c) Node *p,*head;int check=1;if(add0|siznext;while(p!=NULL)&check) if(addadr)&(add+sizp-adr)|(add=p-adr)&(addadr+p-size) check=0;

5、 else p=p-next;if(check=0) printf(t输入释放区地址或大小有错误!n); return check; void init() Node *p;head1=(Node*)malloc(sizeof(Node);head2=(Node*)malloc(sizeof(Node);p=(Node*)malloc(sizeof(Node);head1-next=p;head2-next=p;p-size=MAX_SIZE;p-adr=0;p-next=NULL;p-id=0;Node* assignment1(int num,int req) Node *before,*

6、after,*ass;ass=(Node*)malloc(sizeof(Node);before=head1;after=head1-next;ass-id=num;ass-size=req;while(after-sizenext;after=after-next;if(after=NULL)ass-adr=-1; elseif(after-size=req) before-next=after-next;ass-adr=after-adr;else after-size-=req;ass-adr=after-adr;after-adr+=req;return ass;void accept

7、ment1(int address,int siz,int rd) Node *before,*after;int insert=0;back1=(Node*)malloc(sizeof(Node);before=head1;after=head1-next;back1-adr=address;back1-size=siz;back1-id=rd;back1-next=NULL;while(!insert&after)/将要被回收的分区插入空闲区(按首址大小从小到大插入)if(after=NULL)|(back1-adradr)&(back1-adr=before-adr)before-nex

8、t=back1;back1-next=after;insert=1;elsebefore=before-next;after=after-next;if(insert)if(back1-adr=before-adr+before-size)/和前边分区合并before-size+=back1-size;before-next=back1-next;free(back1);else if(after&back1-adr+back1-size=after-adr)/和后边分区合并back1-size+=after-size;back1-next=after-next;back1-id=after-

9、id;free(after);after=back1;printf(t首先分配算法回收内存成功!n);elseprintf(t首先分配算法回收内存失败!n);Node* assignment2(int num,int req) Node *before,*after,*ass,*q;ass=(Node*)malloc(sizeof(Node);q=(Node*)malloc(sizeof(Node);before=head2;after=head2-next;ass-id=num;ass-size=req;while(after-sizenext;after=after-next;if(aft

10、er=NULL)ass-adr=-1; elseif(after-size=req) before-next=after-next;ass-adr=after-adr;else q=after;before-next=after-next;ass-adr=q-adr;q-size-=req;q-adr+=req;before=head2;after=head2-next;if(after=NULL)before-next=q;q-next=NULL;elsewhile(after-size)size)before=before-next;after=after-next;before-next

11、=q;q-next=after;return (ass);void acceptment2(int address,int siz,int rd) Node *before,*after;int insert=0; back2=(Node*)malloc(sizeof(Node);before=head2;after=head2-next;back2-adr=address;back2-size=siz;back2-id=rd;back2-next=NULL;if(head2-next=NULL)/空闲队列为空head2-next=back2;head2-size=back2-size;els

12、e/空闲队列不为空while(after)if(back2-adr=after-adr+after-size)/和前边空闲分区合并before-next=after-next;after-size+=back2-size;back2=after;elsebefore=before-next;after=after-next;before=head2;after=head2-next;while(after)if(after-adr=back2-adr+back2-size)/和后边空闲区合并before-next=after-next;back2-size+=after-size;elsebe

13、fore=before-next;after=after-next;before=head2;after=head2-next;while(!insert)/将被回收的块插入到恰当的位置(按分区大小从小到大)if(after=NULL|(after-sizeback2-size)&(before-sizesize) before-next=back2; back2-next=after; insert=1;break; else before=before-next; after=after-next; if(insert)printf(t最佳适应算法回收内存成功!n);elseprintf(

14、t最佳适应算法回收内存失败!n);void print(char choice)/输出空闲区队列信息Node *p;if(choice=f|choice=F)p=head1-next;elsep=head2-next;if(p)printf(n空闲区队列的情况为:n);printf(t编号t首址t终址t大小n);while(p)printf(t%dt%dt%dt%dn,p-id,p-adr,p-adr+p-size-1,p-size);p=p-next; void menu()/菜单及主要过程char chose;int ch,num,r,add,rd; while(1)system(cls)

15、;printf(选择最先适应算法请输入F,选择最佳适应算法请输入B,退出程序请输入Enn);printf(请输入你的选择:);scanf(%c,&chose);if(chose=e|chose=E)exit(0);elsesystem(cls);while(1)if(chose=f|chose=F)printf(最先适应算法(First-Fit)模拟:n);if(chose=b|chose=B)printf(最佳适应算法(Best-Fit)模拟:n);printf(1.分配内存,2.回收内存,3.查看内存,4.返回nn);printf(请输入你的选择:);scanf(%d,&ch);fflus

16、h(stdin);switch(ch)case 1:printf(输入申请的分区大小:);scanf(%d,&r);if(chose=f|chose=F)assign=assignment1(num,r);elseassign=assignment2(num,r);if(assign-adr=-1)printf(分配内存失败!n);else printf(分配成功!分配的内存的首址为:%dn,assign-adr);break;case 2:printf(输入释放的内存的首址:);scanf(%d,&add);printf(输入释放的内存的大小:);scanf(%d,&r);printf(输入

17、释放的内存的编号:);scanf(%d,&rd);if(check(add,r,chose)if(chose=f|chose=F)acceptment1(add,r,rd);elseacceptment2(add,r,rd);break;case 3:print(chose);break;case 4:menu();break; void main()/主函数 init();menu(); 四、 实验结果五、 实验总结通过这次课程设计我练习了用C语言写系统软件,对操作系统中可变分区存储管理有了更深刻的了解。在写程序的时候也遇到了一些困难。比如在设计数据结构时特别犹豫,总想找一个很合适的。但是,后来才知道,关键要多尝试,而空想是没有用的。最后我证实了自己的设计的合理性。还有为了使程序更健壮,在网上下载了几个代码,进行调试,运行、查看结果。看懂代码和结果后,这次实验也算是成功的一大半了。总之这次实验还是让我收获很大,让我在书本上的知识能够运用到实际当中。这种学以致用的感觉才是最好的。

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

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