嵌入式內(nèi)存管理模擬系統(tǒng)_第1頁
嵌入式內(nèi)存管理模擬系統(tǒng)_第2頁
嵌入式內(nèi)存管理模擬系統(tǒng)_第3頁
嵌入式內(nèi)存管理模擬系統(tǒng)_第4頁
嵌入式內(nèi)存管理模擬系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、嵌入式內(nèi)存管理模擬系統(tǒng) 學(xué)號: 姓名:汪如勝 專業(yè):軟件工程 班級:移動一班 目錄:一、 實(shí)驗(yàn)?zāi)康呐c要求二、 實(shí)驗(yàn)內(nèi)容.三、 實(shí)驗(yàn)信息四、 系統(tǒng)概述.五、 內(nèi)存管理的作用.六、 實(shí)驗(yàn)過程1 程序開發(fā)運(yùn)行平臺2 系統(tǒng)處理流程圖3 程序的運(yùn)行4 實(shí)驗(yàn)總結(jié)七、 源代碼一、實(shí)驗(yàn)?zāi)康呐c要求(1)實(shí)驗(yàn)?zāi)康模?.基本掌握嵌入式C編程的基本思路和主要方法; 2.達(dá)到熟練C語言基本知識和技能的高級應(yīng)用;3.能夠基于已有的函數(shù)功能庫進(jìn)行有效的嵌入式系統(tǒng)開發(fā);4.能夠利用所學(xué)的操作系統(tǒng)和內(nèi)存管理基本知識和技能,解決5.簡單嵌入式的系統(tǒng)程序的設(shè)計(jì)。(2)實(shí)驗(yàn)要求: 1.要求利用C語言面向過程的編程思想來完成系統(tǒng)的設(shè)計(jì)

2、; 2.實(shí)現(xiàn)要求的功能; 3.畫出功能模塊圖; 4.進(jìn)行簡單界面設(shè)計(jì),能夠?qū)崿F(xiàn)友好的交互; 5.具有清晰的程序流程圖和數(shù)據(jù)結(jié)構(gòu)的詳細(xì)定義;二、實(shí)驗(yàn)內(nèi)容1.可以實(shí)現(xiàn)內(nèi)存的分配與回收。2.內(nèi)存的分配至少有兩種分配方法可選擇(如首次適應(yīng)算法和最佳適應(yīng)算法)。3.在回收過程中能夠合并空閑區(qū)。4.可以在屏幕中顯示出分配和回收的具體情況。三、實(shí)驗(yàn)信息有關(guān)該系統(tǒng)基本信息的描述,如:Linux c函數(shù)庫,鏈表,內(nèi)存分配與回收等。四、系統(tǒng)概論 嵌入式系統(tǒng)功能的不斷增加將直接導(dǎo)致系統(tǒng)內(nèi)存的不足,針對應(yīng)用程序由于內(nèi)存不足而造成系統(tǒng)的無法響應(yīng)問題,對系統(tǒng)內(nèi)存和單個進(jìn)程內(nèi)存使用情況進(jìn)行分析,從系統(tǒng)和進(jìn)程兩方面對內(nèi)存進(jìn)行

3、優(yōu)化,以使更多的程序得到響應(yīng),提高系統(tǒng)的并發(fā)性。對于資源緊張的嵌入式系統(tǒng),如果編寫的程序造成內(nèi)存泄露,運(yùn)行的初始階段可以正常運(yùn)行,但是當(dāng)因內(nèi)存泄露的積累而造成內(nèi)存資源耗盡時,該應(yīng)用程序便會崩潰;如果是一個資源相對豐富的嵌入式系統(tǒng),引起內(nèi)存泄露的應(yīng)用程序可能可以穩(wěn)定運(yùn)行較長時間后才出現(xiàn)資源耗盡情況,此種情況在測試應(yīng)用程序時期難以發(fā)現(xiàn),但對實(shí)際應(yīng)用會有重大影響。 嵌入式系統(tǒng)中對實(shí)時性的保證,要求內(nèi)存分配要盡可能地快。因此在嵌入式系統(tǒng)中,不可能采用通用操作系統(tǒng)中地復(fù)雜而完善地內(nèi)存策略,一般都采取簡單、快速地內(nèi)存管理策略。嵌入式內(nèi)存分配地請求必須得到滿足,嵌入式系統(tǒng)應(yīng)用環(huán)境千變?nèi)f化,其中有一些是對可靠

