操作系統(tǒng)原理課程實(shí)驗(yàn)指導(dǎo)書_第1頁
操作系統(tǒng)原理課程實(shí)驗(yàn)指導(dǎo)書_第2頁
操作系統(tǒng)原理課程實(shí)驗(yàn)指導(dǎo)書_第3頁
操作系統(tǒng)原理課程實(shí)驗(yàn)指導(dǎo)書_第4頁
操作系統(tǒng)原理課程實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 . . . 操作系統(tǒng)原理課程實(shí)驗(yàn)指導(dǎo)書2012年 10 月摘 要本課程實(shí)驗(yàn)容由四個(gè)實(shí)驗(yàn)組成:進(jìn)程調(diào)度程序設(shè)計(jì),銀行家算法程序設(shè)計(jì),換頁算法的比較與Belady現(xiàn)象驗(yàn)證,命令解釋程序的編寫。進(jìn)程調(diào)度程序設(shè)計(jì)實(shí)驗(yàn)4個(gè)學(xué)時(shí),主要目的是使學(xué)生掌握帶優(yōu)先級(jí)的時(shí)間片輪換的進(jìn)程調(diào)度方法的具體實(shí)現(xiàn)。銀行家算法程序設(shè)計(jì)實(shí)驗(yàn)4個(gè)學(xué)時(shí),主要目的是使學(xué)生掌握應(yīng)用銀行家算法計(jì)算安全狀態(tài)并以此避免死鎖方法的具體實(shí)現(xiàn)。換頁算法的比較與Belady現(xiàn)象驗(yàn)證實(shí)驗(yàn)4個(gè)學(xué)時(shí),主要目的是使學(xué)生掌握幾種典型換頁算法的基本原理。命令解釋程序?qū)嶒?yàn)4個(gè)學(xué)時(shí),主要目的是使學(xué)生掌握命令解釋程序的原理。通過這四個(gè)實(shí)驗(yàn),加深學(xué)生對(duì)計(jì)算機(jī)操作系統(tǒng)基

2、本理論的理解,為學(xué)生今后學(xué)習(xí)好其他課程打下良好的理論基礎(chǔ)。目 錄實(shí)驗(yàn)一進(jìn)程調(diào)度程序設(shè)計(jì)2一、目的和要求2二、實(shí)驗(yàn)容2三、實(shí)驗(yàn)環(huán)境2四、實(shí)驗(yàn)原理與核心算法參考程序段3實(shí)驗(yàn)二銀行家算法實(shí)現(xiàn)資源分配7一、實(shí)驗(yàn)?zāi)康?二、實(shí)驗(yàn)容8三、實(shí)驗(yàn)要求8四、設(shè)計(jì)思路8五、參考程序清單8六、程序調(diào)試11七、實(shí)驗(yàn)結(jié)果分析12實(shí)驗(yàn)三換頁算法的比較和BLEEDY現(xiàn)象的驗(yàn)證12一、目的和要求12二、實(shí)驗(yàn)容12三、實(shí)驗(yàn)環(huán)境13四、實(shí)驗(yàn)原理與核心算法參考程序段13實(shí)驗(yàn)四命令解釋程序的編寫6一、目的和要求6二、實(shí)驗(yàn)容6三、實(shí)驗(yàn)環(huán)境6四、實(shí)驗(yàn)原理與核心算法參考程序段6前 言計(jì)算機(jī)操作系統(tǒng)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一門重要專業(yè)基礎(chǔ)課程

