




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上存儲管理動態分區分配及回收算法課程名稱:計算機操作系統 班級:信1501-2實驗者姓名:李琛 實驗日期:2018年5月20日評分: 教師簽名:一、實驗目的分區管理是應用較廣泛的一種存儲管理技術。本實驗要求用一種結構化高級語言構造 分區描述器,編制動態分區分配算法和回收算法模擬程序,并討論不同分配算法的特點。二、實驗要求1、編寫:First Fit Algorithm 2、編寫:Best Fit Algorithm 3、編寫:空閑區回收算法三、實驗過程(一)主程序 1、定義分區描述器 node,包括 3 個元素: (1)adr分區首地址 (2)size分區大小 (3)n
2、ext指向下一個分區的指針 2、定義 3 個指向 node 結構的指針變量: (1)head1空閑區隊列首指針 (2)back1指向釋放區 node 結構的指針 (3)assign指向申請的內存分區 node 結構的指針 3、定義 1 個整形變量: free用戶申請存儲區的大小(由用戶鍵入) (二)過程 1、定義 check 過程,用于檢查指定的釋放塊(由用戶鍵入)的合法性 2、定義 assignment1 過程,實現 First Fit Algorithm 3、定義 assignment2 過程,實現 Best Fit Algorithm 4、定義 acceptment1 過程,實現 Fir
3、st Fit Algorithm 的回收算法 5、定義 acceptment2 過程,實現 Best Fit Algorithm 的回收算法 6、定義 print 過程,打印空閑區隊列 (三)執行 程序首先申請一整塊空閑區,其首址為 0,大小為 32767;然后,提示用戶使用哪種分配算法,再提示是分配還是回收;分配時要求輸入申請區的大小,回收時要求輸入釋放區的首址和大小。實驗代碼Main.cpp#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using
4、namespace std;#define MAX_SIZE 32767typedef struct nodeint id;int adr;int size;struct node *next;Node;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;/*地址和大小不能為負*/if (c = 'f' | c = '
5、;F')head = head1;elsehead = head2;p = head->next;while (p != NULL) && check)if (add<p->adr) && (add + siz>p->adr) | (add >= p->adr) && (add<p->adr + p->size)check = 0;elsep = p->next;if (check = 0)printf("t輸入釋放區地址或大小有錯誤!n");retur
6、n check;void init()Node *p;head1 = (Node*)malloc(sizeof(Node);head2 = (Node*)malloc(sizeof(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 =
7、 (Node*)malloc(sizeof(Node);before = head1;after = head1->next;ass->id = num;ass->size = req;while (after->size<req)before = before->next;after = after->next;if (after = NULL)ass->adr = -1;elseif (after->size = req)before->next = after->next;ass->adr = after->a
8、dr;elseafter->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 = siz;back1->i
9、d = rd;back1->next = NULL;while (!insert&&after)/將要被回收的分區插入空閑區(按首址大小從小到大插入)if (after = NULL) | (back1->adr <= after->adr) && (back1->adr >= before->adr)before->next = back1;back1->next = after;insert = 1;elsebefore = before->next;after = after->next;i
10、f (insert)if (back1->adr = before->adr + before->size)/和前邊分區合并before->size += back1->size;before->next = back1->next;free(back1);else if (after&&back1->adr + back1->size = after->adr)/和后邊分區合并back1->size += after->size;back1->next = after->next;back1-
11、>id = after->id;free(after);after = back1;printf("t首先分配算法回收內存成功!n");elseprintf("t首先分配算法回收內存失敗!n");Node* assignment2(int num, int req)Node *before, *after, *ass, *q;ass = (Node*)malloc(sizeof(Node);q = (Node*)malloc(sizeof(Node);before = head2;after = head2->next;ass->
12、id = num;ass->size = req;while (after->size<req)before = before->next;after = after->next;if (after = NULL)ass->adr = -1;elseif (after->size = req)before->next = after->next;ass->adr = after->adr;elseq = after;before->next = after->next;ass->adr = q->adr;
13、q->size -= req;q->adr += req;before = head2;after = head2->next;if (after = NULL)before->next = q;q->next = NULL;elsewhile (after->size)<(q->size)before = before->next;after = after->next;before->next = q;q->next = after;return (ass);void acceptment2(int address,
14、int siz, int rd)Node *before, *after;int insert = 0;back2 = (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)/空閑隊列為空head2->next = back2;head2->size = back2->size;el
15、se/空閑隊列不為空while (after)if (back2->adr = after->adr + after->size)/和前邊空閑分區合并before->next = after->next;after->size += back2->size;back2 = after;elsebefore = before->next;after = after->next;before = head2;after = head2->next;while (after)if (after->adr = back2->adr
16、 + back2->size)/和后邊空閑區合并before->next = after->next;back2->size += after->size;elsebefore = before->next;after = after->next;before = head2;after = head2->next;while (!insert)/將被回收的塊插入到恰當的位置(按分區大小從小到大)if (after = NULL | (after->size>back2->size) && (before->
17、;size<back2->size)before->next = back2;back2->next = after;insert = 1;break;elsebefore = before->next;after = after->next;if (insert)printf("t最佳適應算法回收內存成功!n");elseprintf("t最佳適應算法回收內存失敗!n");void print(char choice)/輸出空閑區隊列信息Node *p;if (choice = 'f' | choic
18、e = 'F')p = head1->next;elsep = head2->next;if (p)printf("n空閑區隊列的情況為:n");printf("t編號t首址t終址t大小n");while (p)printf("t%dt%dt%dt%dn", p->id, p->adr, p->adr + p->size - 1, p->size);p = p->next;void menu()/菜單及主要過程char chose;int ch, num=0, r, ad
19、d, rd;while (1)system("cls");printf("-存儲管理動態分區分配及回收算法-n");printf(" F 最先適應算法n");printf(" B 最佳適應算法n");printf(" E 退出程序n");printf("-n");printf("請選擇算法:");cin >> chose;/scanf("%c", &chose);if (chose = 'e' | c
20、hose = 'E')exit(0);elsesystem("cls");while (1)if (chose = 'f' | chose = 'F')printf("最先適應算法:n");if (chose = 'b' | chose = 'B')printf("最佳適應算法:n");printf("-n");printf(" 1 分配內存n");printf(" 2 回收內存n");print
21、f(" 3 查看內存n");printf(" 4 返回n");printf("-nn");printf("請選擇:");scanf("%d", &ch);fflush(stdin);switch (ch)case 1:printf("輸入申請的分區大小:"); scanf("%d", &r);if (chose = 'f' | chose = 'F')assign = assignment1(num, r);elseassign = as
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自然語言及語音處理項目式教程 實訓指導 實訓1 配置NLP環境
- 分析師預期選股策略月報:分析師預期修正選股策略今年相對中證全指超額3.06
- 2025以色列與伊朗沖突全面解析課件
- 氫能源未來2025年加氫站建設成本效益分析與布局指南報告
- 2025年家具制造業個性化定制生產模式市場風險預警報告
- 2025年煤炭清潔燃燒技術產業鏈上下游協同發展報告
- 工業互聯網平臺安全多方計算在智能倉儲物流中的應用報告
- 教育大數據分析2025年:教育資源配置優化與教育公平研究報告
- 工業互聯網平臺網絡安全態勢感知技術在電力行業的應用與優化報告
- 工業互聯網平臺安全多方計算技術:2025年網絡安全風險預警與應對策略研究報告
- 項目財政評審服務采購投標方案(技術方案)
- 2025年湖北省技能高考(建筑技術類)《建筑制圖與識圖》模擬練習試題庫(含答案)
- 《陋室銘》歷年中考文言文閱讀試題52篇(含答案與翻譯)(截至2023年)
- 2025年中國工商業光伏行業上下游產業鏈全景、發展環境及前景研究報告
- 2024年度護理三基考試題庫及答案(共570題)
- 股票名詞解釋(大全)
- 園林工人交通安全宣講
- 養老院消防安全應急預案規范
- 人力資源外包投標方案(技術方案)
- 食管動力性疾病病因介紹
- 《濱海旅游區介紹》課件
評論
0/150
提交評論