📄 实验三.c
字号:
#include "stdlib.h"
#include "stdio.h"
#include "iostream.h"
#define GetJcb(type)(type*) malloc(sizeof(type))
#define NULL 0
struct jcb{
char name[10];
char state;
int ntime;//所需时间
int size;
int address;
struct jcb *link;
} *ready =NULL, *p,*q;
typedef struct jcb JCB;
struct subarea{
char name[10];
int address;
int size;
char state;
}sub[10]={{"one",0,10,'N'},{"two",10,10,'N'},{"three",20,20,'N'},
{"four",40,20,'N'},{"fine",60,40,'N'},{"six",100,40,'N'},{"seven",140,80,'N'},
{"eight",220,80,'N'},{"nine",300,160,'N'},{"ten",460,160,'N'}};
int flag=0;
void input();
void check();
void running();
void sort();
void setfree();
//**************************************************************
void main()
{ int i;
JCB *q,*t;
input();
system("cls");
cout<<"***************************************************************************"<<endl;
cout<<" 打印所有分区(分区 长度):"<<endl;
for(i=0;i<10;i++)
{ cout<<sub[i].name<<"\t"<<sub[i].size<<"\t";
}
cout<<endl<<"**********************************************************************"<<endl;
cout<<" 打印所有作业(作业 长度):"<<endl;
q=ready;
while(q!=NULL)
{ t=q;
q=t->link;
cout<<"作业"<<t->name<<"\t"<<t->size<<"\t";
}
cout<<endl<<"**********************************************************************"<<endl;
while(ready!=NULL)
{
p=ready;
ready=p->link;
check();
running();
setfree();
}
printf("操作结束\n");
scanf("%d",i);
}
//***************************************************************
void input()//输入作业
{
int i,num;
system("cls");
printf(" ********************************************* \n");
printf(" \n");
printf(" 请 求 分 页 存 储 管 理 \n");
printf(" \n");
printf(" \n");
printf(" \n");
printf(" ********************************************* \n");
printf("\n请输入要运行的进程数:\n");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("\n请输入进程. %d:\n",i);
p=GetJcb(JCB);
printf("\n进程名为:");
scanf("%s",p->name);
printf("\n进程大小是:");
scanf("%d",&p->size);
printf("\n进程所需时间为:");
scanf("%d",&p->ntime);
printf("\n");
p->link=NULL;
sort();
}
}
//*********************************************************
void sort()//作业先来先到算法排队
{
if(ready==NULL)ready=p;
else
{
q=ready;
while(q->link!=NULL)
q=q->link;
q->link=p;
}
}
//********************************************
void check()//作业分区
{ int i=0;
while(i<=9){
if(((sub[i].size)>=(p->size))&&(sub[i].state=='N'))
{ p->address=sub[i].address;
sub[i].state='Y';
flag=1;
printf("\n作业 [%s] 的分区为 [%s]\n",p->name,sub[i].name);
break;
}
else {
i++;
flag=0;
//break;
}
}
if(flag==0)
printf("\n作业长度过大,内存不足,分区分配出错!\n");
}
//***********************************************
void setfree()//释放分区
{ int i=0;
while(i<=9){
if(sub[i].address==p->address)
{
sub[i].state='N';
break;
}
else i++;
}
printf("分区 [%s] 己释放\n",sub[i].name);
free(p);
}
//*************************************************
void running()//作业运行
{
while(p->ntime!=0)
(p->ntime)--;
printf("作业 [%s] 己完成\n",p->name);
}
//**************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -