计算机操作系统报告

  • 格式:docx
  • 大小:566.20 KB
  • 文档页数:30

淮阴工学院计算机操作系统报告姓名: 学号:班级:学院: 计算机与软件工程学院专业: 计算机科学与技术指导教师:2017 年12 月实验一:存储器的分配与回收算法实现一、实验内容1. 模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。

2. 采用最先适应法、最佳适应法、最坏适应法分配主存空间。

3. 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。

若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。

4. 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。

5. 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。

二、实验要求:1.详细描述实验设计思想、程序结构及各模块设计思路;2.详细描述程序所用数据结构及算法;3.明确给出测试用例和实验结果;4.为增加程序可读性,在程序中进行适当注释说明;5.认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6.实验报告撰写要求结构清晰、描述准确逻辑性强;三、实验过程1.设计思想:运用可变分区的存储管理算法设计主存分配和回收。

一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。

若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。

一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。

设计思路:利用链表对已有作业进行排序,并根据地址判断该作业状态。

2.所用数据库结构:循环链表3.测试用例和结果:初始内存状况:(选择最坏适应法)*******************************************=开始地址= =大小= =结束地址= =状态=*******************************************80 60 140 0*******************************************30 40 70 0*******************************************0 20 20 0*******************************************第一次分配32,第二次分配14,第三次分配23最终结果:********************************************************=开始地址= =大小= =结束地址= =状态=********************************************************44 26 70 0********************************************************0 20 20 0********************************************************135 5 140 0********************************************************已分配区如下 :**************************************************************开始地址大小结束地址状态进程号**************************************************************80 32 112 1 1**************************************************************112 23 135 1 1**************************************************************30 14 44 1 2**************************************************************4.注释已在代码中5.实验总结:存储器的分配与回收算法实现方法,采用最先适应法、最佳适应法、最坏适应法分配主存空间。

当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。

若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。

当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。

本次实验对于队列数据结构有些陌生,发现自己对课程的掌握不太牢固,课后应进行仔细的复习,加深印象。

对某些算法的理解不太透彻,应该巩固完善。

在网络和同学的帮助下最终得以解决。

并使我更加深刻的了解了计算机操作系统中内存分配的执行过程,内存回收的执行过程的方式。

对以后的学习和应用奠定了良好的基础。

6.实验源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream.h>#include<windows.h>//链式结构typedef struct rt{//起始地址int startaddress;//内存区大小int size;//内存区状态int state;struct rt *next;struct rt *last;//已分配区的进程号int thread;}memory;//空闲区链表memory *head=NULL;//已分配区链表memory *top=NULL;//全局进程号int threadnum;//按首地址排序void sort(){//循环指针变量memory *p,*q;int r;int t;//交换记录变量int s;p=head;//冒泡排序for(p=p->next;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if(q->startaddress<p->startaddress){t=p->startaddress;p->startaddress=q->startaddress;q->startaddress=t;s=p->size;p->size=q->size;q->size=s;t=r;s=r->next;r=r->last;//改变指针操作,建立r和s之间的指针关系,“孤立”tr->next=s;if(s!=NULL) s->last=r;//释放tfree(t);}//开始端重叠,或者开始端在当前结点的左边,结束端在当前结点的左右端之间else if(start==left&&left<end&&end<right||start<left&&left<end&&end<right){//内存被局部释放,进程遭破坏,标记状态为结束,进程号清零r->startaddress=end;r->size-=(end-left);r->state=0;r->thread=0;}//结束端重叠,或者结束端在当前结点的右边,开始端在当前结点的左右端之间else if(left<start&&start<right&&end==right||left<start&&start<right&&end>right){//内存被局部释放,进程遭破坏,标记状态为结束,进程号清零r->startaddress=left;r->size=(start-left);r->state=0;}//开始和结束端都被包含,则结点被拆成了两个else if(start>left&&end<right){//内存被局部释放,进程遭破坏,标记状态为结束,进程号清零,前一部分为rr->startaddress=left;r->size=(start-left);r->state=0;r->thread=0;//新建一个结点w=(memory *)malloc(sizeof(memory));//后一部分为ww->state=1;w->startaddress=end;w->size=(right-end);w->state=0;w->thread=0;//将w加入以已配表if(r->next!=NULL) r->next->last=w;w->next=r->next;r->next=w;w->last=r;}}//在空闲区里寻找与需要释放的内存区域有公共区域的结点for(r=head->next;r!=NULL;r=r->next){//记录当前结点的左右端left=r->startaddress;right=r->startaddress+r->size;//s-e l-r 两段无重叠,在结点左边if(end<left){//增加一个空闲区的结点w=(memory *)malloc(sizeof(memory));//结点状态为结束,起始地址为start,大小为sizew->state=0;w->startaddress=start;w->size=size;//改变指针操作cout<<"回收完内存后,已分配区状态如下: \n";if(which==1) sortn();//首次适应法if(which==2) sortn2();//最佳适应法if(which==3) sortn3();//最坏适应法printn();}cout<<"新一轮操作即将开始,请按任意键继续...";//下一组开始}//5秒过后,重新发问else if(type=='n') Sleep(5000);//停止else if(type==EOF)break;}return 0;}7.实验截图:分配块数为3,最坏适应法:分配完成:实验二死锁一、实验题目设计一个n 个并发进程共享m 个系统资源的系统。