3、,是一門理論性很強(qiáng)的學(xué)科,一個(gè)顯著的特點(diǎn)是理論性強(qiáng)。它不僅要求學(xué)生掌握操作系統(tǒng)的基本思想,更強(qiáng)調(diào)學(xué)生掌握操作系統(tǒng)的思想并將它應(yīng)用到實(shí)踐中去。本實(shí)驗(yàn)是學(xué)生掌握操作系統(tǒng)基本思想、方法和技術(shù)開發(fā)簡單軟件項(xiàng)目的初步訓(xùn)練,主要目的是使學(xué)生基本掌握關(guān)于操作系統(tǒng)的基本、典型理論,與用科學(xué)的方法來分析和實(shí)現(xiàn)操作系統(tǒng)。為幫助學(xué)生全面理解計(jì)算機(jī)操作系統(tǒng)的課程容,特寫本課程實(shí)驗(yàn)指導(dǎo)書。3 / 26實(shí)驗(yàn)一 進(jìn)程調(diào)度程序設(shè)計(jì)一、目的和要求1. 實(shí)驗(yàn)?zāi)康模?)掌握時(shí)間片輪轉(zhuǎn)的進(jìn)程調(diào)度算法;(2)掌握帶優(yōu)先級(jí)的進(jìn)程調(diào)度算法;(3)選用面向?qū)ο蟮木幊谭椒ā?、實(shí)驗(yàn)學(xué)時(shí):4學(xué)時(shí)3、實(shí)驗(yàn)要求(1)自定義PCB的數(shù)據(jù)結(jié)構(gòu);(2)使

4、用帶優(yōu)先級(jí)的時(shí)間片輪轉(zhuǎn)法調(diào)度進(jìn)程,每運(yùn)行一個(gè)時(shí)間片,優(yōu)先級(jí)減一。二、實(shí)驗(yàn)容根據(jù)教師指定的實(shí)驗(yàn)課題,完成設(shè)計(jì)、編碼、測(cè)試工作。三、實(shí)驗(yàn)環(huán)境1PC微機(jī)2Windows 操作系統(tǒng)3C/C+程序開發(fā)集成環(huán)境四、調(diào)度算法的流程圖如下 :五、實(shí)驗(yàn)原理與核心算法參考程序段/jingchendiaodu.cpp #include "stdio.h" #include <stdlib.h> #include <conio.h> #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct p

5、cb /* 定義進(jìn)程控制塊PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; sort() /* 建立對(duì)進(jìn)程進(jìn)行優(yōu)先級(jí)排列函數(shù)*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p->super)>(ready->super) /*優(yōu)先級(jí)最大者,插入隊(duì)首*/ p->link=ready; ready=p; else /* 進(jìn)

6、程比較優(yōu)先級(jí),插入適當(dāng)?shù)奈恢弥?/ first=ready; second=first->link; while(second!=NULL) if(p->super)>(second->super) /*若插入進(jìn)程比當(dāng)前進(jìn)程優(yōu)先數(shù)大,*/ /*插入到當(dāng)前進(jìn)程前面*/ p->link=second; first->link=p; second=NULL; insert=1; else /* 插入進(jìn)程優(yōu)先數(shù)最低,則插入到隊(duì)尾*/ first=first->link; second=second->link; if(insert=0) first-&g

7、t;link=p;  input() /* 建立進(jìn)程控制塊函數(shù)*/ int i,num; /clrscr(); /*清屏*/ printf("n 請(qǐng)輸入進(jìn)程號(hào)?"); scanf("%d",&num); for(i=0;i<num;i+) printf("n 進(jìn)程號(hào)No.%d:n",i); p=getpch(PCB); printf("n 輸入進(jìn)程名:"); scanf("%s",p->name); printf("n 輸入進(jìn)程優(yōu)先數(shù):"); s

8、canf("%d",&p->super); printf("n 輸入進(jìn)程運(yùn)行時(shí)間:"); scanf("%d",&p->ntime); printf("n"); p->rtime=0;p->state='w' p->link=NULL; sort(); /* 調(diào)用sort函數(shù)*/ int space() /*計(jì)算就緒隊(duì)列長度*/ int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr->link; ret

