操作系统(进程调度)实验报告(2)

2019-01-12 19:14

实验二:循环首次适应法

(一)需求分析

该算法是首次适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。

(二)概要设计

循环首次适应主要由以下几个函数构成:

分配函数feipei()、释放函数shifang()、调整的函数tiaozheng()、打印输出函数print()、循环首次适应函数xunhuan()。

其中fenpei函数检查空闲区说明表是否有满足要求的空闲区;shifang函数用于;tiaozheng函数使空闲区按始地址从小到大排列,空表目放在最后面;Print函数用于输出打印。

(三)详细设计

1、设计结构体如下

struct area

{ int startaddr; int size; int state;

}freeN]={{10,30,1},{50,70,1},{150,90,1},{300,200,0},{630,20,1}};

表示空白的内存区,int startaddr表示首地址,int size;表示大小,int state;表示状态(空白或被占用)。

2、fenpei()函数:检查空闲区说明表是否有满足要求的空闲区,从上次找到的空闲去的下一个空闲分区开始找。有则为作业分配内存,没有则返回-1。

3、shifang()函数:从键盘输入释放区的开始地址及大小,从第一个空闲区开始找是否分别有与高地址、低地址、高地地址都相邻。有则合并相邻区域,否则自己单独成为一个空白区

4、tiaozheng()函数:利用for循环对空闲区表中的空闲区调整。 5、Printf()函数:输出打印数据。

6、xunhuan()函数:在循环首次函数中获取作业所需内存的大小,调用fenpei()函数为作业分配空间,start为返回的始地址。非配成功则打印空白区。调用shifang()主存回收函数。

(四)测试结果

(五)附录

#include \#define N 5 int start;

struct area

{

int startaddr;/*空闲区始址*/ int size;/*空闲区大小*/

int state;/*空闲区状态:0为空表目,1为可用空闲块*/

}free[N]={{20,20,1},{80,50,1},{150,30,1},{300,30,0},{600,10,1}}; main() {

xunhuan(); }

void xunhuan() {

int zone,i=0,j; char end;

printf(\ while((end=getchar())=='y') {

printf(\

tiaozheng(); /*对空闲区表中的空闲区调整的函数*/ print(); /*打印空闲区表的初始状态*/ printf(\ scanf(\输入作业的申请量*/ if(i==N-1) {

i=feipei(zone,i); if(i==-1)i=0; }

else if(i

i=feipei(zone,i);

/*调用alloc2()函数为作业分配空间,start为返回的始地址*/

if(i==-1) /*分配不成功时,返回-1*/

printf(\ else {

tiaozheng();

printf(\ print(); /*打印空闲区表*/

printf(\ printf(\ printf(\ printf(\ }


操作系统(进程调度)实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年度《法律法规和其他要求清单》 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: