操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)

上傳人:文**** 文檔編號(hào):60785065 上傳時(shí)間:2022-03-09 格式:DOCX 頁(yè)數(shù):11 大?。?59.18KB
收藏 版權(quán)申訴 舉報(bào) 下載
操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)_第1頁(yè)
第1頁(yè) / 共11頁(yè)
操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)_第2頁(yè)
第2頁(yè) / 共11頁(yè)
操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)_第3頁(yè)
第3頁(yè) / 共11頁(yè)

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)》由會(huì)員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)(11頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、精選優(yōu)質(zhì)文檔-----傾情為你奉上 存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法 課程名稱:計(jì)算機(jī)操作系統(tǒng) 班級(jí):信1501-2 實(shí)驗(yàn)者姓名:李琛 實(shí)驗(yàn)日期:2018年5月20日 評(píng)分: 教師簽名: 一、實(shí)驗(yàn)?zāi)康? 分區(qū)管理是應(yīng)用較廣泛的一種存儲(chǔ)管理技術(shù)。本實(shí)驗(yàn)要求用一種結(jié)構(gòu)化高級(jí)語(yǔ)言構(gòu)造 分區(qū)描述器,編制動(dòng)態(tài)分區(qū)分配算法和回收算法模擬程序,并討論不同分配算法的特點(diǎn)。 二、實(shí)驗(yàn)要求 1、編寫(xiě):Fi

2、rst Fit Algorithm 2、編寫(xiě):Best Fit Algorithm 3、編寫(xiě):空閑區(qū)回收算法 三、實(shí)驗(yàn)過(guò)程 (一)主程序 1、定義分區(qū)描述器 node,包括 3 個(gè)元素: (1)adr——分區(qū)首地址 (2)size——分區(qū)大小 (3)next——指向下一個(gè)分區(qū)的指針 2、定義 3 個(gè)指向 node 結(jié)構(gòu)的指針變量: (1)head1——空閑區(qū)隊(duì)列首指針 (2)back1——指向釋放區(qū) node 結(jié)構(gòu)的指針 (3)assign——指向申請(qǐng)的內(nèi)存分區(qū) node 結(jié)構(gòu)的指針 3、定義 1 個(gè)整形變量: free——用戶申請(qǐng)存儲(chǔ)區(qū)的大

3、?。ㄓ捎脩翩I入) (二)過(guò)程 1、定義 check 過(guò)程,用于檢查指定的釋放塊(由用戶鍵入)的合法性 2、定義 assignment1 過(guò)程,實(shí)現(xiàn) First Fit Algorithm 3、定義 assignment2 過(guò)程,實(shí)現(xiàn) Best Fit Algorithm 4、定義 acceptment1 過(guò)程,實(shí)現(xiàn) First Fit Algorithm 的回收算法 5、定義 acceptment2 過(guò)程,實(shí)現(xiàn) Best Fit Algorithm 的回收算法 6、定義 print 過(guò)程,打印空閑區(qū)隊(duì)列 (三)執(zhí)行 程序首先申請(qǐng)一整塊空閑區(qū),其首址為 0,大

4、小為 32767;然后,提示用戶使用哪種分 配算法,再提示是分配還是回收;分配時(shí)要求輸入申請(qǐng)區(qū)的大小,回收時(shí)要求輸入釋放區(qū)的 首址和大小。 實(shí)驗(yàn)代碼 Main.cpp #include #include #include #include using namespace std; #define MAX_SIZE 32767 typedef struct node { int id; int adr; int size; struct node *next; }Node;

