《天津理工大学操作系统实验(共8页).doc》由会员分享,可在线阅读,更多相关《天津理工大学操作系统实验(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验报告学院(系)名称:计算机与通信工程学院姓名学号专业计算机科学与技术(中加)班级2011级1班实验项目实验二:存储器的分配与回收算法实现课程名称操作系统课程代码实验时间2013-12-06 1-2节2013-12-10 7-8节2013-12-13 1-2节 2013-12-17 7-8节实验地点主校区7-216、219主校区7-216、215主校区7-216、219主校区7-220、219批改意见成绩教师签字: 实验内容:1 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。2 采用最先适应法、最佳适应法、最
2、坏适应法分配主存空间。3 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。4 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。5 设计的模拟系统中,进程数不小于5,进程调度方式可以采用实验一中的任何一种。6 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。实验要求:1 详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适
3、当注释说明;5 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;7 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】#include int work102; int idle102; int free103; int num=0,b=1,d,ch1,ch2; void init() idle00=1;idle01=100; free00=0;free11=0;free12=0; work00=0;work01=0; for(int i=1;i =9;i+) idle
4、i0=0;idlei1=0; freei0=0;freei1=0;freei2=0; worki0=0;worki1=0; void jishu() for(int i=0;i 9;i+) if(idlei1!=0) num+; void jishu1() for(int i=0;i 9;i+) if(worki1!=0) b+; void zuixian() jishu(); for(int i=0;i num;i+) for(int j=i;j idlej+10) int temp=idlej0; idlej0=idlej+10; idlej+10=temp; temp=idlej1; i
5、dlej1=idlej+11; idlej+11=temp; void zuijia() num=0; jishu(); for(int i=0;i num;i+) for(int j=i;j idlej+11) int temp=idlej0; idlej0=idlej+10; idlej+10=temp; temp=idlej1; idlej1=idlej+11; idlej+11=temp; void zuihuai() num=0; jishu(); for(int i=0;i num;i+) for(int j=i;j num-i-1;j+) if(idlej1 idlej+11)
6、int temp=idlej0; idlej0=idlej+10; idlej+10=temp; temp=idlej1; idlej1=idlej+11; idlej+11=temp; void huishou(int name) num=0; b=0; jishu(); jishu1(); int c=-1; for(int k=0;k =b;k+) if(freek0=name) c=k; break; if(c=-1)cout 要回收的作业不存在! endl; else for(int i=0;i num;i+) for(int j=i;j idlej+10) int temp=idl
7、ej0; idlej0=idlej+10; idlej+10=temp; temp=idlej1; idlej1=idlej+11; idlej+11=temp; for(int q=0;q num;q+) if(freec1 =q;j-) idlej+10=idlej0; idlej+11=idlej1; idlej0=freec1; idlej1=freec2; b+; if(idlej+10=idlej0+idlej1) idlej1=idlej1+idlej+11; for(int m=j+1;m =num;m+) idlem0=idlem+10; idlem1=idlem+11; i
8、dlem0=0; idlem1=0; b-; if(idlej-10=idlej0) idlej-11=idlej-11+idlej1; for(int n=j;j =num;j+) idlen0=idlen+10; idlen1=idlen+11; idlen0=0; idlen1=0; b-; break; if(ch2=1)zuixian(); if(ch2=2)zuijia(); if(ch2=3)zuihuai(); for(int p=c;c b-1;c+) freec0=freec+10; freec1=freec+11; freec2=freec+12; workc0=work
9、c+10; workc1=workc+11; cout该进程已被成功回收!endl; void fp() int tag=0; num=0; b=0; jishu(); jishu1(); for(int j=0;j num;j+) if(workb1 idlej1) freeb0=workb0; freeb1=idlej0; freeb2=workb1; idlej0=idlej0+workb1; idlej1=idlej1-workb1; tag=1; break; else if(workb1=idlej1) freeb0=workb0; freeb1=idlej0; freeb2=wo
10、rkb1; tag=1; for(int i=j;i =num-1;i+) idlei0=idlei+10; idlei1=idlei+11; break; else tag=0; if(tag=0)cout 作业过大没有足够存储空间! endl; void print() num=0; b=1; jishu(); jishu1(); cout 已分配表为: endl; for(int i=0;i =b;i+) if(freei2!=0) cout 作业名: freei0 内存起始地址: freei1 占用内存空间: freei2 endl; cout endl; cout 空闲区表为: en
11、dl; for(int j=0;j num;j+) if(idlej1!=0) cout 起始地址: idlej0 连续内存空间: idlej1 endl; cout endl; void main() init(); int n; cout 1.分配空间;2.回收空间; ch1; cout endl; cout 1.最先适应法;2.最佳适应法;3.最坏适应法; ch2; cout endl; if(ch1=1) cout workb0workb1; cout endl; if(ch2=1) zuixian(); fp(); else if(ch2=2) zuijia(); fp(); else if(ch2=3) zuihuai(); fp(); print(); cout 输入要回收的作业名: n; huishou(n); 心得体会我们可以采用最先适应法,最佳适应法,最坏适应法来分配主存空间。当一个作业要求装入主存时,必须从空闲区表中找出一个足够大的空闲区。当一个作业撤离时,归还的区域如果与其他空闲区相邻,则合并成一个较大的空闲区,登在空闲区表中。专心-专注-专业
限制150内