4、性要求極高地。比如,汽車地自動駕駛系統(tǒng)中,系統(tǒng)檢測到即將撞車,如果因?yàn)閮?nèi)存分配失敗而不能執(zhí)行相應(yīng)的操作,就會發(fā)生車毀人亡的慘劇,內(nèi)存分配要盡可能減少浪費(fèi),系統(tǒng)有限得空間決定了可配置得內(nèi)存容量是很有限的。五、內(nèi)存管理的作用內(nèi)存管理模塊通常是操作系統(tǒng)內(nèi)核的一部分,是組織內(nèi)存以容納內(nèi)核和各待執(zhí)行進(jìn)程,根據(jù)當(dāng)前內(nèi)存使用狀況,在需要時為進(jìn)程分配內(nèi)存,其使用完畢后釋放并回收內(nèi)存。內(nèi)存管理與操作系統(tǒng)和底層硬件體系結(jié)構(gòu)密切相關(guān), 嵌入式系統(tǒng)的內(nèi)存相當(dāng)有限,需要高效地使用,內(nèi)存分配和回收必須迅速,嵌入式系統(tǒng)的運(yùn)行和內(nèi)存管理必須安全可靠。 嵌入式操作系統(tǒng)的內(nèi)存管理模擬主要采用兩個內(nèi)存分配算法,首先用戶要先選擇適應(yīng)

5、算法,然后用戶提出內(nèi)存空間的申請;系統(tǒng)根據(jù)申請者的要求,按照一定的分配策略分析內(nèi)存空間的使用情況,找出能滿足請求的空閑區(qū),分給申請者;當(dāng)程序執(zhí)行完畢或主動歸還內(nèi)存資源時,系統(tǒng)要收回它所占用的內(nèi)存空間或它歸還的部分內(nèi)存空間。當(dāng)要進(jìn)行內(nèi)存分配時,則要求輸入要申請內(nèi)存的大小,然后程序會根據(jù)剩余的內(nèi)存大小進(jìn)行具體分配。六、實(shí)驗(yàn)過程1. 程序開發(fā)運(yùn)行平臺 開發(fā)平臺:linux系統(tǒng)的操作環(huán)境 GCC編譯器 運(yùn)行平臺:linux系統(tǒng)的操作環(huán)境2. 流程圖(1) 系統(tǒng)處理流程圖(2)主程序流程圖(3)內(nèi)存回收(4)內(nèi)存分配(5)函數(shù)關(guān)系調(diào)用圖釋放內(nèi)存顯示內(nèi)存狀況自動演示申請內(nèi)存Display()Releasm

6、()Getchar()Display()Getchar()Getm()Main()實(shí)驗(yàn)步驟1. 空閑區(qū)結(jié)構(gòu)體typedef struct int i; /記錄區(qū)號 char *t;/記錄區(qū)的起始地址 int flag;/表明該區(qū)是否是空閑的page;2. 結(jié)點(diǎn)標(biāo)識typedef struct nodeint c; /進(jìn)程所占內(nèi)存的大小int i; /進(jìn)程所占的內(nèi)存的區(qū)號int fg; /表明該進(jìn)程號已經(jīng)存在struct node *next;nd;nd *headMAX/4;page pgMAX/4;int init(char *);int getm(int);int releasem(int

7、);int display();int sleep(int);3. 內(nèi)存回收:先釋放內(nèi)存,看內(nèi)存大小是否符合進(jìn)程所站的內(nèi)存大小,如果不符合再申請,最后釋放回收。int releasem(int x) int n=0,i=0,j=0,flag=0; nd *p; long t; srand(unsigned)time(&t); if (x=0) while(1) printf(請輸入要釋放內(nèi)存的進(jìn)程號:); scanf(%d,&n); if(headn-fg=0)printf(該進(jìn)程號不存在,請重新輸入!n);continue; break; if(x=1) while(1) n=rand()%