5、Node *head1, *head2, *back1, *back2, *assign; int request; int check(int add, int siz, char c) { Node *p, *head; int check = 1; if (add<0 || siz<0) check = 0;/*地址和大小不能為負(fù)*/ if (c == 'f' || c == 'F') head = head1; else head = head2; p = head->next; while ((p != NULL) && check

6、) if (((addadr) && (add + siz>p->adr)) || ((add >= p->adr) && (addadr + p->size))) check = 0; else p = p->next; if (check == 0) printf("\t輸入釋放區(qū)地址或大小有錯(cuò)誤?。。n"); return check; } void init() { Node *p; head1 = (Node*)malloc(sizeof(Node)); head2 = (Node*)malloc(size

7、of(Node)); p = (Node*)malloc(sizeof(Node)); head1->next = p; head2->next = p; p->size = MAX_SIZE; p->adr = 0; p->next = NULL; p->id = 0; } Node* assignment1(int num, int req) { Node *before, *after, *ass; ass = (Node*)malloc(sizeof(Node)); before = head1; after = head1->nex

8、t; ass->id = num; ass->size = req; while (after->sizenext; after = after->next; } if (after == NULL) { ass->adr = -1; } else { if (after->size == req) { before->next = after->next; ass->adr = after->adr; } else { after-

9、>size -= req; ass->adr = after->adr; after->adr += req; } } return ass; } void acceptment1(int address, int siz, int rd) { Node *before, *after; int insert = 0; back1 = (Node*)malloc(sizeof(Node)); before = head1; after = head1->next; back1->adr = address; back1->size

10、 = siz; back1->id = rd; back1->next = NULL; while (!insert&&after) {//將要被回收的分區(qū)插入空閑區(qū)(按首址大小從小到大插入) if ((after == NULL) || ((back1->adr <= after->adr) && (back1->adr >= before->adr))) { before->next = back1; back1->next = after; insert = 1; } else { before = befor

11、e->next; after = after->next; } } if (insert) { if (back1->adr == before->adr + before->size) {//和前邊分區(qū)合并 before->size += back1->size; before->next = back1->next; free(back1); } else if (after&&back1->adr + back1->size == after->adr) {//和后邊分區(qū)合并 back1->size

12、+= after->size; back1->next = after->next; back1->id = after->id; free(after); after = back1; } printf("\t首先分配算法回收內(nèi)存成功!\n"); } else printf("\t首先分配算法回收內(nèi)存失??!\n"); } Node* assignment2(int num, int req) { Node *before, *after, *ass, *q; ass = (Node*)malloc(sizeof(Nod

13、e)); q = (Node*)malloc(sizeof(Node)); before = head2; after = head2->next; ass->id = num; ass->size = req; while (after->sizenext; after = after->next; } if (after == NULL) { ass->adr = -1; } else { if (after->size == req) { befor

14、e->next = after->next; ass->adr = after->adr; } else { q = after; before->next = after->next; ass->adr = q->adr; q->size -= req; q->adr += req; before = head2; after = head2->next; if (after == NULL) { before->next = q; q->next = NULL; }

15、 else { while ((after->size)<(q->size)) { before = before->next; after = after->next; } before->next = q; q->next = after; } } } return (ass); } void acceptment2(int address, int siz, int rd) { Node *before, *after; int insert = 0; bac

16、k2 = (Node*)malloc(sizeof(Node)); before = head2; after = head2->next; back2->adr = address; back2->size = siz; back2->id = rd; back2->next = NULL; if (head2->next == NULL) {//空閑隊(duì)列為空 head2->next = back2; head2->size = back2->size; } else {//空閑隊(duì)列不為空 while (after) {

17、 if (back2->adr == after->adr + after->size) {//和前邊空閑分區(qū)合并 before->next = after->next; after->size += back2->size; back2 = after; } else { before = before->next; after = after->next; } } before = head2; after = head2->next; while (after)

18、 { if (after->adr == back2->adr + back2->size) {//和后邊空閑區(qū)合并 before->next = after->next; back2->size += after->size; } else { before = before->next; after = after->next; } } before = head2; after = head2->next; while (!insert) {//將被回收的塊插入到恰當(dāng)?shù)奈?/p>

19、置(按分區(qū)大小從小到大) if (after == NULL || ((after->size>back2->size) && (before->sizesize))) { before->next = back2; back2->next = after; insert = 1; break; } else { before = before->next; after = after->next; } } } if (insert) printf("

20、\t最佳適應(yīng)算法回收內(nèi)存成功!\n"); else printf("\t最佳適應(yīng)算法回收內(nèi)存失敗??!\n"); } void print(char choice)//輸出空閑區(qū)隊(duì)列信息 { Node *p; if (choice == 'f' || choice == 'F') p = head1->next; else p = head2->next; if (p) { printf("\n空閑區(qū)隊(duì)列的情況為:\n"); printf("\t編號(hào)\t首址\t終址\t大小\n"); while (p) { pr

21、intf("\t%d\t%d\t%d\t%d\n", p->id, p->adr, p->adr + p->size - 1, p->size); p = p->next; } } } void menu()//菜單及主要過(guò)程 { char chose; int ch, num=0, r, add, rd; while (1) { system("cls"); printf("-------存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法-------\n"); printf(" F 最先適應(yīng)算法\n"); pr

22、intf(" B 最佳適應(yīng)算法\n"); printf(" E 退出程序\n"); printf("----------------------------------------------\n"); printf("請(qǐng)選擇算法:"); cin >> chose; //scanf("%c", &chose); if (chose == 'e' || chose == 'E') exit(0); else { system("cls"); while (1

23、) { if (chose == 'f' || chose == 'F') printf("最先適應(yīng)算法:\n"); if (chose == 'b' || chose == 'B') printf("最佳適應(yīng)算法:\n"); printf("----------------------------------------------\n"); printf(" 1 分配內(nèi)存\n"); printf(" 2 回收內(nèi)存\n"); printf(" 3

24、查看內(nèi)存\n"); printf(" 4 返回\n"); printf("----------------------------------------------\n\n"); printf("請(qǐng)選擇:"); scanf("%d", &ch); fflush(stdin); switch (ch) { case 1: printf("輸入申請(qǐng)的分區(qū)大小:"); scanf("%d", &r); if (chose == 'f' || chose == 'F')

25、 assign = assignment1(num, r); else assign = assignment2(num, r); if (assign->adr == -1) { printf("分配內(nèi)存失敗!\n"); } else printf("分配成功!分配的內(nèi)存的首址為:%d\n", assign->adr); break; case 2: printf("輸入釋放的內(nèi)存的首址:"); scanf("%d", &add); prin

26、tf("輸入釋放的內(nèi)存的大?。?); scanf("%d", &r); printf("輸入釋放的內(nèi)存的編號(hào):"); scanf("%d", &rd); if (check(add, r, chose)) { if (chose == 'f' || chose == 'F') acceptment1(add, r, rd); else acceptment2(add, r, rd); } break; case 3:print(chose); break; case 4:menu(); break; } } } } } void main()//主函數(shù) { init(); menu(); } 四、實(shí)驗(yàn)結(jié)果 五、實(shí)驗(yàn)總結(jié) 通過(guò)這次實(shí)驗(yàn)我練習(xí)了存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法,對(duì)操作系統(tǒng)中動(dòng)態(tài)可變分區(qū)存儲(chǔ)管理有了更深刻的了解。剛開(kāi)始編程時(shí)并沒(méi)有什么思路,查閱相關(guān)書(shū)籍,瀏覽網(wǎng)上的論壇后,才對(duì)這次實(shí)驗(yàn)有了編程思路,在編程中總會(huì)遇到各種意想不到問(wèn)題,這些問(wèn)題一定要解決。在解決問(wèn)題的同時(shí),自己的編程能力也在提高。 專心---專注---專業(yè)

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!