操作系統(tǒng)實驗報告.docx_第1頁
操作系統(tǒng)實驗報告.docx_第2頁
操作系統(tǒng)實驗報告.docx_第3頁
操作系統(tǒng)實驗報告.docx_第4頁
操作系統(tǒng)實驗報告.docx_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

年級2013專 業(yè)軟件工程班級組號實驗室9#205日期2015/6/17實驗名稱實驗三 虛擬內(nèi)存管理實驗內(nèi)容1 局部性原理演示(數(shù)組清零)(操作系統(tǒng)觀察級)2 頁面置換算法模擬演示(算法仿真實現(xiàn)級)3 實際系統(tǒng)內(nèi)存分配演示(Linux,Windows平臺)(操作系統(tǒng)觀察級)小 組 成 員姓名學(xué)號組內(nèi)分工自我評分教師評分實驗認(rèn)真實驗嚴(yán)謹(jǐn)小組成績評定教師簽名: 年 月 日實驗分項1局部性原理演示(數(shù)組清零)(操作系統(tǒng)觀察級)實驗?zāi)康膶W(xué)習(xí)并理解程序的局部性原理實驗要求具體題目局部性原理演示(數(shù)組清零)系統(tǒng)平臺:Windows XP系統(tǒng)實驗原理步驟(算法流程)數(shù)組清零 操作系統(tǒng)支持:Windows、Linux 所屬類別:數(shù)組操作 利用雙重的for循環(huán)將指定的二維數(shù)組變量內(nèi)的所有成員值全部設(shè)置為零,不影響數(shù)組的維定義信息。 語法:無返回值 數(shù)組清零(數(shù)值數(shù)組變量)源代碼如下:#include #include #include #include #define K 4096using namespace std;int aKK;void line() int i, j; for (i=0; iK; i+) for (j=0; jK; j+) aij=0; return ; void row() int i, j; for (i=0; iK; i+) for (j=0; jK; j+) aji=0; return ; int gettime() SYSTEMTIME t; GetLocalTime(&t); return t.wSecond*1000+t.wMilliseconds;int main(int argc, char *argv) int i; int t1, t2; t1 = gettime(); for (i=0; i10; i+) line(); t2 = gettime(); cout*數(shù)組清零*n; coutn按行清零耗費時間為:t2-t1msendl; coutn-nendl; t1 = gettime(); for(i=0;i10;i+) row(); t2 = gettime(); cout 按列清零耗費時間為:t2-t1msendl; system(PAUSE); return EXIT_SUCCESS;實驗結(jié)果及分析實驗結(jié)果截圖:linux下:#include #include #include #include #include #define K 4096using namespace std;int aKK;void line()int i, j;for (i=0; iK; i+)for (j=0; jK; j+)aij=0;return ;void row()int i, j;for (i=0; iK; i+)for (j=0; jK; j+)aji=0;return ; int gettime()struct timeval tv;struct timezone tz;gettimeofday(&tv,&tz);return tv.tv_sec*1000 + tv.tv_usec/1000;int main(int argc, char *argv)int i;int t1, t2;t1 = gettime(); for (i=0; i10; i+) line(); t2 = gettime();cout*數(shù)組清零*n;coutn按行清零耗費時間為:t2-t1msendl;coutn-nendl;t1 = gettime();for(i=0;i10;i+)row();t2 = gettime();cout 按列清零耗費時間為:t2-t1msendl;return 0;心得體會通過這個實驗,對Windows內(nèi)存管理機制了解清楚,有./效的利用C+內(nèi)存函數(shù)管理和使用內(nèi)存。假設(shè)數(shù)據(jù)存在物理內(nèi)存中,系統(tǒng)沒有RAM頁面后,會將這個頁面暫時寫進虛擬內(nèi)存頁文件中,這樣來回的倒騰系統(tǒng)會很慢;如果那一頁數(shù)據(jù)已經(jīng)不需要的話,系統(tǒng)可以直接使用。當(dāng)程序需要它那一頁時,系統(tǒng)會分配另一頁給它。實驗分項2頁面置換算法模擬演示(算法仿真實現(xiàn)級)實驗?zāi)康耐ㄟ^模擬實現(xiàn)請求頁式存儲管理的幾種基本頁面置換算法,了解虛擬存儲技術(shù)的特點,掌握虛擬存儲請求頁式存儲管理中幾種基本頁面置換算法的基本思想和實現(xiàn)過程。實驗要求具體題目頁面置換算法模擬演示系統(tǒng)平臺windows操作系統(tǒng)實驗原理步驟(算法流程)設(shè)計一個虛擬存儲區(qū)和內(nèi)存工作區(qū),并使用下述算法計算訪問命中率。1、先進先出的算法(FIFO)2、最近最久未使用算法(LRU)輸入頁面訪問序列 取訪問頁號查頁表是否缺頁 是 否置缺頁標(biāo)記flag為“*”按照各自算法淘汰頁面調(diào)入所訪問頁面1、先進先出法(FIFO)入口 查詢指針前進一步,指向下一個頁面 置頁面訪問時間+1頁面訪問時間是否最大 否 是選擇該頁面淘汰 返回2.最近最久沒使用(LRU) 進入查詢指針前進一步,指向下一頁面?zhèn)€頁面 先前訪問的頁面的時間t+;前面已訪問過此頁面字段t=max?返回選擇該頁面淘汰 否實驗部分代碼:1、FIFO算法#include stdio.h#define n 20#define m 4void main()int ymn,i,j,q,memm=-1,-1,-1,-1,tablemn;char flag,fn;printf(請輸入頁面訪問序列n);for(i=0;in;i+) scanf(%d,&ymi);printf(n);for(i=0;i0;j-) /淘汰最先調(diào)入的頁面調(diào)入當(dāng)前訪問的 memj=memj-1; mem0=ymi; for(j=0;jm;j+) tableji=memj; fi=flag; printf(輸出結(jié)果為下表(-1代表為空,*代表有缺頁):n);for(i=0;in;i+) printf(“%3d”,ymi);printf(“n”);for(i=0;i=n;i+) printf(“%s”, “-”);printf(“n”);for(i=0;im;i+) for(j=0;jn;j+)printf(%3d,tableij);printf(n); for(i=0;in;i+) printf(%3c,fi);printf(”n”);2、LRU算法#include stdio.h#define n 20#define m 5void main()int ymn,i,j,q,memm=-1,-1,-1,-1,-1,tablemn;char flag,fn;printf(請輸入頁面訪問序列n);for(i=0;in;i+) scanf(%d,&ymi);printf(n);for(i=0;in;i+) /查頁表,看是否缺頁 q=0; while(ymi!=memq)&(q!=m) q+; if(q=m) flag=*; /缺頁,則置標(biāo)志flag為* else flag= ; if(q0;j-) memj=memj-1;else for(j=q-1;j0;j-) memj=memj-1;mem0=ymi;for(j=0;jm;j+) tableji=memj;fi=flag; printf(輸出結(jié)果為下表(-1代表為空,*代表有缺頁):n);for(i=0;in;i+) printf(“%3d”,ymi);printf(“n”);for(i=0;i=n;i+) printf(“%s”, “-”);printf(“n”);for(i=0;im;i+) for(j=0;jn;j+)printf(%3d,tableij);printf(n); for(i=0;in;i+) printf(%3c,fi);printf(“n”);實驗結(jié)果及分析1:2:心得體會通過本次實驗, 我明白如果一個經(jīng)常使用的頁面被置換出去,很有可能很快又要被調(diào)入內(nèi)存,帶來不必要的額外開銷。頁面置換算法的優(yōu)劣將會影響到虛擬存儲系統(tǒng)的性能,進而影響到整個操作系統(tǒng)的性能。實驗分項3實際系統(tǒng)內(nèi)存分配演示(Linux,Windows平臺)(操作系統(tǒng)觀察級)實驗?zāi)康膶W(xué)習(xí)并理解實際系統(tǒng)內(nèi)存分配原理實驗要求具體題目實際系統(tǒng)內(nèi)存分配演示(Linux,Windows平臺)(操作系統(tǒng)觀察級)系統(tǒng)平臺Windows XP系統(tǒng)實驗原理步驟(算法流程)內(nèi)存管理是計算機系統(tǒng)以一種優(yōu)化性能的方式,在需要內(nèi)存的不同進程之間將有限的內(nèi)存進行分配的過程,執(zhí)行這種任務(wù)的通用技術(shù)叫做虛擬內(nèi)存技術(shù)。模擬操作系統(tǒng)在內(nèi)存的分配以及回收所用內(nèi)存的運行過程,采用首次適應(yīng)法來進行,本程序運行實際上不用輸入測試數(shù)據(jù),它能利用隨機函數(shù)生成測試數(shù)據(jù),對于用戶來講,可以直接觀察運行結(jié)果。源代碼如下:#include #include /操作系統(tǒng)首次合并算法內(nèi)存實現(xiàn) malloc free 函數(shù)int g_MemoryAllocLen = 10;typedef struct double_link struct double_link * front; struct double_link * rear; int size; int state; /內(nèi)存空間狀態(tài) 0空閑 1占用doublelink_ST,*lpdoublelink_ST;/* 函數(shù)名稱:Createdoublelis* 功能描述:創(chuàng)建內(nèi)存節(jié)點 * 輸入?yún)?shù):lpdoublelink_ST head* 輸出參數(shù): head * 返 回 值:0 */doublelink_ST * Init_doublelinklist(lpdoublelink_ST head) head = (lpdoublelink_ST)malloc(sizeof(doublelink_ST); head-front = NULL; head-rear = NULL; head-size = 1; head-state = 1; return head; /* 函數(shù)名稱:Createdoublelis* 功能描述:創(chuàng)建長度為g_MemoryAllocLen的內(nèi)存節(jié)點鏈表 * 輸入?yún)?shù): void* 輸出參數(shù): 無 * 返 回 值:0 */void Createdoublelist(lpdoublelink_ST head, int space) lpdoublelink_ST p = head; for(int i =0;isize = *(space+i); s-state = 0; s-rear = NULL; s-front = NULL; p-rear = s; s-front = p; p = s; /* 函數(shù)名稱:selfmalloc* 功能描述:分配內(nèi)存節(jié)點 * 輸入?yún)?shù): void* 輸出參數(shù): 無 * 返 回 值:0 */int self_malloc(lpdoublelink_ST head,int alloc_spacre) int place = 0; lpdoublelink_ST p = head; for(p,place=0;p-sizerear,place+); if(p-size=alloc_spacre) /如果分配的空間相等 p-state = 1; return place; else p-size = p-size - alloc_spacre; lpdoublelink_ST newspace = (lpdoublelink_ST)malloc(sizeof(doublelink_ST); newspace-state = 1; newspace-size = alloc_spacre;newspace-front = p-front; /插入節(jié)點 p-front-rear = newspace; newspace-rear = p; p-front = newspace; g_MemoryAllocLen += 1; return place; /* 函數(shù)名稱 self_free* 功能描述:釋放節(jié)點 * 輸入?yún)?shù): void* 輸出參數(shù): 無 * 返 回 值:0 */void self_free(lpdoublelink_ST head,int place ) lpdoublelink_ST p = head; for(int i=0;irear; if(1 = p-state ) /釋放節(jié)點的左邊為空閑塊 if(0=p-front-state) & (1=p-rear-state) p-front-size += p-size; p-front-rear = p-rear; p-rear-front = p-front; free(p); p = NULL; g_MemoryAllocLen -= 1; return; /釋放節(jié)點的右邊為空閑塊 if(1=p-front-state) & (0=p-rear-state) p-rear-size +=p-size; p-front-rear = p-rear; p-rear-front = p-front; g_MemoryAllocLen -= 1; free(p); p = NULL; return; /釋放節(jié)點的左右兩邊都為空閑塊 if(0=p-rear-state) & (0=p-front-state) p-rear-size += p-front-size + p-size; p-front-front-rear = p-rear; p-rear-front = p-front-front; g_MemoryAllocLen -= 2; free(p-front); p-front = NULL; free(p); p = NULL; return; /釋放節(jié)點的左右兩邊都為占用塊 if(1=p-rear-state)&(1=p-front-state) p-state = 1; return; else printf(沒有找到該釋放的節(jié)點n); /* 函數(shù)名稱 print_memory* 功能描述:打印內(nèi)存空間情況 * 輸入?yún)?shù): void* 輸出參數(shù): 無 * 返 回 值:0 */void print_memory(lpdoublelink_ST p,int size) int i; for (i=0;irear; printf(序列:%3d 分配空間:%3d 是否空閑:%dn,i,p-size,p-state); printf(n);int main(void)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論