【作業系統】main.cpp

來源:互聯網
上載者:User

標籤:作業系統   類   鏈表   合并   索引   

/************************************************************************//* 功能:  類比實現可變分區儲存管理的最佳適應演算法的鏈表類定義實現時間: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);//求得能添加的空閑區間的起始adressint oldAdress = fl.getNeedAdress(i);//添加到busyLinkbl.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:25cout << "index:" << index << endl;//得到這個節點的size,adressint 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);//求得能添加的空閑區間的起始adressint oldAdress = fl.getNeedAdress(i);//添加到busyLinkbl.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:25cout << "index:" << index << endl;//得到這個節點的size,adressint 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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.