![可變分區(qū)存儲管理方式的內(nèi)存分配回收(共12頁)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/22d675d1-9394-4fa3-acf2-3ca40db757b1/22d675d1-9394-4fa3-acf2-3ca40db757b11.gif)
![可變分區(qū)存儲管理方式的內(nèi)存分配回收(共12頁)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/22d675d1-9394-4fa3-acf2-3ca40db757b1/22d675d1-9394-4fa3-acf2-3ca40db757b12.gif)
![可變分區(qū)存儲管理方式的內(nèi)存分配回收(共12頁)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/22d675d1-9394-4fa3-acf2-3ca40db757b1/22d675d1-9394-4fa3-acf2-3ca40db757b13.gif)
![可變分區(qū)存儲管理方式的內(nèi)存分配回收(共12頁)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/22d675d1-9394-4fa3-acf2-3ca40db757b1/22d675d1-9394-4fa3-acf2-3ca40db757b14.gif)
![可變分區(qū)存儲管理方式的內(nèi)存分配回收(共12頁)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/22d675d1-9394-4fa3-acf2-3ca40db757b1/22d675d1-9394-4fa3-acf2-3ca40db757b15.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質文檔-傾情為你奉上實驗報告操作系統(tǒng)可變分區(qū)存儲管理方式的內(nèi)存分配回收班級:XXXXXXXXXXXX 學號:XXXXXXXXXXXX 姓名:XXXXXX 日期:XXXX.XX.XX版本歷史 Revisions History版 本 號Version Number修改項目To modify the project修訂者Redactor日期Date目錄1 引言1.1 實驗目的通過首次適應算法、最佳適應算法和最壞適應算法實現(xiàn)主存空間的分配, 可以使開發(fā)人員更好地理解存儲分配算法。1.2 參考文檔1. 操作系統(tǒng)2.3.1節(jié) 空閑存儲區(qū)表2. 操作系統(tǒng)2.3.2節(jié) 首次適應法(1.分配算法,2.回
2、收算法)2 可變分區(qū)存儲管理 2.1 實驗原理分析在可變分區(qū)模式下,在系統(tǒng)初啟且用戶作業(yè)尚未裝入主存儲器之前,整個用戶區(qū)是一個大空閑分區(qū),隨著作業(yè)的裝入和撤離,主存空間被分成許多分區(qū),有的分區(qū)被占用,而有的分區(qū)時空閑的。為了方便主存空間的分配和去配,用于管理的數(shù)據(jù)結構可由兩張表組成:“已分配區(qū)表”和“未分配區(qū)表”。在“未分配表中”將空閑區(qū)按長度遞增順序排列,當裝入新作業(yè)時,從未分配區(qū)表中挑選一個能滿足用戶進程要求的最小分區(qū)進行分配。這時從已分配表中找出一個空欄目登記新作業(yè)的起始地址和占用長度,同時修改未分配區(qū)表中空閑區(qū)的長度和起始地址。當作業(yè)撤離時已分配區(qū)表中的相應狀態(tài)變?yōu)椤翱铡保鴮⑹栈氐姆?/p>
3、區(qū)登記到未分配區(qū)表中,若有相鄰空閑區(qū)再將其連接后登記。2.2 設計思路1、 分配算法:采用首次適應法為作來分配大小為size的內(nèi)存空間時,總是從表的起始端的低地址部分開始查找,當?shù)谝淮握业酱笥诨虻扔谏暾埓笮〉目臻e區(qū)時,就按所需大小分配給作業(yè)。如果分配后原空閑區(qū)還有剩余空間,就修改原存儲區(qū)表項的m_size和m_addr,使它記錄余下的“零頭”。如果作業(yè)所需空間正好等于該空閑區(qū)大小,那么該空閑區(qū)表項的m_size就成為0,接下來要刪除表中這個“空洞”,即將隨后的各非零表項依次上移一個位置。2、 回收算法:當某一作業(yè)回收以前所分配到的內(nèi)存時,就要將該內(nèi)存區(qū)歸還給系統(tǒng),使其成為空閑區(qū)而可被其它作來使
4、用。回收時如釋放區(qū)與鄰近的空閑區(qū)相銜接,要將它們合并成較大的空閑區(qū),否則空閑區(qū)將被分割得超來越小,最終導致不能利用;另外,空閑區(qū)個數(shù)越來越多,也會使空閑區(qū)登記表溢出。2.3 源程序/*| 如不會使用文件輸入/輸出,也不會使用I/O轉向做輸入和輸出結果文件,| 可以手再抄輸出結果后后再輸?shù)轿募校瑢嶒瀳蟾娴奈淖謨?nèi)容由自己掌握,能多能少。*/#include <stdio.h>#include <malloc.h>/*表的定義*/#define N 5#define MEMSIZE 1000typedef struct map unsigned m_size; char *
5、m_addr;struct map coremapN;/* coremap表的初始化程序*/void initcoremap(char *addr, unsigned size) unsigned i; printf("init coremap, first addr: %dn", addr); coremap0.m_size = size; coremap0.m_addr = addr; for(i = 1; i < N; i+) coremapi.m_size = 0; coremapi.m_addr = 0; /* 輸出表的內(nèi)容*/void printcorem
6、ap(void) unsigned i; /* 打印coremap表中各項的m_size和m_addr */ for(i = 0; i < N; i+) printf("coremap%d.m_addr=%d ", i, coremapi.m_addr); printf("coremap%d.m_size=%dn", i, coremapi.m_size); /* 首次適應的分配函數(shù)*/char *fmalloc(unsigned size) register char *a; register struct map *bp; for (bp =
7、coremap; bp->m_size; bp+) if(bp->m_size >= size) a = bp->m_addr; bp->m_addr += size;/* 修改表項的首地址*/ if(bp->m_size -= size) = 0)/* 有正好大小的空閑區(qū)*/ do bp+; (bp - 1)->m_addr = bp->m_addr;/* 修改表項的首地址*/ while(bp - 1)->m_size = bp->m_size);/* 打印分配內(nèi)存空間的m_size和m_addr*/ printf("f
8、malloc size: %d, addr:%dn", size, a); return(a); return(0);/* 首次適應的回收函數(shù)*/void ffree(unsigned size, char *addr) struct map *bp; char *a, *t; unsigned tt; printf("ffree mem size=%u, addr=%un", size, addr); a = addr; for (bp = coremap; bp->m_addr <= a && bp->m_size != 0;
9、 bp+); if (bp > coremap && (bp - 1)->m_addr + (bp - 1)->m_size = a) /* 情況 1、2 */ (bp - 1)->m_size += size;/* 情況 1 */ if (a + size = bp->m_addr) /* 情況 2 */ (bp - 1)->m_size += bp->m_size; while (bp->m_size) bp+; (bp - 1)->m_addr = bp->m_addr; (bp - 1)->m_size
10、= bp->m_size; else if (a + size = bp->m_addr && bp->m_size) /* 情況 3 */ bp->m_addr -= size; bp->m_size += size; else if (0 != size) /* 情況 4 */ do t = bp->m_addr; bp->m_addr = a; a = t; tt = bp->m_size; bp->m_size = size; bp+; while (size = tt); /* 主程序的框架*/int main(v
11、oid) char *mymem; int size; int addr; char cmdchar; char c="" if (mymem = malloc(MEMSIZE) = NULL) printf("Not enough memory to allocate buffern"); exit(1); initcoremap(mymem, MEMSIZE); while(c != 'q') do c = getchar(); while(c = 'n' | c = 't' | c = ' &
12、#39;); cmdchar = c; switch (cmdchar) case 'm':/* 分配空間*/ scanf("%u", &size); fmalloc(size); break; case 'f':/* 釋放空間*/ scanf("%u %u", &size, &addr); ffree(size, mymem + addr); break; case 'p': printcoremap(); break; default:/* 其它字母退出*/ break; free(mymem); return 0;2.4 重要結構體說明空閑存儲區(qū)表可采用結構數(shù)組的形式,采用的數(shù)據(jù)結構形式為:typedef struct map unsigned m_size; char *m_addr;m_size:是空閑分區(qū)的長度m_addr:是空閑分區(qū)的起始地址2.5 重要變量說明coremapN:是空閑存儲區(qū)表2.6 結果2.7 測試方法對結果的分析1、連續(xù)分配3個100長度的分區(qū),剩下700長度的分區(qū)2、從頭釋放掉一個100長度的分區(qū),里面有兩個可用的分區(qū),一個是100長度的分區(qū),一個是700長度的分區(qū)3、程序運行的結果,與設計思路一致。2.8 接口2.8.1 接口設
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年第12課從明朝建立到清軍人關-勤徑學升高中歷史必修上同步練測(統(tǒng)編版2019)
- 園林養(yǎng)護人員雇傭合同范文2025年
- 2025年伙伴合同終止協(xié)議
- 2025年企業(yè)辦公用品綜合供需合同
- 2025年官方物流配送協(xié)議書高清
- 2025年企業(yè)設備抵押擔保貸款合同
- 2025年動物收養(yǎng)協(xié)議版式
- 2025年糧食供需雙方合同策劃大綱
- 2025年智能交通項目提案報告模式
- 2025年企業(yè)維修保養(yǎng)年合作協(xié)議
- 助貸機構業(yè)務流程規(guī)范
- DL∕T 5106-2017 跨越電力線路架線施工規(guī)程
- 西師大版數(shù)學四年級下冊全冊教學課件(2024年3月修訂)
- 骨科醫(yī)院感染控制操作流程
- 綠化養(yǎng)護服務投標方案(技術標)
- 九年級物理第一課
- 食材配送技術方案
- 全年無休供貨承諾書
- 中藥的臨床合理應用
- 材料設備采購進度計劃控制措施
- 寧夏銀川三中2023-2024學年九年級上學期期末物理試卷
評論
0/150
提交評論