9、urn(l); disp(PCB * pr) /*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程*/ printf("n qname t state t super t ndtime t runtime n"); printf("|%st",pr->name); printf("|%ct",pr->state); printf("|%dt",pr->super); printf("|%dt",pr->ntime); printf("|%dt",pr->rti

10、me); printf("n"); check() /* 建立進(jìn)程查看函數(shù) */ PCB* pr; printf("n * 當(dāng)前正在運(yùn)行的進(jìn)程是:%s",p->name); /*顯示當(dāng)前運(yùn)行進(jìn)程*/ disp(p); pr=ready; printf("n *當(dāng)前就緒隊(duì)列狀態(tài)為:n"); /*顯示就緒隊(duì)列狀態(tài)*/ while(pr!=NULL) disp(pr); pr=pr->link; destroy() /*建立進(jìn)程撤消函數(shù)(進(jìn)程運(yùn)行結(jié)束,撤消進(jìn)程)*/ printf("n 進(jìn)程 %s 已完成.n"

11、;,p->name); free(p); running() /* 建立進(jìn)程就緒函數(shù)(進(jìn)程運(yùn)行時(shí)間到,置就緒狀態(tài)*/ (p->rtime)+; if(p->rtime=p->ntime) destroy(); /* 調(diào)用destroy函數(shù)*/ else (p->super)-; p->state='w' sort(); /*調(diào)用sort函數(shù)*/ main() /*主函數(shù)*/ int len,h=0; char ch; input(); len=space(); while(len!=0)&&(ready!=NULL) ch=g

12、etchar(); h+; printf("n The execute number:%d n",h); p=ready; ready=p->link; p->link=NULL; p->state='R' check(); running(); printf("n 按任一鍵繼續(xù)."); ch=getchar(); printf("nn 進(jìn)程已經(jīng)完成.n"); ch=getchar(); 六選做題:1、編寫并調(diào)試一個(gè)模擬的進(jìn)程調(diào)度程序,采用“最高優(yōu)先數(shù)優(yōu)先”調(diào)度算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度。 “最高優(yōu)先數(shù)優(yōu)

13、先”調(diào)度算法的基本思想是把CPU分配給就緒隊(duì)列中優(yōu)先數(shù)最高的進(jìn)程。 靜態(tài)優(yōu)先數(shù)是在創(chuàng)建進(jìn)程時(shí)確定的,并在整個(gè)進(jìn)程運(yùn)行期間不再改變。 動(dòng)態(tài)優(yōu)先數(shù)是指進(jìn)程的優(yōu)先數(shù)在創(chuàng)建進(jìn)程時(shí)可以給定一個(gè)初始值,并且可以按一定原則修改優(yōu)先數(shù)。例如:在進(jìn)程獲得一次CPU后就將其優(yōu)先數(shù)減少1。或者,進(jìn)程等待的時(shí)間超過某一時(shí)限時(shí)增加其優(yōu)先數(shù)的值,等等。2、編寫并調(diào)試一個(gè)模擬的進(jìn)程調(diào)度程序,采用“輪轉(zhuǎn)法”調(diào)度算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度。 輪轉(zhuǎn)法可以是簡單輪轉(zhuǎn)法、可變時(shí)間片輪轉(zhuǎn)法,或多隊(duì)列輪轉(zhuǎn)法。 簡單輪轉(zhuǎn)法的基本思想是:所有就緒進(jìn)程按 FCFS排成一個(gè)隊(duì)列,總是把處理機(jī)分配給隊(duì)首的進(jìn)程,各進(jìn)程占用CPU的時(shí)間片一樣。如果運(yùn)行進(jìn)

14、程用完它的時(shí)間片后還為完成,就把它送回到就緒隊(duì)列的末尾,把處理機(jī)重新分配給隊(duì)首的進(jìn)程。直至所有的進(jìn)程運(yùn)行完畢。實(shí)驗(yàn)二 銀行家算法實(shí)現(xiàn)資源分配一、實(shí)驗(yàn)?zāi)康脑诹私夂驼莆浙y行家算法的基礎(chǔ)上,能熟練的處理課本例題中所給狀態(tài)的安全性問題,能編制銀行家算法通用程序,將調(diào)試結(jié)果顯示在計(jì)算機(jī)屏幕上,再檢測(cè)和筆算的一致性。二、實(shí)驗(yàn)容設(shè)計(jì)五個(gè)進(jìn)程P0,P1,P2,P3,P4共享三類資源A,B,C的系統(tǒng),A,B,C的資源數(shù)量分別為10,5,7。進(jìn)程可動(dòng)態(tài)地申請(qǐng)資源和釋放資源,系統(tǒng)按各進(jìn)程的申請(qǐng)動(dòng)態(tài)地分配資源。要求程序具有顯示和打印各進(jìn)程的某一時(shí)刻的資源分配表和安全序列;顯示和打印各進(jìn)程依次要求申請(qǐng)的資源號(hào)以與為某進(jìn)

