![內存動態(tài)分配和回收的模擬實驗_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/8c69f8f7-b2d4-444c-ac7a-b3e906a5df63/8c69f8f7-b2d4-444c-ac7a-b3e906a5df631.gif)
![內存動態(tài)分配和回收的模擬實驗_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/8c69f8f7-b2d4-444c-ac7a-b3e906a5df63/8c69f8f7-b2d4-444c-ac7a-b3e906a5df632.gif)
![內存動態(tài)分配和回收的模擬實驗_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/8c69f8f7-b2d4-444c-ac7a-b3e906a5df63/8c69f8f7-b2d4-444c-ac7a-b3e906a5df633.gif)
![內存動態(tài)分配和回收的模擬實驗_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/8c69f8f7-b2d4-444c-ac7a-b3e906a5df63/8c69f8f7-b2d4-444c-ac7a-b3e906a5df634.gif)
![內存動態(tài)分配和回收的模擬實驗_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/8c69f8f7-b2d4-444c-ac7a-b3e906a5df63/8c69f8f7-b2d4-444c-ac7a-b3e906a5df635.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、操作系統(tǒng)實驗報告內存動態(tài)分區(qū)分配和回收的模擬實現 班級:2013級軟件工程1班 學號:X X X 姓名:蕭氏一郎數據結構說明:Struct SubAreaListA 分配空間鏈表Struct SubAreaListF 空閑分區(qū)鏈表Viod Swap(Task&task,Task&task1)交換作業(yè)順序函數Viod InitDate()初始化鏈表Viod MAllocate(Task task,int M)為申請分配內存Viod MFree(Task task,intN)釋放內存流程圖:a. 內存分配Yes從頭開始查表表NO 檢查完成?YesNO繼續(xù)檢索下一項M.size>
2、;u/size?NOYes將該分區(qū)移出返回將該分區(qū)分配給請求者,修改有關數據從該分區(qū)劃出u.size大小的分區(qū)M.size-u.size,<=size? b.內存回收回收區(qū)NONONONOYesYesYesYes返 回將該表以上的所有表格下移一格與后一可用區(qū)合并與后一可用分區(qū)合并把所釋放的可用區(qū)與前一分區(qū)合并將該表目以上所有表目上移一格,并插入新釋放的可用區(qū)表目所釋放的可用區(qū)的size=0后釋放的可用區(qū)與后一可用區(qū)合并與后一可用分區(qū)相鄰且不為空表目不是第一個木目標且與前一個可用去相鄰?順序次檢索可用資源表直到找到某表目的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;/*初始化內存使用情況*/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"); printf("2. 回收內存n")
5、; printf("3. 顯示內存使用情況n"); printf("4. 退出n"); printf("n請輸入選擇:"); scanf("%d",&i); getchar(); return(i);/*分配內存函數,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è)名重復 */ return FALSE; /* 創(chuàng)建新的節(jié)點 */ psNewMem = (PMEM_LINK)malloc(sizeof
7、(MEM_LINK); /* 結構體設零 */ memset(psNewMem, 0, sizeof(MEM_LINK); /* 設置節(jié)點內容 */ psNewMem->cName = c; psNewMem->iMemSize = usize*SIZE_MIN; psNewMem->iStartAddr= MEMSIZE_MAX - g_pslnkHead->iMemSize; psNewMem->iState = TRUE; plnkTmp = g_pslnkHead; /* 查找鏈表最尾節(jié)點 */ while (plnkTmp->next != NUL
8、L) plnkTmp = plnkTmp->next; /* 把新創(chuàng)建的節(jié)點加入到鏈表中 */ plnkTmp->next = psNewMem; /* 在整體內存中去掉以分配的部分 */ g_pslnkHead->iMemSize -= usize*SIZE_MIN; return TRUE;/*回收內存函數,c是撤銷的進程的作業(yè)名;*/int my_free(char c) PMEM_LINK plnkBK = g_pslnkHead, /* 保留上次搜索的節(jié)點 */ plnkTmp = g_pslnkHead->next; BOOL bFind = FALSE;
9、int iFreeSize = 0; /* 搜索鏈表 */ while (plnkTmp != NULL) if (plnkTmp->cName = c) /* 如果找到節(jié)點,退出循環(huán) */ bFind = TRUE; break; plnkBK = plnkTmp; plnkTmp = plnkTmp->next; if (bFind) /* 把找到的節(jié)點從鏈表中摘除并釋放 */ g_pslnkHead->iMemSize += plnkTmp->iMemSize; plnkBK->next = plnkTmp->next; /* 保留要釋放內存的大小 *
10、/ iFreeSize = plnkTmp->iMemSize; /* 釋放 */ free(plnkTmp); /* 把未釋放內存的開始地址提前, 防止內存碎片 */ 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ū)號 作業(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è)名(一個字符):"); scanf("%c",&c); printf("作業(yè)占內存大?。?quot;); scanf("%d", &i); if(my_malloc(c,i) printf("n分配成功!"); else printf("n分配失?。?quot;); else if (i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 閱讀《金庸》小說知識競賽考試題庫
- 財產保險合同(2篇)
- 智慧照明控制系統(tǒng)合同(2篇)
- 2025年蘇科新版七年級歷史下冊階段測試試卷含答案
- 2025年湘師大新版選擇性必修2化學上冊月考試卷
- 2025年廣州體育職業(yè)技術學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年平頂山工業(yè)職業(yè)技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 初級經濟師人力資源管理-2025初級經濟師《人力資源管理》預測試卷3
- 初級經濟師基礎知識-初級經濟師考試《基礎知識》模擬試卷4
- 2025年商丘職業(yè)技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 走新型城鎮(zhèn)化道路-實現湘潭城鄉(xiāng)一體化發(fā)展
- 江蘇中國中煤能源集團有限公司江蘇分公司2025屆高校畢業(yè)生第二次招聘6人筆試歷年參考題庫附帶答案詳解
- 【語文】第23課《“蛟龍”探?!氛n件 2024-2025學年統(tǒng)編版語文七年級下冊
- 北師版七年級數學下冊第二章測試題及答案
- 2025年全體員工安全意識及安全知識培訓
- 2025警察公安派出所年終總結工作匯報
- 機動車檢測站新換版20241124質量管理手冊
- 2024年決戰(zhàn)行測5000題言語理解與表達(培優(yōu)b卷)
- 中國游戲發(fā)展史課件
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- 工程數學試卷及答案
評論
0/150
提交評論