版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告內(nèi)存動(dòng)態(tài)分區(qū)分配和回收的模擬實(shí)現(xiàn) 班級(jí):2013級(jí)軟件工程1班 學(xué)號(hào):X X X 姓名:蕭氏一郎數(shù)據(jù)結(jié)構(gòu)說明:Struct SubAreaListA 分配空間鏈表Struct SubAreaListF 空閑分區(qū)鏈表Viod Swap(Task&task,Task&task1)交換作業(yè)順序函數(shù)Viod InitDate()初始化鏈表Viod MAllocate(Task task,int M)為申請(qǐng)分配內(nèi)存Viod MFree(Task task,intN)釋放內(nèi)存流程圖:a. 內(nèi)存分配Yes從頭開始查表表NO 檢查完成?YesNO繼續(xù)檢索下一項(xiàng)M.size>
2、;u/size?NOYes將該分區(qū)移出返回將該分區(qū)分配給請(qǐng)求者,修改有關(guān)數(shù)據(jù)從該分區(qū)劃出u.size大小的分區(qū)M.size-u.size,<=size? b.內(nèi)存回收回收區(qū)NONONONOYesYesYesYes返 回將該表以上的所有表格下移一格與后一可用區(qū)合并與后一可用分區(qū)合并把所釋放的可用區(qū)與前一分區(qū)合并將該表目以上所有表目上移一格,并插入新釋放的可用區(qū)表目所釋放的可用區(qū)的size=0后釋放的可用區(qū)與后一可用區(qū)合并與后一可用分區(qū)相鄰且不為空表目不是第一個(gè)木目標(biāo)且與前一個(gè)可用去相鄰?順序次檢索可用資源表直到找到某表目的m.addr>aa或m.size=0 源代碼:#include
3、 <stdio.h>#include <stdlib.h>#include <string.h>#define SIZE_MIN 2#define MEMSIZE_MAX 1024#define FALSE 0#define TRUE !FALSE/*采用最佳分配法*/typedef int BOOL;typedef struct _MEM_LINK char cName; /*作業(yè)名*/ int iStartAddr; /*分區(qū)起始地址*/ int iMemSize; /*分區(qū)大小*/ BOOL iState; /*分區(qū)狀態(tài),1表示已分配, 0表示未分配*
4、/ struct _MEM_LINK* next; MEM_LINK, *PMEM_LINK;PMEM_LINK g_pslnkHead;/*初始化內(nèi)存使用情況*/void init() g_pslnkHead=(PMEM_LINK)malloc(sizeof(MEM_LINK); memset(g_pslnkHead, 0, sizeof(MEM_LINK); g_pslnkHead->iMemSize = MEMSIZE_MAX;int menu() int i; printf("nn1. 分配內(nèi)存n"); printf("2. 回收內(nèi)存n")
5、; printf("3. 顯示內(nèi)存使用情況n"); printf("4. 退出n"); printf("n請(qǐng)輸入選擇:"); scanf("%d",&i); getchar(); return(i);/*分配內(nèi)存函數(shù),c為作業(yè)名,usize是要分配的大小*/int my_malloc(char c,int usize) PMEM_LINK psNewMem = NULL, plnkTmp = NULL; BOOL bRepeatName = FALSE; int iTmp = g_pslnkHead->
6、;iMemSize - usize*SIZE_MIN; if (iTmp <= 0) /* 如果沒有足夠的空間分配 */ return FALSE; plnkTmp = g_pslnkHead; while (plnkTmp != NULL) if (plnkTmp->cName = c) bRepeatName = TRUE; break; plnkTmp = plnkTmp->next; if (bRepeatName) /* 如果作業(yè)名重復(fù) */ return FALSE; /* 創(chuàng)建新的節(jié)點(diǎn) */ psNewMem = (PMEM_LINK)malloc(sizeof
7、(MEM_LINK); /* 結(jié)構(gòu)體設(shè)零 */ memset(psNewMem, 0, sizeof(MEM_LINK); /* 設(shè)置節(jié)點(diǎn)內(nèi)容 */ psNewMem->cName = c; psNewMem->iMemSize = usize*SIZE_MIN; psNewMem->iStartAddr= MEMSIZE_MAX - g_pslnkHead->iMemSize; psNewMem->iState = TRUE; plnkTmp = g_pslnkHead; /* 查找鏈表最尾節(jié)點(diǎn) */ while (plnkTmp->next != NUL
8、L) plnkTmp = plnkTmp->next; /* 把新創(chuàng)建的節(jié)點(diǎn)加入到鏈表中 */ plnkTmp->next = psNewMem; /* 在整體內(nèi)存中去掉以分配的部分 */ g_pslnkHead->iMemSize -= usize*SIZE_MIN; return TRUE;/*回收內(nèi)存函數(shù),c是撤銷的進(jìn)程的作業(yè)名;*/int my_free(char c) PMEM_LINK plnkBK = g_pslnkHead, /* 保留上次搜索的節(jié)點(diǎn) */ plnkTmp = g_pslnkHead->next; BOOL bFind = FALSE;
9、int iFreeSize = 0; /* 搜索鏈表 */ while (plnkTmp != NULL) if (plnkTmp->cName = c) /* 如果找到節(jié)點(diǎn),退出循環(huán) */ bFind = TRUE; break; plnkBK = plnkTmp; plnkTmp = plnkTmp->next; if (bFind) /* 把找到的節(jié)點(diǎn)從鏈表中摘除并釋放 */ g_pslnkHead->iMemSize += plnkTmp->iMemSize; plnkBK->next = plnkTmp->next; /* 保留要釋放內(nèi)存的大小 *
10、/ iFreeSize = plnkTmp->iMemSize; /* 釋放 */ free(plnkTmp); /* 把未釋放內(nèi)存的開始地址提前, 防止內(nèi)存碎片 */ plnkTmp = plnkBK->next; while (plnkTmp != NULL) plnkTmp->iStartAddr -= iFreeSize; plnkTmp = plnkTmp->next; return bFind;void disp() PMEM_LINK pTmp; int i = 0; pTmp = g_pslnkHead; printf("n分區(qū)號(hào) 作業(yè)名 起始
11、地址 分區(qū)大小 狀態(tài)"); while(pTmp) printf("n%4d %c %4d %4d %4d", i, pTmp->cName, pTmp->iStartAddr, pTmp->iMemSize, pTmp->iState); pTmp = pTmp->next; i+; void main() int i; char c; init(); i = menu(); while (i!=4) if (i=1) printf("n作業(yè)名(一個(gè)字符):"); scanf("%c",&c); printf("作業(yè)占內(nèi)存大?。?quot;); scanf("%d", &i); if(my_malloc(c,i) printf("n分配成功!"); else printf("n分配失??!"); else if (i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京財(cái)經(jīng)大學(xué)紅山學(xué)院《互聯(lián)網(wǎng)的時(shí)代的企業(yè)戰(zhàn)略管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 南充文化旅游職業(yè)學(xué)院《作品排練》2023-2024學(xué)年第一學(xué)期期末試卷
- 茅臺(tái)學(xué)院《現(xiàn)代控制理論》2023-2024學(xué)年第一學(xué)期期末試卷
- 洛陽商業(yè)職業(yè)學(xué)院《概率論與數(shù)理統(tǒng)計(jì)AW》2023-2024學(xué)年第一學(xué)期期末試卷
- 潞安職業(yè)技術(shù)學(xué)院《小學(xué)音樂課程標(biāo)準(zhǔn)與教材研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 隴東學(xué)院《遙感與GS應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 六盤水師范學(xué)院《機(jī)械制造基礎(chǔ)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 柳州城市職業(yè)學(xué)院《數(shù)字信號(hào)處理應(yīng)用一》2023-2024學(xué)年第一學(xué)期期末試卷
- 瀘州職業(yè)技術(shù)學(xué)院《市場調(diào)研與預(yù)測》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年校車接送學(xué)生接送點(diǎn)布局優(yōu)化協(xié)議3篇
- GB/T 22484-2008城市公共汽電車客運(yùn)服務(wù)
- GB/T 14040-2007預(yù)應(yīng)力混凝土空心板
- 帶狀皰疹護(hù)理查房課件整理
- 奧氏體型不銹鋼-敏化處理
- 作物栽培學(xué)課件棉花
- 交通信號(hào)控制系統(tǒng)檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
- 弱電施工驗(yàn)收表模板
- 絕對(duì)成交課件
- 探究基坑PC工法組合鋼管樁關(guān)鍵施工技術(shù)
- 國名、語言、人民、首都英文-及各地區(qū)國家英文名
- API SPEC 5DP-2020鉆桿規(guī)范
評(píng)論
0/150
提交評(píng)論