15、程分配資源后的有關(guān)資源數(shù)據(jù)。三、實(shí)驗(yàn)要求本實(shí)驗(yàn)要求用高級(jí)語言編寫和調(diào)試一個(gè)簡單的銀行家算法程序。用銀行家算法實(shí)現(xiàn)資源分配。四、設(shè)計(jì)思路設(shè)request-i為進(jìn)程pi的請(qǐng)求向量,如果requestij=K,表示進(jìn)程pi需要K個(gè)Rj資源。當(dāng)系統(tǒng)發(fā)出請(qǐng)求后,系統(tǒng)按下述步驟開始檢查:(1)、如果requestij<=needij,轉(zhuǎn)向步驟2;否則報(bào)告出錯(cuò),申請(qǐng)的資源已經(jīng)大于它需要的最大值。(2)、如果requestij<=availablej,轉(zhuǎn)向步驟3;否則報(bào)告出錯(cuò),尚無足夠的資源。(3)、系統(tǒng)試探著把資源分配給pi,并修改下列數(shù)據(jù)結(jié)構(gòu)中的值: availablej=availablej

16、-requestj allocationij=allocationij+requestj needij=needij-requestj(4)、系統(tǒng)進(jìn)行安全性算法,檢查此次分配后,系統(tǒng)是否還處于安全狀態(tài),若安全,把資源分配給進(jìn)程pi;否則,恢復(fù)原來的資源分配狀態(tài),讓進(jìn)程pi等待。五、參考程序清單#include<stdio.h>#define TRUE 1#define FALSE 0#define M 5#define N 3int availableN=3,3,2;int maxMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;int allocationMN=0

17、,1,0,2,0,0,3,0,2,2,1,1,0,0,2;int needMN,pM;void init() int i,j; for(i=0;i<M;i+) for(j=0;j<N;j+) needij=maxij-allocationij; void output() int i,j; printf("nThe table of location is:"); for(i=0;i<M;i+) printf("nP%d: ",i); for(j=0;j<N;j+) printf(" %d ",allocati

18、onij); int compare(int need,int work) int j; for(j=0;j<N;j+) if(needj>workj) return FALSE; return TRUE; int isSecurity(int available,int needN,int allocationN) int i,j,k=0,flag,finishM,workN; for(i=0;i<M;i+) finishi=FALSE; for(j=0;j<N;j+) workj=availablej; while(TRUE) flag=FALSE; for(i=0

19、;i<M;i+) if(finishi=FALSE&&compare(needi,work)=TRUE) for(j=0;j<N;j+) workj+=allocationij; finishi=TRUE; pk+=i; flag=TRUE; break; if(flag=FALSE) for(i=0;i<M;i+) if(finishi=FALSE) return FALSE; return TRUE; void operate() int i,j,flag,f1,requestN; printf("*n"); printf("

20、when you input a value which is samller than zero,it will stop!n"); while(TRUE) f1=FALSE; printf("Input which process send a requestn"); scanf("%d",&i); if(i>=M) printf("This process does not exist!n"); continue; getchar(); if(i<0) break; printf("Inp

21、ut a requestn"); for(j=0;j<N;j+) scanf("%d",&requestj); for(j=0;j<N;j+) if(requestj>needij) printf("The demand is out of need!n"); output(); printf("n*n"); f1=TRUE; break; for(j=0;j<N&&f1=FALSE;j+) if(requestj>availablej) printf("The

22、 request is out of available!n"); output(); printf("n*n"); f1=TRUE; break; if(f1=TRUE) continue; for(j=0;j<N;j+) availablej-=requestj; allocationij+=requestj; needij-=requestj; flag=isSecurity(available,need,allocation); if(flag=TRUE) printf("The request is security!n");

23、printf("The security sort is:n"); for(i=0;i<M;i+) i=4 ? printf("P%d",i) : printf("P%d->",pi); output(); printf("n*n"); else printf("The request is insecurity!n"); printf("this request should wait!n"); for(j=0;j<N;j+) availablej-=re

24、questj; allocationij+=requestj; needij-=requestj; output(); printf("n*n"); void main() clrscr(); init(); operate(); 六、程序調(diào)試*when you input a value while is samller than zero,it will stop!Input which process send a request1Input a request102The request is securityThe security sort isP1à

25、P3àP0àP2àP4The table of location is:P0: 0 1 0P1: 3 0 2P2: 3 0 2P3: 2 1 1P4: 0 0 2Input which process send a request-1七、實(shí)驗(yàn)結(jié)果分析由于安全的路徑并不一定唯一,所以輸出的結(jié)果并不是和書上的一樣,很正常,原因在于安全路徑的找法上。實(shí)驗(yàn)三 換頁算法的比較和BLEEDY現(xiàn)象的驗(yàn)證一、目的和要求1. 實(shí)驗(yàn)?zāi)康模?)掌握先進(jìn)先出頁面置換算法;(2)掌握隨機(jī)替換頁面置換算法;(3)掌握OPT頁面置換算法;(4)掌握最近最少使用頁面置換算法;(5)熟悉BLEED

