【操作系统】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;
}
时间: 2024-10-21 14:46:45

【操作系统】main.cpp的相关文章

QT Demo 之 calqlatr(1) main.cpp

其实从最开始要学习和分析Qt的Demo时选定的就是calqlatr工程,但是打开源码一看,貌似难度高了点,这才有了上面的几篇基本控件的分析.从这一章开始,我要拿下calqlatr这个Demo项目了. main.cpp main.cpp中的代码非常简单: #include "../../shared/shared.h" DECLARATIVE_EXAMPLE_MAIN(demos/calqlatr/calqlatr) DECLARATIVE_EXAMPLE_MAIN(NAME)是一个函数

电脑从开机加电到操作系统main函数之前执行的过程

总的来说在操作系统加电启动之后到main函数执行之前操作系统经历了以下3个大步骤 1.启动BIOS.这个时候位于实模式下,加载中断向量和中断服务程序 2.加载操作系统内核并为保护模式做准备.这个时候操作系统一共加载了3部分代码:引导程序bootsect,内核代码setup,内核代码system模块 3.从实模式转换为32位保护模式.这个过程要做大量重建工作,并且持续工作到操作系统main函数的执行过程.细说的话,主要包括打开32位寻址空间,打开保护模式,建立保护模式下的中断相应机制与保护模式配套

C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件

C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件主要有两种思路: 1.在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击"头文件"-"添加"-"现有项",选中修改后缀名后的.h文件-"添加",将带引用的文件添加到IDE中. 添加到"头文件"的作用主要是不要使头文件的项属性为"C/C++ 标头",而不

main.cpp

1 /*main.cpp 2 * 3 *The starting point of the network simulator 4 *-Include all network header files 5 *-initilize the network 6 *-initialize the traffic manager and set it to run 7 * 8 * 9 */ 10 #include <sys/time.h> 11 12 #include <string> 1

cocos2d-x main.cpp源码详析 v2.26

// create the application instance AppDelegate app; CCEGLView* eglView = CCEGLView::sharedOpenGLView(); eglView->setViewName("Fei"); eglView->setFrameSize(480, 320); return CCApplication::sharedApplication()->run(); 一.静态类成员函数 CCEGLView:

1.02 main.cpp研究

// create the application instance AppDelegate app; CCEGLView* eglView = CCEGLView::sharedOpenGLView(); eglView->setViewName("Fei"); eglView->setFrameSize(480, 320); return CCApplication::sharedApplication()->run(); 一.静态类成员函数 CCEGLView:

Cpp调用Python3,使用matplotlib画(二维)图----1.配置(Clion,mingW64, python, matplotlib)

To my knowledge so far, Cpp画图是真滴捉急, 那就调用python帮帮忙吧. 百度了好久,试了好几次,终于走完了配置的过程.我要记录一下. 1.0 配置:(操作系统)64位Win7, (Cpp的IDE是)Clion. 1.1 安装Clion 官网下载就可以了,地址 https://www.jetbrains.com/clion/ 1.2 安装,配置mingW64 1.2.1:Clion需要我们安装Toolchain,我用的是mingW64(因为我用的是64位系统),附上

如何在安卓环境下自动编译所有cpp文件

正常情况下,需要在Android.mk文件下面一个一个手动添加cpp文件,如果文件较多,这样就太麻烦了. 解决办法如下: 把Android.mk文件里面的这段代码: LOCAL_SRC_FILES := hellocpp/main.cpp ../../Classes/AppDelegate.cpp 改为: FILE_LIST := hellocpp/main.cpp FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp) LOCAL_

Makefile一个cpp文件依赖于多个header文件的陷阱

我一直以为,如果一个A.cpp文件中有多少条 #include "xxx.h"指令,在写Makefile的时候A.obj的依赖项除了A.cpp之外,就是A.cpp之内所有的 xxx.h 比如,如果A.cpp中有 #include "A.h" #include "B.h" #include "C.h",那么在Makefile中就有:A.obj: A.cpp A.h B.h C.h 但是 下面的例子是说明了,上面的想法是错误的 先