码迷,mamicode.com
首页 > 其他好文 > 详细

【操作系统】main.cpp

时间:2014-09-05 11:30:01      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:操作系统      链表   合并   索引   

/************************************************************************/
/* 功能:  模拟实现可变分区存储管理的最佳适应算法的链表类定义实现
时间: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

标签:操作系统      链表   合并   索引   

原文地址:http://blog.csdn.net/cutter_point/article/details/39077093

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!