版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)報告操作系統(tǒng)可變分區(qū)存儲管理方式的內(nèi)存分配回收班級:XXXXXXXXXXXX 學(xué)號:XXXXXXXXXXXX 姓名:XXXXXX 日期:XXXX.XX.XX版本歷史 Revisions History版 本 號Version Number修改項(xiàng)目To modify the project修訂者Redactor日期Date目錄1 引言1.1 實(shí)驗(yàn)?zāi)康耐ㄟ^首次適應(yīng)算法、最佳適應(yīng)算法和最壞適應(yīng)算法實(shí)現(xiàn)主存空間的分配, 可以使開發(fā)人員更好地理解存儲分配算法。1.2 參考文檔1. 操作系統(tǒng)2.3.1節(jié) 空閑存儲區(qū)表2. 操作系統(tǒng)2.3.2節(jié) 首次適應(yīng)法(1.分配算法,2.回
2、收算法)2 可變分區(qū)存儲管理 2.1 實(shí)驗(yàn)原理分析在可變分區(qū)模式下,在系統(tǒng)初啟且用戶作業(yè)尚未裝入主存儲器之前,整個用戶區(qū)是一個大空閑分區(qū),隨著作業(yè)的裝入和撤離,主存空間被分成許多分區(qū),有的分區(qū)被占用,而有的分區(qū)時空閑的。為了方便主存空間的分配和去配,用于管理的數(shù)據(jù)結(jié)構(gòu)可由兩張表組成:“已分配區(qū)表”和“未分配區(qū)表”。在“未分配表中”將空閑區(qū)按長度遞增順序排列,當(dāng)裝入新作業(yè)時,從未分配區(qū)表中挑選一個能滿足用戶進(jìn)程要求的最小分區(qū)進(jìn)行分配。這時從已分配表中找出一個空欄目登記新作業(yè)的起始地址和占用長度,同時修改未分配區(qū)表中空閑區(qū)的長度和起始地址。當(dāng)作業(yè)撤離時已分配區(qū)表中的相應(yīng)狀態(tài)變?yōu)椤翱铡?,而將收回的?/p>
3、區(qū)登記到未分配區(qū)表中,若有相鄰空閑區(qū)再將其連接后登記。2.2 設(shè)計(jì)思路1、 分配算法:采用首次適應(yīng)法為作來分配大小為size的內(nèi)存空間時,總是從表的起始端的低地址部分開始查找,當(dāng)?shù)谝淮握业酱笥诨虻扔谏暾埓笮〉目臻e區(qū)時,就按所需大小分配給作業(yè)。如果分配后原空閑區(qū)還有剩余空間,就修改原存儲區(qū)表項(xiàng)的m_size和m_addr,使它記錄余下的“零頭”。如果作業(yè)所需空間正好等于該空閑區(qū)大小,那么該空閑區(qū)表項(xiàng)的m_size就成為0,接下來要刪除表中這個“空洞”,即將隨后的各非零表項(xiàng)依次上移一個位置。2、 回收算法:當(dāng)某一作業(yè)回收以前所分配到的內(nèi)存時,就要將該內(nèi)存區(qū)歸還給系統(tǒng),使其成為空閑區(qū)而可被其它作來使
4、用?;厥諘r如釋放區(qū)與鄰近的空閑區(qū)相銜接,要將它們合并成較大的空閑區(qū),否則空閑區(qū)將被分割得超來越小,最終導(dǎo)致不能利用;另外,空閑區(qū)個數(shù)越來越多,也會使空閑區(qū)登記表溢出。2.3 源程序/*| 如不會使用文件輸入/輸出,也不會使用I/O轉(zhuǎn)向做輸入和輸出結(jié)果文件,| 可以手再抄輸出結(jié)果后后再輸?shù)轿募?,?shí)驗(yàn)報告的文字內(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表中各項(xiàng)的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); /* 首次適應(yīng)的分配函數(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;/* 修改表項(xiàng)的首地址*/ if(bp->m_size -= size) = 0)/* 有正好大小的空閑區(qū)*/ do bp+; (bp - 1)->m_addr = bp->m_addr;/* 修改表項(xiàng)的首地址*/ 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);/* 首次適應(yīng)的回收函數(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 重要結(jié)構(gòu)體說明空閑存儲區(qū)表可采用結(jié)構(gòu)數(shù)組的形式,采用的數(shù)據(jù)結(jié)構(gòu)形式為:typedef struct map unsigned m_size; char *m_addr;m_size:是空閑分區(qū)的長度m_addr:是空閑分區(qū)的起始地址2.5 重要變量說明coremapN:是空閑存儲區(qū)表2.6 結(jié)果2.7 測試方法對結(jié)果的分析1、連續(xù)分配3個100長度的分區(qū),剩下700長度的分區(qū)2、從頭釋放掉一個100長度的分區(qū),里面有兩個可用的分區(qū),一個是100長度的分區(qū),一個是700長度的分區(qū)3、程序運(yùn)行的結(jié)果,與設(shè)計(jì)思路一致。2.8 接口2.8.1 接口設(shè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國鉬行業(yè)全國市場開拓戰(zhàn)略制定與實(shí)施研究報告
- 新形勢下發(fā)動機(jī)行業(yè)可持續(xù)發(fā)展戰(zhàn)略制定與實(shí)施研究報告
- 2025-2030年中國汽車延保服務(wù)行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報告
- 自動售貨機(jī)服務(wù)校園項(xiàng)目策劃案
- 20道名校幼升小真題檢測孩子的數(shù)學(xué)基礎(chǔ)知識
- 沙蔥種植項(xiàng)目可行性研究報告完整立項(xiàng)報告
- 2024年滲濾液處理行業(yè)市場深度評估及投資戰(zhàn)略規(guī)劃報告
- 水景觀工程可行性研究報告
- 山東省濟(jì)南市槐蔭區(qū)2023-2024學(xué)年九年級上學(xué)期期末化學(xué)試題
- 2025年人教版英語四年級下冊教學(xué)計(jì)劃(含進(jìn)度表)
- 2024年電商平臺入駐服務(wù)合同
- 2024年度政府采購代理服務(wù)合同-醫(yī)療衛(wèi)生設(shè)備采購項(xiàng)目3篇
- GJB9001C版標(biāo)準(zhǔn)培訓(xùn)課件
- 船舶防火與滅火(課件)
- 七、監(jiān)理工作重點(diǎn)、難點(diǎn)分析及對策
- 面膜中藍(lán)銅肽經(jīng)皮滲透性和改善皮膚衰老作用研究
- 湖北省荊州市八縣市2023-2024學(xué)年高一上學(xué)期1月期末考試 化學(xué) 含解析
- 專題05 說明文閱讀(必考題型梳理)50題-2023-2024學(xué)年八年級語文下學(xué)期期中專題復(fù)習(xí)(上海專用)(解析版)
- 《水文化概論》全套教學(xué)課件
- 2023年四川省公務(wù)員錄用考試《行測》真題卷及答案解析
- 社區(qū)共享菜園建設(shè)方案及實(shí)施計(jì)劃
評論
0/150
提交評論