26、Y現(xiàn)象與其產(chǎn)生原理;(6)熟悉C/C+編程。2、實(shí)驗(yàn)學(xué)時(shí):4學(xué)時(shí)3、實(shí)驗(yàn)要求(1)進(jìn)程占用存空間共640K,頁面大小是1K/2K/4K/8K;(2)隨機(jī)生成256個(gè)頁面置換次序;(3)用于分配頁面大小的存總空間是32K;(4)給出四種頁面置換算法的換頁過程,并計(jì)算各自的缺頁率。二、實(shí)驗(yàn)容編寫程序,使用四種不同的頁面替換策略算法進(jìn)行頁面替換。分別是先進(jìn)先出,隨機(jī)替換,時(shí)鐘頁面替換,最近最久未使用頁面替換,并計(jì)算缺頁率。三、實(shí)驗(yàn)環(huán)境1PC微機(jī)2Windows 操作系統(tǒng)3C/C+開發(fā)集成環(huán)境四、實(shí)驗(yàn)原理與核心算法參考程序段#include <conio.h>#include <st

27、dio.h>#include <dos.h>#include <stdlib.h>#define random(num) (rand() % (num)#include <math.h>int add256/*地址*/,page256/*頁面*/;int k,j,ram,t;float rate;/*缺頁率*/struct s1 int page; int free; int tag; fifo33,opt33,lru33;struct s2 int time;void address();float FIFO(int ram);/*先進(jìn)先出*/flo

28、at OPT(int ram);/*理想型*/float LRU(int ram);/*最近最久未使用頁面置換*/void main() int i,p256;/*頁號(hào)*/ address(); for (k=1; k<=8;) /*頁面大小: 1k,2k,4k,8K*/ printf("the size of a page is %d kn ",k); printf("the page num is .n"); for (i=0; i<256; i+) pi=addi/(k*1024);/*將指令地址生成相應(yīng)的頁號(hào)*/ printf(&qu

29、ot;%d ",pi); j=0; for (i=0; i<256; i+) while (pi=pi+1) i+; pagej=pi; j+; printf("nafter connect the same pages the page num is:n"); for (i=0; i<j; i+) printf("%d ",pagei); printf("n"); getch(); for (ram=1; ram<=32; ram+) if (ram=10) getch(); printf("n

30、block=%d pages= %d,absent rate: ",ram,j); printf("FIFO=%0.2f%",FIFO(ram); printf("LRU =%0.2f%",LRU(ram); printf("OPT =%0.2f%",OPT(ram); k=k*2; getch(); void address() /*產(chǎn)生指令地址*/ int i; add0=1000; for (i=1; i<=255; i+) int x=random(1024); if (x>=0)&&(x

31、<512) addi=addi-1+1; if (x>=512)&&(x<768) addi=random(addi-1-1)+1; if (x>=768)&&(x<1024) addi=addi-1+random(30*1024-addi-1-1)+1; float FIFO(int ram) int absent=0,t=0,i,z,l,yn; for (i=0; i<ram; i+) fifoi.page=-1; fifoi.free=1; fifoi.tag=0; i=0; while (i<j) yn=0; f

