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

📄 操作系统.cpp

📁 该程序能够实现段页式的地址转化。将段页式地址转为物理地址。
💻 CPP
字号:
#include<iostream>
using namespace std;
struct Node;
typedef struct Node* PNode;
struct Node
{
	int Faddress;
	int Eaddress;
	int Len;
	int Process;
	PNode rlink;
};
typedef struct Node* Plink;

const int length=50;
int len[length];
int addr[length];
PNode pl[length];

static int changdu;//保存链的长度

static int pos;

int* ssortting(int a[])   //顺序排序
{
	int count=0;//记录了数组a的有效值
	int i,j,k,tempt;
	while(a[count]>0)
	  count++;
	changdu=count;
	for(i=0;i<count-1;i++)
	{
		k=i;
		for(j=i+1;j<count;j++)
		{
			if(a[k]>a[j])k=j;
		}
		if(k!=i)
		{
			tempt=a[k];
			a[k]=a[i];
			a[i]=tempt;
		}
	}
	return a;
}

int* lsortting(int a[])    //逆序排序
{
	int count=0;//记录了数组a的有效值
	int i,j,k,tempt;
	while(a[count]>0)
	  count++;
	changdu=count;
	for(i=0;i<count-1;i++)
	{
		k=i;
		for(j=i+1;j<count;j++)
		{
			if(a[k]<a[j])k=j;
		}
		if(k!=i)
		{
			tempt=a[k];
			a[k]=a[i];
			a[i]=tempt;
		}
	}
	return a;
}

Plink createLink(void)
{
	Plink plink;
	plink=(Plink)malloc(sizeof(struct Node));
	plink->Faddress=0;
	plink->Eaddress=0;
	plink->Len=0;
	plink->Process=0;
	plink->rlink=NULL;
	return plink;
}

Plink initLink(Plink plink,int len[])
{
	Plink p,q;
	int count=0;
	q=plink;
	while(len[count]>0)
	{
		p=(Plink)malloc(sizeof(struct Node));
		p->Faddress=pos;
		p->Eaddress=pos+len[count];
		pos=pos+len[count];
		p->Len=len[count];
		p->Process=0;
		p->rlink=NULL;
		q->rlink=p;
		q=p;
        count++;
	}
	return plink;
}

void printLink(PNode pl[])
{
   int i=0;
   cout<<"内存的使用情况和空闲情况为:"<<endl;
   while(pl[i]!=NULL)
   {
     cout<<"Faddress:"<<pl[i]->Faddress<<endl;
     cout<<"Eaddress:"<<pl[i]->Eaddress<<endl;
     cout<<"Len     :"<<pl[i]->Len<<endl;
     cout<<"Process :"<<pl[i]->Process<<endl;
     i++;
	 cout<<endl;
     }
}

void fsortLink(Plink plink,int a[])   //将链表按照某一序列重排序(这里必须创建一条备用链,以备用链来作分配和使用)
{                                     //非常遗憾的是仅仅只有一条链,如对地址赋值,那么原来的链会被破坏掉
    int i,j=0;							          //任何时刻,绝对不能破坏链表,否则会发生致命的错误
	PNode p;
    for(i=0;i<=changdu;i++)
	{
        p=plink->rlink;
		while(p!=NULL)
		{
			if(p->Faddress==a[i])break;
			p=p->rlink;
		}
		pl[j]=p;
		j++;
	}
	pl[j]=NULL;
}

int fDistribute(PNode pl[],int i,int j)
{
	int m=0,n=0,t,w,k,u;
	PNode p;
	while(pl[m]!=NULL)
	{
		if(pl[m]->Len>=j)
		{
			pl[m]->Process=i;
			if(pl[m]->Len>j)
			{
             	p=(Plink)malloc(sizeof(struct Node));
				t=pl[m]->Len-j;
                pl[m]->Len=j;
				w=pl[m]->Eaddress;
				pl[m]->Eaddress=pl[m]->Faddress+j;
				k=pl[m]->Eaddress;
				p->Faddress=k;
				p->Eaddress=w;
				p->Len=t;
				p->Process=0;
				p->rlink=pl[m+1];
			}
			break;
		}
		m++;
	}
	u=0;
	while(pl[u]!=NULL)
	  u++;
	for(n=u+1;n>=m+1;n--)
		pl[n+1]=pl[n];
	pl[m+1]=p;
	if(pl[m]==NULL)
		return -1;
	  else
		  return(pl[m]->Faddress);
}


	














    






	




   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -