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

📄 main.cpp

📁 操作系统课程设计的段式管理的实现程序。包含了分区说明表的建立
💻 CPP
字号:
#include<vector>
#include<functional>
#include<algorithm>
#include<time.h>
#include<iomanip>
#include<conio.h>
#include"job.h"
using namespace std;
void PrintBlock()//打印内存分配表
{
	cout<<"内存分配表:"<<endl;
	cout<<setw(10)<<"起始地址"<<setw(20)<<"大小"<<setw(20)<<"状态"<<endl;
	for_each(btable.begin(),btable.end(),mem_fun_ref(BlockItem::output));
	cout<<endl;
}

void PrintFree()//打印空闲分区表
{
	cout<<"空闲分区表:"<<endl;
	cout<<setw(10)<<"起始地址"<<setw(20)<<"大小"<<endl;
	for_each(ftable.begin(),ftable.end(),mem_fun_ref(FreeItem::output));
	cout<<endl;
}

void PrintJobDispute(JobList& jobs)//打印作业分配表
{
	cout<<"作业分配表:"<<endl;
	cout<<setw(10)<<"作业PID"<<setw(20)<<"装入地址"<<setw(20)<<"作业长度"<<endl;
	for_each(jobs.begin(),jobs.end(),mem_fun_ref(Job::output));
	cout<<endl;
}

void randFree(Job& job)//随机释放作业内存
{
	if(job.startAddress!=-1&&1==randInt(1,100)%2)
		job.Free();
}

JobList::iterator FindJob(JobList& jobs,PID& jpid)
{
	JobList::iterator jit=jobs.begin();
	while(jit!=jobs.end())
		if(jit->pid==jpid)
			return jit;
		else jit++;
	return jit;
}

void AddressTrans(JobList& jobs)
{
	cout<<"输入(作业号   逻辑地址):";
	PID jpid;
	int laddr;
	cin>>jpid>>laddr;
	if(cin.fail())
		return;
	JobList::iterator jit=FindJob(jobs,jpid);
	if(jit==jobs.end())	{
		cout<<"不存在该作业"<<endl;
		return;
	}
	if(jit->startAddress==-1)
		cout<<"该作业没有分配内存"<<endl;
	else if(jit->length<laddr)
		cout<<"地址越界"<<endl;
	else
		cout<<"物理地址为:"<<jit->startAddress+laddr<<endl;
}

void main()
{

	srand(time(NULL));
	JobList jobs;
	cout<<"输入物理内存容量:";
	int memSize;
	cin>>memSize;
	ftable.push_back(FreeItem(0,memSize));
	cout<<"输入作业个数:";
	int jobNum;
	cin>>jobNum;
	cout<<"输入作业最大长度:";
	cin>>JobSize;
	jobs.resize(jobNum);
	cout<<"随机生成作业并分配内存......"<<endl;
	for_each(jobs.begin(),jobs.end(),mem_fun_ref(Job::initJob));
	for_each(jobs.begin(),jobs.end(),mem_fun_ref(Job::Alloc));
	PrintJobDispute(jobs);
	PrintBlock();
	PrintFree();
	cout<<"逻辑地址到物理地址的转换....."<<endl;
	while(!cin.fail())
	{
		AddressTrans(jobs);
		cout<<endl;
	}
}

⌨️ 快捷键说明

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