32、or (z=0; z<ram; z+) /*the page is in the ram?*/if (fifoz.page=pagei) yn=1; for (z=0; z<ram; z+) if (fifoz.free=0) fifoz.tag+=1; if (yn!=1) absent+=1; /*count the absent page*/ l=0; while (l<ram)&&(fifol.free=0) l+; if (l<ram)&&(fifol.free=1) /*any free ram?*/ fifol.page=p

33、agei; fifol.free=0; for (l=0; l<ram; l+) if (fifol.free=0 ) fifol.tag+=1; else /*there is no free ram*/ t=0; for (l=0; l<ram; l+)if ( fifol.tag<fifot.tag) t=l; fifot.page=pagei; fifot.free=0; fifot.tag=1; l=0; i+; rate=(float)absent/j*100; return rate;float LRU(int ram) int absent=0,yn,t,i,

34、l,z,now=0; struct s2 P250; for (i=0;i<j;i+) Pi.time=0; for (i=0; i<ram; i+) lrui.page=-1; lrui.free=1; i=0; while(i<j) for(l=0; l<ram; l+) yn=0; for(z=0; z<ram; z+) if (lruz.page=pagei) now+=1; Plruz.page.time=now; yn=1; if (yn!=1) absent+=1; now+=1; l=0; while (l<=ram)&&(l

35、rul.free=0) l+; if (l<=ram)&&(lrul.free=1) /*any free ram?*/ lrul.page=pagei; Plrul.page.time=now; lrul.free=0; else /*there is no ram*/ t=0; for (l=0; l<ram; l+) if ( Plrul.page.time<Plrut.page.time) t=l; lrut.page=pagei; Plrut.page.time=now; i+; rate=(float)absent/j*100; return ra

36、te;float OPT(int ram) int yn,t,absent=0,i,l1,k,l; for (i=0; i<ram; i+) opti.page=-1; opti.free=1; opti.tag=0; i=0; while (i<j) /*the page in the ram?*/ yn=0; for (l1=0; l1<ram; l1+) if (pagei=optl1.page) yn=1; for (k=0;k<ram;k+)optk.tag-=1; if (yn!=1) /*count the absent page*/ absent+=1;

37、 l=0; while (l<ram)&&(optl.free=0) l+; if (l<=ram)&&(optl.free=1) optl.page=pagei; optl.free=0; optl.tag=1; for (l=0; l<ram; l+) optl.tag-=1; else /*the page is not in the ram*/ for(l=0;l<ram;l+) t=i; while ( t<j && optl.page!=paget ) t+; optl.tag+=1; t=0; for

38、(l=0; l<ram; l+) if (optl.tag>optt.tag) t=l; optt.page=pagei; optt.tag=1; i+; rate=(float)absent/j*100; return rate;#include <conio.h>#include <stdio.h>#include <dos.h>#include <stdlib.h>#include<time.h>#include <math.h>int add256/*地址*/,page256/*頁面*/;int k,j

