首页 > 代码库 > 【操作系统】main.cpp

【操作系统】main.cpp

/************************************************************************//* 功能:  模拟实现可变分区存储管理的最佳适应算法的链表类定义实现时间:2014年9月1日9:25:17作者:信管1201 1205020116  肖锋										*//************************************************************************/#include "Link.h"#include <iostream>#include <cstdlib>using namespace std;void showdesk(){	cout << "*******************************************************" << endl;	cout << "**1------初始化                                      **" << endl;	cout << "**2------作业进入内存(最佳适应算法)                **" << endl;	cout << "**3------作业完成(内存回收,最佳适应算法)!        **" << endl;	cout << "**4------显示当前自由分区链                          **" << endl;	cout << "**5------显示当前内存中的作业占据的分区              **" << endl;	cout << "**6------碎片拼接                                    **" << endl;	cout << "**7------退出                                        **" << endl;	cout << "**8------作业进入内存(循环适应算法)                **" << endl;	cout << "**9------作业完成(内存回收,循环适应算法)  !      **" << endl;	cout << "*******************************************************" << endl;}//cout<<"**2------作业进入内存(最佳适应算法)                **"<<endl;void zuoYe(freeLink& fl, busyLink& bl){	char name;	int size;	cout << "输入作业的名字和大小" << endl;	cin >> name >> size;	//找到要修改的节点是第几位	int i = fl.getNeedGai(size);	//求得能添加的空闲区间的起始adress	int oldAdress = fl.getNeedAdress(i);	//添加到busyLink	bl.addNode(size, oldAdress, name);	//设置第i个节点	int newFreeSize = fl.getNeedSize(i) - size;	int newFreeAdress = fl.getNeedAdress(i) + size;	//如果等于还要去除旧的节点	if (fl.getNeedSize(i) == size)	{		fl.popNeed(i);	}	//否则就是修改一下节点,还要要自动插入	fl.setNode(i, newFreeSize, newFreeAdress);}//cout<<"**3------作业完成(内存回收,最佳适应算法)          **"<<endl;void huiShou(freeLink& fl, busyLink& bl){	char name;	cout << "输入要回收的空间名字" << endl;	cin >> name;	//找到这个名字的节点索引	//cout<<"名字"<<endl;	int index = bl.getNeedGai(name);  //!出问题2014年9月3日21:47:25	cout << "index:" << index << endl;	//得到这个节点的size,adress	int gSize = bl.getNeedSize(index);	//cout<<"gSize:"<<gSize<<endl;	int gAdress = bl.getNeedAdress(index);	//cout<<"gAdress:"<<gAdress<<endl;	//从busyLink里面去除这个节点	bl.popNode(name);	//回收到空闲分区链表去	//为空闲分区添加节点	fl.addNode(gSize, gAdress); //2014年9月2日16:42:42有问题2014年9月2日16:56:48解决	//看是否需要合并	fl.pingJie();}//shuiPian();void shuiPian(freeLink& fl, busyLink& bl){	//首先把busy队列的全部adress合并起来	int adress = bl.reAdress();	//然后把free链表的所有空闲节点合并	fl.heBing(adress);}//cout<<"**8------作业进入内存(循环适应算法)                **"<<endl;void zuoYe2(freeLink& fl, busyLink& bl){	char name;	int size;	cout << "输入作业的名字和大小" << endl;	cin >> name >> size;	//把这个节点加入到尾部	//找到要修改的节点是第几位	int i = fl.getNeedGai(size);	//求得能添加的空闲区间的起始adress	int oldAdress = fl.getNeedAdress(i);	//添加到busyLink	bl.addNode(size, oldAdress, name);	//!为free修改这个空白节点	fl.setNeed(i, size);}//循环适应算法回收作业void huiShou2(freeLink& fl, busyLink& bl){	//回收的空闲节点直接添加到尾部节点就可以了	//首先从作业链表中去除这个节点	char name;	cout << "输入要回收的空间名字" << endl;	cin >> name;	//找到这个名字的节点索引	//cout<<"名字"<<endl;	int index = bl.getNeedGai(name);  //出问题2014年9月3日21:47:25	cout << "index:" << index << endl;	//得到这个节点的size,adress	int gSize = bl.getNeedSize(index);	//cout<<"gSize:"<<gSize<<endl;	int gAdress = bl.getNeedAdress(index);	//cout<<"gAdress:"<<gAdress<<endl;	//从busyLink里面去除这个节点	bl.popNode(name);	//然后为空闲分区链表添加节点	//回收到空闲分区链表去	//为空闲分区添加节点	fl.addNode2(gSize, gAdress); //2014年9月2日16:42:42有问题2014年9月2日16:56:48解决	//看是否需要合并	fl.pingJie2();}int main(){	freeLink fl1;	busyLink bl1;	int i = 0;	while (i != 7)	{		showdesk();		cin >> i;		switch (i)		{		case 1:			cout << "初始化完成!" << endl;			break;		case 2:			zuoYe(fl1, bl1);			break;			//case 8:			//  zuoYe2(fl1, bl1);			// break;		case 3:			huiShou(fl1, bl1);			break;		case 4:			//cout<<"**4------显示当前自由分区链                          **"<<endl;			fl1.show();			break;		case 5:			//cout<<"**5------显示当前内存中的作业占据的分区              **"<<endl;			bl1.show();			break;		case 6:			//cout<<"**6------碎片拼接                                    **"<<endl;			shuiPian(fl1, bl1);			break;		case 7:			break;		case 8:			//cout << "**8------作业进入内存(循环适应算法)                **" << endl;			zuoYe2(fl1, bl1);			break;		case 9:			//cout << "**9------作业完成(内存回收,循环适应算法)  !      **" << endl;			huiShou2(fl1, bl1);			break;		default:			cout << "输入错误" << endl;			break;		}	}	system("pause");	return 0;}


 

【操作系统】main.cpp