⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 实验三.c

📁 很全很好有关操作系统B的Storage Management District Allocation Algorithm
💻 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 + -