資源描述:
《實驗可變分區(qū)內(nèi)存分配首次適應(yīng)算法模擬》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
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#includeintconstbeginaddress=20;//初次分配起始地址structBlockintconsttotal=200;〃內(nèi)存總數(shù)intaddr;〃塊的起始地址intsize;//塊的大小intflag;〃塊的分配狀態(tài)1:代表已分配0:代表未分配;}block!100J;intc
2、ount=0;〃塊的個數(shù),初值為0,分配一個則加1,減少一,個則減1voiddisplayO〃顯示所有塊的模塊{inti;printf("目前內(nèi)存情況”);printf(Mu);printf(”塊號起始地址大小分配狀態(tài)”);for(i=1;i<=count;i++){printfC*%d%d%d",i,block[i].addr,block[i].size);if(block[i].flag==0)printf(”未分配“);elseprintf("B分配”);}printf(Mu);printf(M內(nèi)存總數(shù)為%d第一次分
3、配從%d開始n,total,beginaddress);inti=l;intsize;intgeshu;printfC1請輸入要初次調(diào)入內(nèi)存的進程的個數(shù):”);scanf(”%(T',&gcshu);while(i<=geshu){printf(”請輸入第%d個進程的大小:”,i);scanf(“%d”,&size);count++;if(count==l){blockLcountj.addr=beginaddress;}else{blockfcount].adclr=block[count-1].acldr+blockfcount-1].s
4、ize;}block[count].sizc=sizc;block[count].flag=l;i++;}count++;block[count].addr=block[count-1].addr+block[count-1].size;block[countJ.flag=0;block[count].size=total-block[count].addr;voidjinchengEnter(){〃口己編寫,釆用首次適應(yīng)算法}voidjinchengExit()〃作業(yè)調(diào)出內(nèi)存模塊{intkuaihao;printfC請輸入要調(diào)出內(nèi)存的塊號:”)
5、;scanf("%d",&kuaihao);if(blockLkuaihaoJ.flag==0)printfC*該塊內(nèi)存是空閑的,無需調(diào)出“);else{〃將該塊設(shè)為空閑,就是將該塊的flag設(shè)為0,〃還考慮了該塊的卞一?塊如果是空閑的,則將這兩塊合并為一塊,總塊數(shù)減1〃如果??紤]該塊的前一塊是空閑,則將這兩塊合并為一塊,總塊數(shù)減1,如何改代碼?block[kuaihao].flag=0;if(block[kuaihao+1].flag==O)block[kuaihao].size=block[kuaihaoJ.size+block[kuai
6、hao+1J.size;for(inti=kuaihao+2;i<=count;i++)block[i-l]=block[i];block[count].size=O;block[count].flag=O;block[countj.addr=O;count--;}}displayO;voidmain(){intflag=O,select;jinchengFirstEnter();displayO;while(flag==O){printf(nprintf(Hprintf(Hprintf(Mprintf(n請輸入相應(yīng)操作“);1.進程進入內(nèi)存
7、“);2.進程退出內(nèi)存”);3.顯示當(dāng)前狀態(tài)”);4.退出“);printf(H請選擇:”);scanf("%d",&select);switch(select){case1:jinchengEnter();break;case2:jinchengExit();break;case3:display();break;case4:flag=l;break;default:printf(n選擇錯謀,請重新選擇”);要求:1.仔細(xì)研讀上述代碼,體會可變分區(qū)分配的模擬實現(xiàn),實驗報告上描述出jinchcngFirstEntcr()?數(shù)的
8、實現(xiàn)思想,2.jinchengFirstEnter()函數(shù)沒冇考慮輸入的數(shù)據(jù)超過范用的情況,請完善該函數(shù)3.在進程退出函數(shù)jinchen