8、10; if(headn-fg=0)continue; printf(釋放進(jìn)程%d的內(nèi)存n,n); sleep(S); break; p=head0; i=0; for(i=0;ifg=0; p=headi-next; while(p!=NULL) pgp-i.flag=0; for(j=0;jnext; break; return 0;5. 內(nèi)存分配:按照要分配內(nèi)存的大小分配內(nèi)存,不足再申請,直到把所有的進(jìn)程都分配到內(nèi)存,進(jìn)程結(jié)束后釋放內(nèi)存,讓下一個進(jìn)程利用。int display() FILE *fp; int i; fp=fopen(d:mem1.txt,a+); printf(模擬內(nèi)存

9、分配狀況n); for(i=0;iMAX/4;i+) if(pgi.flag=1) printf(); printf(%c ,*(pgi.t); fprintf(fp,%c ,*(pgi.t); printf(%c ,*(pgi.t+1);fprintf(fp,%c ,*(pgi.t+1); printf(%c ,*(pgi.t+2); fprintf(fp,%c ,*(pgi.t+2); printf(%c ,*(pgi.t+3); fprintf(fp,%c ,*(pgi.t+3); else printf(_ _ _ _ ); fprintf(fp,_ _ _ _ ); if(i+1)%

10、4=0)printf(n);fprintf(fp,n); printf(nn);fprintf(fp,nn); printf(起始地址:%dn,pg0.t); fprintf(fp,起始地址:%dn,pg0.t); printf(進(jìn)程狀況:n);fprintf(fp,進(jìn)程狀況:n); for(i=0;ifg=1) printf(進(jìn)程號:%d分配內(nèi)存大小%dn,i,headi-c); fprintf(fp,進(jìn)程號:%d分配內(nèi)存大小%dn,i,headi-c); printf(n); fprintf(fp,n); fclose(fp); return 0; int sleep(int x) lon

11、g t,j,k; j=time(&t); while(1) k=time(&t); if(k-j=x) return 0; 4. 實(shí)驗(yàn)總結(jié)在C+和C語言開發(fā)中,指針、內(nèi)存一直是學(xué)習(xí)的重點(diǎn)。因?yàn)镃+語言作為一種偏底層的中低級語言,提供了大量的內(nèi)存直接操作的方法,使程序的靈活度最大化,作為操作系統(tǒng),磁盤上內(nèi)存的申請,調(diào)用,釋放和對于不同進(jìn)程間內(nèi)存空間的利用,認(rèn)識了軟件生命周期的各個環(huán)境,包括構(gòu)思、設(shè)計(jì)、編寫、調(diào)試、運(yùn)行等。源代碼:#include#include#include#include#include#define max 100#define S 1typedef structint i

12、;char *t;int flag;page;typedef struct nodeint c;int i;int fg;struct node *next;nd;int init(char *);int getm(int);int releasem(int);int display();int sleep(int);nd *headmax;page pgmax;int main()char *p;int n,m,j,k,i,l;p=(char *)malloc(MAX*sizeof(char); init(p); for(i=0;iMAX/4;i+) pgi.i=i; pgi.t=p+i*4

13、; pgi.flag=0;while(1) printf(n自動演示內(nèi)存管理請按1n手工管理按2n退出按0 n);scanf(%d,&l);if(l=2) while(1) printf(_n); printf(|1 申請內(nèi)存 |n); printf(|2 釋放內(nèi)存 |n); printf(|3 顯示內(nèi)存狀況 |n); printf(|0 退出 |n); printf(_); printf( 請輸入選擇:); scanf(%d,&k); switch(k) case 1:system(cls); getm(0);getchar();break; case 2:system(cls);relea

14、sem(0);getchar();break; case 3:system(cls); display();getchar();break; case 0:return 0; default:printf(輸入錯誤,請重新輸入);break; else if(l=1) long t; int i; srand(unsigned)time(&t); system(cls); for(i=0;i);sleep(1); printf(現(xiàn)在);sleep(1); printf(開始);sleep(1); printf(演示);sleep(1); printf(內(nèi)存);sleep(1); printf(

15、管理n);sleep(1); for(i=0;i4;i+) getm(1); display(); sleep(3); else break;int init(char *p)int i;for(i=0;inext=NULL; headi-fg=0;for(i=0;iMAX;i+)*(p+i)=95; return 0;int getm(int x)int i,j,m,n,k=0,flag=0,a=0,b=0;nd *p,*q;char ch;long t; srand(unsigned)time(&t); if(x=0)while(1) printf(輸入進(jìn)程號:); scanf(%d,&n

16、); if(n10) printf(進(jìn)程號不合法,請重新輸入n); continue; q=headn; if(headn-fg=1)printf(該進(jìn)程號已經(jīng)存在,請重新輸入!n);continue; else headn-fg=1; printf(輸入該進(jìn)程申請的內(nèi)存大?。?; scanf(%d,&m); headn-c=m; break; if(x=1) while(1) n=rand()%10; q=headn; if(headn-fg=1)continue; else headn-fg=1; printf(產(chǎn)生新進(jìn)程-進(jìn)程號:%dn,n); while(1) m=rand()%MAX

17、; if(mMAX/10)break; printf(該進(jìn)程申請的內(nèi)存大小:%dn,m);headn-c=m; break; if(m%4=0)j=m/4;else j=m/4+1;for(i=0,k=0;i=j) headn-i=n; for(i=0;i=j)break; if(pgi.flag=0) p=(nd *)malloc(sizeof(nd); q-next=p; p-i=i; q=p; p-next=NULL; flag=1; pgi.flag=1; if(a=j-1&m%4!=0) for(b=0;bm%4;b+)*(pgi.t+b)=(n+48); else for(b=0;

18、b4;b+)*(pgi.t+b)=(n+48); a+; return 0;if(x=0)printf(n內(nèi)存剩余空間不足,請釋放先釋放一部分內(nèi)存!nnn);return 0;if(x=1) system(cls); printf(n內(nèi)存剩余空間不足,開始釋放一部分內(nèi)存!nnn); sleep(S); while(1) releasem(1);display(); sleep(S); if(m%4=0)j=m/4; else j=m/4+1; for(i=0;iMAX/4;i+) if(pgi.flag=0)k+; if(ki=n; for(i=0;i=j)break; if(pgi.flag

19、=0) p=(nd *)malloc(sizeof(nd); q-next=p; p-i=i; q=p; p-next=NULL; flag=1; pgi.flag=1; if(a=j-1&m%4!=0) for(b=0;bm%4;b+)*(pgi.t+b)=(n+48); else for(b=0;bfg=0)printf(該進(jìn)程號不存在,請重新輸入!n);continue; break; if(x=1) while(1) n=rand()%10; if(headn-fg=0)continue; printf(釋放進(jìn)程%d的內(nèi)存n,n); sleep(S); break; p=head0;i=0;for(i=0;ifg=0; p=headi-next; while(p!=NULL) pgp-i.flag=0; for(j=0;jnext; break; return 0;int display() FILE *fp; int i;fp=fopen(d:mem1.txt,a+); printf(模擬內(nèi)存分配狀

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論