資源描述:
《實驗 可分區(qū)內(nèi)存分配首次適應(yīng)算法模擬.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實驗可變分區(qū)內(nèi)存分配首次適應(yīng)算法模擬一、實驗?zāi)康模耗M內(nèi)存分配,了解并掌握動態(tài)分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)、分區(qū)分配算法,深刻理解首次適應(yīng)內(nèi)存分配算法。二、實驗內(nèi)容:#include#include#includeintconsttotal=200;//內(nèi)存總數(shù)intconstbeginaddress=20;//初次分配起始地址structBlock{intaddr;//塊的起始地址intsize;//塊的大小intflag;//塊的分配狀態(tài)1:代表已分配0:代表未分配;}block[100];int
2、count=0;//塊的個數(shù),初值為0,分配一個則加1,減少一個則減1voiddisplay()//顯示所有塊的模塊{inti;printf("目前內(nèi)存情況");printf("--------------------------------------------------------------------------------");printf("塊號起始地址大小分配狀態(tài)");for(i=1;i<=count;i++){printf("%d%d%d",i,block[i].addr,block[i].size);if(block[
3、i].flag==0)printf("未分配");elseprintf("已分配");}printf("--------------------------------------------------------------------------------");}voidjinchengFirstEnter()//首次初始化分配模塊{printf("內(nèi)存總數(shù)為%d第一次分配從%d開始",total,beginaddress);inti=1;intsize;intgeshu;printf("請輸入要初次調(diào)入內(nèi)存的進程的個數(shù):");
4、scanf("%d",&geshu);while(i<=geshu){printf("請輸入第%d個進程的大?。?,i);scanf("%d",&size);count++;if(count==1){block[count].addr=beginaddress;}else{block[count].addr=block[count-1].addr+block[count-1].size;}block[count].size=size;block[count].flag=1;i++;}count++;block[count].addr=block[cou
5、nt-1].addr+block[count-1].size;block[count].flag=0;block[count].size=total-block[count].addr;}voidjinchengEnter(){//自己編寫,采用首次適應(yīng)算法}voidjinchengExit()//作業(yè)調(diào)出內(nèi)存模塊{intkuaihao;printf("請輸入要調(diào)出內(nèi)存的塊號:");scanf("%d",&kuaihao);if(block[kuaihao].flag==0)printf("該塊內(nèi)存是空閑的,無需調(diào)出");else{//將該塊設(shè)為空
6、閑,就是將該塊的flag設(shè)為0,//還考慮了該塊的下一塊如果是空閑的,則將這兩塊合并為一塊,總塊數(shù)減1//如果要考慮該塊的前一塊是空閑,則將這兩塊合并為一塊,總塊數(shù)減1,如何改代碼?block[kuaihao].flag=0;if(block[kuaihao+1].flag==0){block[kuaihao].size=block[kuaihao].size+block[kuaihao+1].size;for(inti=kuaihao+2;i<=count;i++)block[i-1]=block[i];block[count].size=0;blo
7、ck[count].flag=0;block[count].addr=0;count--;}}display();}voidmain(){intflag=0,select;jinchengFirstEnter();display();while(flag==0){printf("請輸入相應(yīng)操作");printf("1.進程進入內(nèi)存");printf("2.進程退出內(nèi)存");printf("3.顯示當前狀態(tài)");printf("4.退出");printf("請選擇:");scanf("%d",&select);switch(sel
8、ect){case1:jinchengEnter();break;case2:jincheng