實(shí)驗(yàn)十二內(nèi)存管理和頁(yè)面置換算法的模擬概要_第1頁(yè)
實(shí)驗(yàn)十二內(nèi)存管理和頁(yè)面置換算法的模擬概要_第2頁(yè)
實(shí)驗(yàn)十二內(nèi)存管理和頁(yè)面置換算法的模擬概要_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)十二 內(nèi)存管理和頁(yè)面置換算法的模擬實(shí)驗(yàn)?zāi)康模?. 了解 Linux 如何實(shí)現(xiàn)虛擬存儲(chǔ);2. 分析并實(shí)現(xiàn)一個(gè)與缺頁(yè)相關(guān)的程序。3. 通過(guò)用C語(yǔ)言實(shí)現(xiàn)OPT、FIFO和LRU三種頁(yè)面調(diào)度算法,掌握虛擬存儲(chǔ) 器的實(shí)現(xiàn)方法,了解內(nèi)存分頁(yè)管理的相關(guān)細(xì)節(jié),包括分頁(yè)策略、頁(yè)表結(jié) 構(gòu)和頁(yè)面置換算法,并比較各種頁(yè)面置換算法的優(yōu)缺點(diǎn)。實(shí)驗(yàn)內(nèi)容:1. Linux 內(nèi)核中存在一個(gè)變量記錄缺頁(yè)中斷次數(shù),可以利用這個(gè)變量來(lái)統(tǒng) 計(jì)一段時(shí)間內(nèi)產(chǎn)生缺頁(yè)中斷的次數(shù)。用戶可以指定統(tǒng)計(jì)的時(shí)間長(zhǎng)度,也 可以用默認(rèn)的時(shí)間段長(zhǎng)度。2. 用 C 語(yǔ)言模擬 OPT、 FIFO 和 LRU 三種頁(yè)面置換算法。實(shí)驗(yàn)步驟:(一)查看 stat

2、文件在 Linux 系統(tǒng)的 /proc 文件系統(tǒng)中有一個(gè)記錄系統(tǒng)當(dāng)前基本狀況的文件 stat。 該文件中有一節(jié)是關(guān)于中斷次數(shù)的。 這一節(jié)中記錄了從系統(tǒng)啟動(dòng)后到當(dāng)前時(shí)刻發(fā) 生的系統(tǒng)中斷的總次數(shù), 之后依次是 0 號(hào)中斷發(fā)生的次數(shù), 1 號(hào)中斷發(fā)生的次數(shù), 依次類推。其中缺頁(yè)中斷是第 14 號(hào)中斷,也就是在關(guān)鍵字 intr 之后的第 16 項(xiàng)。請(qǐng)進(jìn)入/proc目錄,運(yùn)行l(wèi)ess stat命令,記錄下系統(tǒng)當(dāng)前發(fā)生缺頁(yè)次數(shù)。(二)編寫一個(gè)記錄一段時(shí)間內(nèi)系統(tǒng)缺頁(yè)次數(shù)的統(tǒng)計(jì)程序可以利用 stat 文件提供的數(shù)據(jù)在一段時(shí)間的開始時(shí)刻和結(jié)束時(shí)刻分別讀取 缺頁(yè)中斷發(fā)生的次數(shù), 然后做一個(gè)簡(jiǎn)單的減法, 就可以得出

3、這段時(shí)間內(nèi)發(fā)生的缺 頁(yè)中斷次數(shù)。 由于系統(tǒng)動(dòng)態(tài)更新的, 過(guò)去時(shí)刻的數(shù)據(jù)無(wú)法采集到, 所以這里的開 始時(shí)刻最早也只能是當(dāng)前時(shí)刻, 實(shí)驗(yàn)采用的統(tǒng)計(jì)時(shí)間段就是從當(dāng)前時(shí)刻開始的一 段時(shí)間。參考代碼如下圖 1 所示。#include <signal.h>#include <sys/time.h>#include <unistd.h>#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#define FILENAME

4、"/proc/stat"/* 指定文件操作的對(duì)象 */5秒*/#define DEFAULTTIME 5/* 設(shè)定缺省的統(tǒng)計(jì)時(shí)間段長(zhǎng)度為static void sig_handler(int signo);int get_page_fault(void);int readfile(char *data);int exit_flag=0;int page_fault;int main(int argc, char *argv)struct itimerval v;int cacl_time;if (signal(SIGALRM, sig_handler) = SIG_ERR)

5、printf("Unable to create handler for SIGALRMn");return -1;if (argc <=2 )page_fault = get_page_fault();/* 初始化 time_real*/if (argc < 2)printf("Use default time!n");cacl_time = DEFAULTTIME;else if (argc = 2)printf("Use user's timen");cacl_time = atoi(argv1);else

6、if (argc >2)printf("Useage:mypage timen");return 0;= = 0; = = 0; setitimer(ITIMER_REAL, &v, NULL);while (!exit_flag)printf("In %d secends,system calls %d page fault!n", cacl_time, page_fault); return 0;static void sig_handler(int signo)if(signo = SIGALRM)/* 當(dāng) ITIMER_REAL 為

7、0時(shí),這個(gè)信號(hào)被發(fā)出 */ page_fault = page_fault - get_page_fault(); exit_flag = 1; /*該函數(shù)調(diào)用文件操作函數(shù) readfile ,得到當(dāng)前系統(tǒng)的缺頁(yè)中斷次數(shù) */ int get_page_fault(void) char d50; int retval;/* 讀取缺頁(yè)中斷次數(shù) */ retval = readfile(d); if (retval<0) printf("read data from file failed!n"); exit(0);printf("Now the number

8、of page fault is %sn", d); return atoi(d);/* 該函數(shù)對(duì) /proc/stat 文件內(nèi)容進(jìn)行讀操作,讀取指定項(xiàng)的值 */ int readfile(char *data)int fd;int seekcount = 0;int retval = 0;int i=0;int count = 0; char c, string50;fd = open(FILENAME,O_RDONLY);if (fd < 0)printf("Open file /proc/stat failed!n"); return -1;/*查找s

9、tat文件中的關(guān)鍵字intr*/do i = 0; do lseek(fd, seekcount, SEEK_SET);retval = read(fd, &c, sizeof(char);if (retval < 0)printf("read file error!n");return retval;seekcount += sizeof(char);if (c = ' ' | c = 'n')stringi = 0;break;if(c >= '0' && c<= '9&#

10、39;) | (c >= 'a' && c <= 'z') | (c >= 'A' && c <= 'Z') stringi+ = c;while(1);while(strcmp("intr", string);printf("find intr!n");/*讀取缺頁(yè)次數(shù) */do lseek(fd, seekcount, SEEK_SET); retval = read(fd, &c, sizeof(char); if(ret

11、val < 0)printf("read file error!n"); return retval;seekcount += sizeof(char); if (c = ' ' | c = 'n')stringi = 0;i = 0;count+;if(c >= '0' && c<= '9') | (c >= 'a' && c <= 'z') | (c >= 'A' && c <= 'Z') stringi+ = c;while(count != 16);close(fd);strcpy(data, string);return 0;圖 1 統(tǒng)計(jì)缺頁(yè)次數(shù)(三) 模擬簡(jiǎn)單的置換算法簡(jiǎn)單的頁(yè)面置換算法有 OPT、FIFO 和 LRU 三種。請(qǐng)編寫程序模擬這三個(gè)置 換算法。提示:i. 每個(gè)頁(yè)面對(duì)應(yīng)一個(gè)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論