39、,ram,t;float rate;/*缺頁率*/struct s1 int page; int free; int tag; fifo33,opt33,lru33;struct s2 int time;void address();float FIFO(int ram);/*先進(jìn)先出*/float OPT(int ram);/*理想型*/float LRU(int ram);/*最近最久未使用頁面置換*/void main() int i,p256;/*頁號(hào)*/ address(); for (k=1; k<=8;) /*頁面大小: 1k,2k,4k,8K*/ printf("

40、;the size of a page is %d kn ",k); printf("the page num is .n"); for (i=0; i<256; i+) pi=addi/(k*1024);/*將指令地址生成相應(yīng)的頁號(hào)*/ printf("%d ",pi); j=0; for (i=0; i<256; i+) while (pi=pi+1) i+; pagej=pi; j+; printf("nafter connect the same pages the page num is:n"); fo

41、r (i=0; i<j; i+) printf("%d ",pagei); printf("n"); getch(); for (ram=1; ram<=32; ram+) if (ram=10) getch(); printf("nblock=%d pages= %d,absent rate: ",ram,j); printf("FIFO=%0.2f%",FIFO(ram); printf("LRU =%0.2f%",LRU(ram); printf("OPT =%0.2

42、f%",OPT(ram); k=k*2; getch(); void address() /*產(chǎn)生指令地址*/ int i; add0=1000; srand(unsigned)time(NULL); for (i=1; i<=255; i+) int x=rand(); x=x%1024; if (x>=0)&&(x<512) addi=addi-1+1; if (x>=512)&&(x<768) addi=random(addi-1-1)+1; if (x>=768)&&(x<1024) a

43、ddi=addi-1+random(30*1024-addi-1-1)+1; float FIFO(int ram) int absent=0,t=0,i,z,l,yn; for (i=0; i<ram; i+) fifoi.page=-1; fifoi.free=1; fifoi.tag=0; i=0; while (i<j) yn=0; for (z=0; z<ram; z+) /*the page is in the ram?*/if (fifoz.page=pagei) yn=1; for (z=0; z<ram; z+) if (fifoz.free=0) f

44、ifoz.tag+=1; if (yn!=1) absent+=1; /*count the absent page*/ l=0; while (l<ram)&&(fifol.free=0) l+; if (l<ram)&&(fifol.free=1) /*any free ram?*/ fifol.page=pagei; fifol.free=0; for (l=0; l<ram; l+) if (fifol.free=0 ) fifol.tag+=1; else /*there is no free ram*/ t=0; for (l=0;

45、 l<ram; l+)if ( fifol.tag<fifot.tag) t=l; fifot.page=pagei; fifot.free=0; fifot.tag=1; l=0; i+; rate=(float)absent/j*100; return rate;float LRU(int ram) int absent=0,yn,t,i,l,z,now=0; struct s2 P250; for (i=0;i<j;i+) Pi.time=0; for (i=0; i<ram; i+) lrui.page=-1; lrui.free=1; i=0; while(i

46、<j) for(l=0; l<ram; l+) yn=0; for(z=0; z<ram; z+) if (lruz.page=pagei) now+=1; Plruz.page.time=now; yn=1; if (yn!=1) absent+=1; now+=1; l=0; while (l<=ram)&&(lrul.free=0) l+; if (l<=ram)&&(lrul.free=1) /*any free ram?*/ lrul.page=pagei; Plrul.page.time=now; lrul.free=0

47、; else /*there is no ram*/ t=0; for (l=0; l<ram; l+) if ( Plrul.page.time<Plrut.page.time) t=l; lrut.page=pagei; Plrut.page.time=now; i+; rate=(float)absent/j*100; return rate;float OPT(int ram) int yn,t,absent=0,i,l1,k,l; for (i=0; i<ram; i+) opti.page=-1; opti.free=1; opti.tag=0; i=0; whi

48、le (i<j) /*the page in the ram?*/ yn=0; for (l1=0; l1<ram; l1+) if (pagei=optl1.page) yn=1; for (k=0;k<ram;k+)optk.tag-=1; if (yn!=1) /*count the absent page*/ absent+=1; l=0; while (l<ram)&&(optl.free=0) l+; if (l<=ram)&&(optl.free=1) optl.page=pagei; optl.free=0; optl.tag=1; for (l=0; l<ram; l+) optl.tag-=1; else /*the page is not in the ram*/ for(l=0;l<ram;l+) t=i; while ( t<j &am

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論