首页 > 代码库 > 【操作系统】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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。