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

2019-01-12 19:14

for(j=1;j<100000;j++);/*延迟时间*/ shifang(); /*主存回收函数*/

tiaozheng(); /*调整空闲区说明表*/ print(); /*打印空闲区表函数*/

printf(\ end=getchar();/*是否有作业等待?有(Y)无(N)*/ } }

int feipei(int zone,int s) /*zone为作业申请量*/ {

int i,tag=0; /*tag为检查是否有满足作业需要的空闲区的标志*/

for(i=s;i

if(free[i].state==1&&free[i].size>zone) {

free[i].startaddr=free[i].startaddr+zone; free[i].size=free[i].size-zone;

tag=1; /*有满足条件的空闲区时,tag置1*/ start=free[i].startaddr-zone; return i; } else

if(free[i].state==1&&free[i].size==zone) {

free[i].state=0;

tag=1; /*有满足条件的空闲区时,tag置1*/

start=free[i].startaddr; /*返回为作业分配的主存地址*/ return i; } if(tag==0)

return -1; /*没有满足条件的空闲区,分配不成功,返回-1*/ }

void shifang() {

int s,l,tag1=0,tag2=0,tag3=0,i,j;

printf(\

scanf(\ /*输入释放区的开始地址*/ printf(\

scanf(\ /*输入释放区的大小*/

for(i=0;i

{

if(free[i].startaddr==s+l&&free[i].state==1) {

l=l+free[i].size;

tag1=1; /*有与释放区高地址邻接的空闲区,tag1置1*/ for(j=0;j

if(free[j].startaddr+free[j].size==s&&free[j].state==1) {

free[i].state=0;

free[j].size=free[j].size+l;

tag2=1;/*有与释放区上下都邻接的空闲区,tag2置1*/ break; }

if(tag2==0) /*无与释放区高低地址邻接的空闲区*/ {

free[i].startaddr=s; free[i].size=l; break; } } }

if(tag1==0) /*无与释放区高地址邻接的空闲区,并检查是否低地址有邻接空闲区*/

{

for(i=0;i

if(free[i].startaddr+free[i].size==s&&free[i].state==1) {

free[i].size=free[i].size+l;

tag3=1; /*有与释放区低地址邻接的空闲区*/ break; }

if(tag3==0) /*无与释放区低地址邻接的空闲区*/ for(j=0;j

if(free[j].state==0)/*找一个空表目,将释放区放入表中*/ {

free[j].startaddr=s; free[j].size=l; free[j].state=1; break; } } }

/*定义对空闲区表中的空闲区调整的函数tiaozheng(),

使空闲区按始地址从小到大排列,空表目放在最后面*/ void tiaozheng() {

int i,j;

struct area middata;

for(i=0;i

if(free[j].startaddr>free[j+1].startaddr) {

middata.startaddr=free[j].startaddr;middata.size=free[j].size;

middata.state=free[j].state;free[j].startaddr=free[j+1].startaddr;

free[j].size=free[j+1].size;free[j].state=free[j+1].state; free[j+1].startaddr=middata.startaddr; free[j+1].size=middata.size;

free[j+1].state=middata.state; }

for(i=0;i

if(free[j].state==0&&free[j+1].state==1) {

middata.startaddr=free[j].startaddr;middata.size=free[j].size; middata.state=free[j].state; free[j].startaddr=free[j+1].startaddr;

free[j].size=free[j+1].size; free[j].state=free[j+1].state;

free[j+1].startaddr=middata.startaddr;free[j+1].size=middata.size; free[j+1].state=middata.state; } }

/*定义打印空闲区说明表函数:print()*/ void print() {

int i; printf(\

|---------------------------------------------------------------|\\n\ printf(\| start size state |\\n\ printf(\

|---------------------------------------------------------------|\\n\ for(i=0;i

printf(\| = = = |\\n\

free[i].startaddr,free[i].size,free[i].state); printf(\

|---------------------------------------------------------------|\\n\ } }


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

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

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

马上注册会员

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