日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OS实验-模拟实现首次/最佳/最坏适应算法的内存块分配和回收

發(fā)布時(shí)間:2023/12/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OS实验-模拟实现首次/最佳/最坏适应算法的内存块分配和回收 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

編寫(xiě)C語(yǔ)言程序,模擬實(shí)現(xiàn)首次/最佳/最壞適應(yīng)算法的內(nèi)存塊分配和回收,要求每次分配和回收后顯示出空閑分區(qū)和已分配分區(qū)的情況。

假設(shè)初始狀態(tài)下,可用的內(nèi)存空間為640KB。 #include<bits/stdc++.h> #define ll long long using namespace std;const ll maxn=1e18; const ll minn=-1e18; const ll mod=1000000007; const ll MAX=100005; bool cmp(ll a,ll b){return a>b;} /*擬實(shí)現(xiàn)首次/最佳/最壞適應(yīng)算法的內(nèi)存塊分配和回收,要求每次分配和回收后顯示出空閑分區(qū)和已分配分區(qū)的情況。 假設(shè)初始狀態(tài)下,可用的內(nèi)存空間為640KB。*/int n; //初始空間 string algin; int pos=1; //記錄當(dāng)前內(nèi)存塊的個(gè)數(shù);struct node{int left,right;int vis; //0表示未使用內(nèi)存;1表示已經(jīng)使用了內(nèi)存空間;int work;bool operator < (const node &t) const{return left<t.left;} }node[1010];void opin(int nu,int nulen) //插入 {string FIR="FIR";string BST="BST";string WST="WST";sort(node+1,node+pos+1);if(algin==FIR) //首次{for(int i=1 ; i<=pos ; i++){if(node[i].right-node[i].left>=nulen&&node[i].vis==0){pos++;node[pos].left=node[i].left;node[pos].right=node[pos].left+nulen;node[pos].vis=1;node[pos].work=nu;node[i].left=node[pos].right;cout<<nu<<"的內(nèi)存分配成功!"<<endl;return ;}}cout<<endl<<nu<<"的內(nèi)存分配失敗!"<<endl;}else if(algin==BST) //最優(yōu){vector<int> temp;for(int i=1 ; i<=pos ; i++){if(node[i].right-node[i].left==nulen&&node[i].vis==0) //剛好的時(shí)候一定是最優(yōu);{node[i].vis=1;node[i].work=nu;cout<<nu<<"的內(nèi)存分配成功!"<<endl;return ;}else if(node[i].vis==0){temp.push_back(i);}}int len=temp.size();sort(temp.begin(),temp.end()); //升序;for(int i=0 ; i<len ; i++){if(node[temp[i]].right-node[temp[i]].left>nulen){pos++;node[pos].left=node[temp[i]].left;node[pos].right=node[pos].left+nulen;node[pos].vis=1;node[pos].work=nu;node[temp[i]].left=node[pos].right;cout<<nu<<"的內(nèi)存分配成功!"<<endl;return ;}}cout<<endl<<nu<<"的內(nèi)存分配失敗!"<<endl;}else if(algin==WST) //最壞{vector<int> temp;for(int i=1 ; i<=pos ; i++){if(node[i].vis==0){temp.push_back(i);}}int len=temp.size();sort(temp.begin(),temp.end(),cmp); //降序;for(int i=0 ; i<len ; i++){if(node[temp[i]].right-node[temp[i]].left>=nulen){if(node[temp[i]].right-node[temp[i]].left==nulen) //相等{node[temp[i]].vis=1;node[temp[i]].work=nu;cout<<nu<<"的內(nèi)存分配成功!"<<endl;return ;}else //大于{pos++;node[pos].left=node[temp[i]].left;node[pos].right=node[pos].left+nulen;node[pos].vis=1;node[pos].work=nu;node[temp[i]].left=node[pos].right;cout<<nu<<"的內(nèi)存分配成功!"<<endl;return ;}}}cout<<endl<<nu<<"的內(nèi)存分配失敗!"<<endl;} }void opde(int nu) //回收 {sort(node+1,node+pos+1);for(int i=1 ; i<=pos ; i++){if(node[i].work==nu){node[i].vis=0;node[i].work=0;int temp=0;for(int j=i-1 ; j>=1 ; j--) //從后往前找{if(node[j].vis!=0)break;else{node[i].left=node[j].left;node[j].left=n;node[j].right=n;temp++;}}for(int j=i+1 ; j<=pos ; j++) //從前往后找{if(node[j].vis!=0)break;else{node[i].right=node[j].right;node[j].left=n+1;node[j].right=n+1;temp++;}}sort(node,node+pos);pos-=temp;}} }/* void printtest() {sort(node+1,node+pos+1);for(int i=1 ; i<=pos ; i++){cout<<i<<" : "<<node[i].work<<" "<<node[i].left<<" "<<node[i].right<<" "<<node[i].right-node[i].left<<" "<<node[i].vis<<endl;} } */void print() {sort(node+1,node+pos+1);cout<<endl;for(int i=1 ; i<=pos ; i++){cout<<"|<-";for(int j=0 ; j<(node[i].right-node[i].left)/20-5; j++)cout<<" ";if(node[i].vis==0)cout<<"None";elsecout<<"work"<<node[i].work;for(int j=0 ; j<(node[i].right-node[i].left)/20-4; j++)cout<<" ";if(i==pos)cout<<"->|"<<endl;elsecout<<"->";}//底線for(int i=0 ; i<(node[pos].right-node[1].left)/10 ; i++)cout<<"-";cout<<endl;cout<<node[1].left;for(int i=1 ; i<=pos ; i++){for(int j=0 ; j<(node[i].right-node[i].left)/10-3 ; j++)cout<<" ";cout<<node[i].right;}cout<<endl;cout<<endl; }void fi(int n) //初始化 {node[0].left=0;node[0].right=0;node[0].vis=0;node[0].work=0;node[pos].left=node[pos-1].right;node[pos].right=n;node[pos].vis=0;node[pos].work=0;print(); } void init() {cout<<"請(qǐng)輸入初始系統(tǒng)空間大小:"<<endl;cin>>n;fi(n);int t;while(1){cout<<"請(qǐng)輸入操作:1-插入 2-刪除 0-退出"<<endl;cin>>t;if(t==0)break;else if(t==1){cout<<"請(qǐng)輸入插入所適應(yīng)算法:FIR-首次 BST-最佳 WST-最壞:"<<endl;cin>>algin;cout<<"請(qǐng)輸入需要分配的作業(yè)號(hào)和大小"<<endl;int nu,nulen;cin>>nu>>nulen;opin(nu,nulen);//printtest();print();}else if(t==2){cout<<"請(qǐng)輸入需要回收的作業(yè)號(hào)"<<endl;int nu;cin>>nu;opde(nu);print();//printtest();}}} int main() {init();return 0; }/* 650 1 FIR 1 100 1 FIR 2 150 1 FIR 3 200 2 2 1 BST 4 100*/

總結(jié)

以上是生活随笔為你收集整理的OS实验-模拟实现首次/最佳/最坏适应算法的内存块分配和回收的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。