操作系統(tǒng)-存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配及回收算法(附源碼)
《操作系統(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
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 (((add
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->size
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->size
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->size
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è)
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運(yùn)動(dòng)會(huì)安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個(gè)人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書(shū)
- 2024年憲法宣傳周活動(dòng)總結(jié)+在機(jī)關(guān)“弘揚(yáng)憲法精神推動(dòng)發(fā)改工作高質(zhì)量發(fā)展”專題宣講報(bào)告會(huì)上的講話
- 2024年XX村合作社年報(bào)總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊(cè)教研組工作總結(jié)
- 2024年小學(xué)高級(jí)教師年終工作總結(jié)匯報(bào)
- 2024-2025年秋季第一學(xué)期初中物理上冊(cè)教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語(yǔ)文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報(bào)告
- 2025年學(xué)校元旦迎新盛典活動(dòng)策劃方案
- 2024年學(xué)校周邊安全隱患自查報(bào)告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報(bào)告