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

下載本文檔

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

文檔簡介

《操作系統(tǒng)原理》實驗報告書班級:學號:姓名:指導教師:-年第一學期實驗名稱:LINUX顧客界面實驗時間:年10月16日第7周星期三一、實驗目的1.熟悉Linux字符操作界面,純熟掌握慣用Shell命令。2.熟悉Linux中文本編輯辦法,學會編輯軟件vi的使用。3.理解Linux編繹器gcc的功效,掌握基于Linux平臺的C程序開發(fā)。實驗預習(預備知識的問題及回答)1.為什么在Linux系統(tǒng)中,諸如光盤、U盤等要先掛載而后才干使用?如何獲得U盤的設(shè)備名?裝載點在文獻系統(tǒng)中的位置是什么?由于文獻系統(tǒng)的差別,Linux在默認狀況下并不支持軟盤、光盤和U盤,因此需要通過裝載對應盤片才能夠訪問其中的數(shù)據(jù)。裝載點是掛載文獻系統(tǒng)的目錄位置。2.從虛擬機界面退出進入WindowsOS界面的操作是Ctrl+Alt,從WindowsOS界面進入虛擬機界面的辦法是鼠標點擊虛擬界面。3.權(quán)限的含義是什么?如何使用數(shù)字法設(shè)定文獻的權(quán)限?(1)權(quán)限的含義Linux系統(tǒng)中的每個文獻和目錄都有對應的訪問許可權(quán)限,訪問權(quán)限分為只讀(r),可寫(w)和可執(zhí)行三種。有三種不同類型的顧客可對文獻或目錄進行訪問,分別是文獻全部者(u),同組顧客(g)和其它顧客(o)。全部的文獻和目錄都被創(chuàng)立它們的人所“擁有”,只要你是這個文獻的全部者或你登錄為根顧客,你就擁有了變化全部者、組群和其別人權(quán)限的權(quán)利。(2)使用數(shù)字法變化權(quán)限命令格式chmod權(quán)限數(shù)值文獻名闡明:給指定文獻賦予數(shù)值所規(guī)定的權(quán)限。在數(shù)字設(shè)定法中,每種權(quán)限設(shè)立均可用數(shù)值來代表,其中0表達沒有權(quán)限,1表達可執(zhí)行權(quán)限,2表達可寫權(quán)限,4表達可讀權(quán)限,這些值之和便可用來設(shè)立特定權(quán)限。因此數(shù)字屬性的格式應為3個0~7的八進制數(shù),3個數(shù)表達的次序為u、g和o。4.什么過濾操作?在Linux中如何實現(xiàn)?過濾操作:將一種命令(或程序)的輸出作為另一種命令(或程序)的輸入Linux實現(xiàn)的命令格式:命令|命令5.在Linux中掛載u盤并能顯示其文檔的中文信息,所使用的掛載命令是:命令格式mount/dev/sda1/mnt/usb。6.什么是vi?其三種操作模式的含義是什么?給出三種工作模式間的轉(zhuǎn)換圖。vi有3種基本工作模式:命令模式(CommandMode):vi啟動后的默認模式,控制光標的移動、復制刪除文字、進入輸入模式和末行模式輸入模式(InsertMode):進行文字輸入末行模式(LastLineMode):保存文獻、退出vi命令模式命令模式輸入模式末行模式vi文獻名Esc鍵Esc鍵按i、o、e等鍵按冒號“:”退出三種模式之間轉(zhuǎn)換實驗內(nèi)容(包含實驗所用命令或有關(guān)程序源代碼)1.shell操作命令(給出每小題所用的Shell命令或命令成果)(1)創(chuàng)立名為stu1、stu2的2個顧客,設(shè)立密碼分別為student1和student2,并將它們設(shè)為組group1中的組員。#groupaddgroup1#useraddstu1–ggroup1#sustu1$passwdstu1回車后敲入密碼student1$exit#useraddstu2–ggroup1#sustu2$passwdstu2回車后敲入密碼student1$exit(2)在每個顧客的主目錄下建立2個目錄,分別命名為dir1和dir2。 #sustu1$cd~$mkdirdir1$exit#sustu2$cd~$mkdirdir2$exit(3)查找stu1顧客主目錄、下屬各子目錄的默認存取權(quán)限,并給出結(jié)論。#sustu1$cd..$ls–l顧客主目錄權(quán)限為:drwx,即目錄的顧客可讀、寫、執(zhí)行,同組和其它顧客無任何權(quán)限。#sustu1$cd~$ls–ldir1目錄權(quán)限為:drwxr-xr-x,即目錄的顧客可讀、寫、執(zhí)行,同組顧客可讀、執(zhí)行,其它顧客可讀、執(zhí)行。(4)調(diào)試pwd和cd命令,回答下列有關(guān)Linux文獻系統(tǒng)中目錄的有關(guān)問題。=1\*GB3①顧客主目錄的絕對途徑如何表達?/home/stu1,/home/stu2=2\*GB3②根目錄如何表達?/root=3\*GB3③.和..分別表達什么目錄?子目錄,父目錄=4\*GB3④~表達什么目錄?顧客主目錄⑤現(xiàn)在目錄如何表達?cd~(5)新建顧客stu3,設(shè)立其密碼為student3,并將其設(shè)立為group2中組員。爾后,以stu3登錄,在其主目錄下建立名為text的目錄,在text目錄下再建立名為dir1的子目錄,并使其成為現(xiàn)在目錄。#groupaddgroup2#useraddstu3–ggroup2#sustu3$passwd回車后敲入密碼student3$cd~$mkdirtext$mkdirdir1$cdtext/dir1(6)使用cat>sneakers.txt命令,分析命令行catsneakers.txt的顯示成果。$cat>sneakers.txtbuysomesneakersthengotothecoffeeshopthenbuysomecoff^D$catsneakers.txt從鍵盤中創(chuàng)立一種名為sneakers.txt文獻,文獻內(nèi)容為:buysomesneakersthengotothecoffeeshopthenbuysomecoff(7)使用上題的辦法,在dir1目錄中建立home.txt文獻,其內(nèi)容為:bringthecoffeehometakeoffshoesputonsneakersmakesomecoffeerelax!以下:$cd/home/stu1/dir1$cat>home.txtbringthecoffeehome takeoffshoes putonsneakers makesomecoffee relax! [ctrl+D](8)試寫出實現(xiàn)下列功效的shell命令:=1\*GB3①將home.txt文獻移至其上級目錄中(即text目錄下)。$mv./home.txt=2\*GB3②將home.txt添加到sneakers.txt尾部形成新的文獻saturday.txt。$catsneakers.txt>saturday.txt $cathome.txt>>Saturday.txt=3\*GB3③將text目錄樹從stu3顧客主目錄下移至stu2主目錄下。【使用特權(quán)顧客辦法】 su mv/home/stu3/text/home/stu2【修改目錄權(quán)限辦法】#cp/home/stu3/text/home/stu2(9)試畫出上述命令后,顧客stu1、stu2和stu3主目錄中的目錄樹(3棵子樹)。stu1stu1dir1dir2Saturday.txtstu2dir1dir2textdir1home.txtSaturday.txtSneakers.txtstu3dir1dir2textdir1home.txtSaturday.txtSneakers.txt2.LinuxC程序開發(fā)(1)編寫LinuxC程序,把一種文獻的內(nèi)容復制到另一種文獻中,即實現(xiàn)簡樸的copy功效。規(guī)定:程序輸入的第一種參數(shù)是源文獻,第二個參數(shù)是目的文獻。【源程序】#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){ FILE*in,*out; charch; if(argc!=3){ printf(“Youforgottoenterafilename\n”); exit(0);}if((in=fopen(argv[1],“r”))==NULL){ printf(“cannotopeninfile\n”); exit(0);}if((out=fopen(argv[2],“w”))==NULL){ printf(“cannotopenoutfile\n”); exit(0);}while(!feof(in))fputc(fgetc(in),out);fclose(in);fclose(out);【運行命令】#gcc–otestcopy.c#./testfile1.cfile2.c(2)編寫LinuxC程序,列出stu2主目錄中的文獻信息,并將其中saturday.txt文獻的權(quán)限設(shè)立為文獻全部者可讀可寫、同組顧客只讀、其它顧客無權(quán)限?!驹闯绦颉?include<sys/types.h>#include<dirent.h>#include<stdio.h>#include<errno.h>intmain(intargc,char*argv[]){ DIR*dp;structdirent*dirp;intn=0;if(argc!=2){ printf(“asingleargmentisrequired”); exit(0);}if((dp=opendir(argv[1]))==NULL){ printf(“cannotopen%s”,argv[1]);exit(0);}while(((dirp=readdir(dp))!=NULL)&&(n<=50)){ if(n%1==0)printf(“”); n++; printf(“%10s\n”,dirp->d_name);}system(“chmod640/home/stu2/text/dir1/saturday.txt”);}【運行命令】#gcc–otestlist.c#./test/home/stu2

實驗名稱:SHELL程序設(shè)計實驗時間:年10月23日第8周星期三一、實驗目的1.熟悉Shell腳本編程的環(huán)節(jié),掌握基于Bash的Shell腳本開發(fā)。2.掌握Shell腳本中變量、條件測試的使用。3.掌握Shell腳本中的控制流構(gòu)造和函數(shù)的使用。實驗預習(預備知識的問題及回答)Linux系統(tǒng)默認的shell語言是什么?欲查看該shell的版本,應使用什么命令?Linux系統(tǒng)默認的shell語言是Bashshell。欲查看該shell的版本,應使用的命令是:$echo$BASH_VERSION2.預習shell有關(guān)變量和參數(shù)的有關(guān)知識,回答下列問題。(1)假設(shè)顧客進行了以下的賦值操作:$person=jenny試給出下面命令的輸出成果。1)echopersonperson2)echo$personjenny3)echo‘$person’$person4)echo“$person”jenny(2)填充下列與環(huán)境變量、位置變量和預定義變量有關(guān)的表格。Shell變量定義HOME用于保存顧客注冊目錄的絕對途徑PATH保存用冒號分隔的目錄途徑,shell將按PATH變量中給出的次序搜索這些目錄,找到第一種與命令名一致的可執(zhí)行文獻將被執(zhí)行。PWD現(xiàn)在工作目錄的絕對途徑名,該變量取值隨cd命令的使用而變化。PS1主提示符,默認特權(quán)顧客為#,普通顧客為$。$0表達現(xiàn)在shell程序的文獻名。$#表達位置參數(shù)的個數(shù)。$?表達位置參數(shù)的個數(shù)。$$目邁進程的pid。3.寫出下列expr命令的輸出:exprindex“value”‘a(chǎn)’expr“value”:‘v.*u’expr“aaa”:‘a(chǎn)\+’expr“aaa”:‘a(chǎn)\?’expr2+3expr2+3expr2\*3expr5+`expr2+3`exprlength“operatingsystem”exprsubstrlinux23答:(1)2 (2)4 (3)3 (4)1 (5)2+3 (6)5 (7)6(8)non-numericargument (9)16(10)inu實驗內(nèi)容1.編寫Shell腳本,從命令行中接受一種二元算術(shù)體現(xiàn)式并計算其成果。【源程序】#!/bin/bashiftest$#=3thencase$2in+)letz=$1+$3;;-)letz=$1-$3;;/)letz=$1/$3;;x|X)letz=$1*$3;;*)echo“Warning-$2invalidoperator!”exit;;esacecho“Answeris$z”elseecho“Usage-$0Value1operatorvalue2”fi【運行】chmoda+xjisuan./jisuan2+32.編寫一種以文獻列表作為輸入的過濾器程序,規(guī)定文獻名含有以句點“.”分隔的后綴,過濾器輸出每個文獻的不帶句點和后綴的文獻名?!驹闯绦颉縭eadflagwhiletest“$flag”!=“#”#輸入的文獻列表以井號結(jié)束dolocation=`expr“$flag”:“.*\.”`location=`expr$location–1`basename=`exprsubstr“$flag”1$location`echo$basenamereadflagdone【運行】chmoda+xletter./letter3.將下面的shell腳本命名為myscript,分析其功效:count=$#cmd=echowhile[$count–gt0]docmd="$cmd\$$count"count=`expr$count-1`doneeval$cmd【命令行輸入】chmoda+xmyscript./myscriptfirstsecondthird【運行成果】thirdsecondfirst【腳本功效分析】將命令行輸入的參數(shù)倒序顯示4.設(shè)計一種程序cuts,它從原則輸入讀入數(shù)據(jù),獲取由第一種參數(shù)n和第二個參數(shù)m所限定范疇的數(shù)據(jù)(涉及這兩個字符),n和m都是整數(shù)。例如:$cuts1114Thisisatestofcutsprogram(輸入)test(顯示成果)【源程序】#!/bin/bashreadalineecho$aline|cut–c$1-$2實驗名稱:進程控制與通信實驗時間:年10月23日第8周星期三一、實驗目的1.加深對進程概念的理解,體會進程創(chuàng)立過程,進一步認識進程的異步并發(fā)特性。2.理解Linux系統(tǒng)中進程通信的基本原理,重點掌握進程的信號通信和管道通信機制。3.掌握Linux系統(tǒng)中與進程控制和進程通信有關(guān)的系統(tǒng)調(diào)用。二、實驗預習(預備知識的問題及回答)1.寫出下列系統(tǒng)調(diào)用功效:(1)fork()用于創(chuàng)立進程(2)getpid()用于獲取目邁進程id號(3)wait()用于等待子進程結(jié)束(4)exit()用于進程自我終止(5)pipe()用于創(chuàng)立無名管道(6)signal()用于在信號和信號解決函數(shù)之間建立對應關(guān)(7)kill()用于發(fā)送信號給指定進程2.閱讀fork系統(tǒng)調(diào)用,用偽碼寫出其實現(xiàn)流程。pid=fork()ifpid為負printfork調(diào)用失敗elseifpid為0print目邁進程是子進程elsepid為正print目邁進程是父進程3.圖示pipe系統(tǒng)調(diào)用生成無名管道時所涉及的數(shù)據(jù)構(gòu)造。file-wfile-w---------u-ofilefiledes[0]filedes[1]f-flag:READ|PIPEf-count:1f-inode:f-offset[0]:0f-offset[1]:0f-flagWRTTE|PIPEf-count:1f-inode:f-offset[0]:0f-offset[1]:0i-count:2file-r4.在UNIX系統(tǒng)中運行下面程序,最多能夠產(chǎn)生多少個進程?畫出進程家族樹。main(){fork();fork();fork();}答:最多可產(chǎn)生8個進程進程家族樹如圖所示:AABCDEFGH5.下列程序運行后,a的值是多少?main(){inta,pid;a=55;pid=fork();if

(pid<

0)

{

printf("error

in

fork!");exit(0);}elseif(pid==0){sleep(5);a=99;printf(“a=%d\n”,a);sleep(5);exit(0);}else{sleep(7);printf(“a=%d\n”,a);wait(0);}}答:程序的運行成果為a=99,a=55;最后a=55三、實驗內(nèi)容1.調(diào)試下面的程序,觀察可能的并發(fā)成果,給出簡要分析,并畫出進程家族樹。#include

<unistd.h>#include

<sys/types.h>#include<sys/wait.h>main

(){intstatus;

int

pid1=-1,pid2=-1,pid3=-1;

pid1=fork();

if

(pid1

==

0)

printf("pid1=0,my

process

id

is

%d\n",getpid());

else

if

(pid1

>

0){printf("pid1>0,my

process

id

is

%d\n",getpid());pid2=fork();if

(pid2

==

0)printf("pid2=0,my

process

id

is

%d\n",getpid());

else

if

(pid2

>

0)printf("

pid2>0,my

process

id

is

%d\n",getpid());}pid3=fork();

if

(pid3

==

0)

printf("pid3=0,pid1=%d,pid2=%d,

my

process

id

is

%d\n",pid1,pid2,getpid());

else

if

(pid3

>

0)

printf("pid3>0,pid1=%d,pid2=%d,my

process

id

is%d\n",pid1,pid2,getpid());wait(&status);exit(0);

}解:可能狀況1:pid1=0,myprocessIDis3937pid1>0,myprocessIDis3936pid2=0,myprocessIDis3939pid2>0,myprocessIDis3936pid3=0,pid1=3937,pid2=3939,myprocessIDis3941pid3>0,pid1=3937,pid2=3939,myprocessIDis3936pid3=0,pid1=0,pid2=-1,myprocessIDis3938pid3>0,pid1=0,pid2=-1,myprocessIDis3937pid3=0,pid1=3937,pid2=0,myprocessIDis3940pid3>0,pid1=3937,pid2=0,myprocessIDis3939可能狀況2:pid1=0,myprocessIDis3937pid3=0,pid1=0,pid2=-1,myprocessIDis3938pid3>0,pid1=0,pid2=-1,myprocessIDis3937pid1>0,myprocessIDis3936pid2=0,myprocessIDis3939pid2>0,myprocessIDis3936pid3=0,pid1=3937,pid2=3939,myprocessIDis3941pid3>0,pid1=3937,pid2=3939,myprocessIDis3936pid3=0,pid1=3937,pid2=0,myprocessIDis3940pid3>0,pid1=3937,pid2=0,myprocessIDis3939進程家族樹為:39363936393739393938394139402.編程實現(xiàn)進程間管道通信。規(guī)定:父子進程共享一無名管道,兩個子進程作為發(fā)送方分別向管道發(fā)送一行信息,父進程先讀出子進程P1發(fā)來的信息行,將其轉(zhuǎn)換為大寫字母輸出;再讀出子進程P2發(fā)來的信息行,將其轉(zhuǎn)換為小寫字母輸出。【源程序】#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/wait.h>#include<ctype.h>intfiledes[2];charbuffer[80];main(){ pipe(filedes);charstr1[80];charstr2[80];intpid1,pid2,i;while((pid1=fork())==-1);if(pid1==0){ lockf(filedes[1],1,0);printf("child1inputstring1\n");scanf("%s",str1);write(filedes[1],str1,sizeof(str1));lockf(filedes[1],0,0);exit(0);}else{ while((pid2=fork())==-1); if(pid2==0){ lockf(filedes[1],1,0); printf("child2inputstring2\n"); scanf("%s",str2); write(filedes[1],str2,sizeof(str2)); lockf(filedes[1],0,0); exit(0); }else{ if(waitpid(pid1,NULL,0)==pid1){//變大寫,也可用wait(&status)函數(shù)read(filedes[0],buffer,80);for(i=0;i<sizeof(str1);i++)buffer[i]=toupper(buffer[i]);printf("parent--child1:%s\n",buffer);}elseprintf("waitpid1error!"); if(waitpid(pid2,NULL,0)==pid2){//變小寫read(filedes[0],buffer,80);for(i=0;i<sizeof(str2);i++)buffer[i]=tolower(buffer[i]);printf("parent--child2:%s\n",buffer);}elseprintf("waitpid2error!");exit(0);}}}【運行與測試】

附加題3.學習下面共享存儲區(qū)的內(nèi)容,并用共享存儲區(qū)的方式實現(xiàn)“觀察者——報告者”問題(共享的count變量存于共享存儲區(qū)),并驗證“與時間有關(guān)的錯誤”。共享存儲操作使得兩個或兩個以上的進程能夠共用一段物理內(nèi)存(普通狀況下,兩個進程的數(shù)據(jù)區(qū)是完全獨立的,父進程用fork創(chuàng)立子進程后,子進程會復制父進程數(shù)據(jù)到自己的數(shù)據(jù)區(qū))。(1)創(chuàng)立共享內(nèi)存#include<sys/shm.h>intshmget(key_tkey,size_tsize,intpermflags);參數(shù)key是共享內(nèi)存的標記,size是共享內(nèi)存段的最小字節(jié)數(shù),permflags是訪問權(quán)限,值的設(shè)立同semget同樣。(2)共享內(nèi)存的控制#include<sys/shm.h>intshmctl(intshmid,intcommand,structshmid_ds*shm_stat);command可設(shè)為IPC_STAT,IPC_SET,IPC_RMID。參數(shù)shm_stat指向寄存屬性的構(gòu)造體,具體內(nèi)容請參考手冊。(3)共享內(nèi)存的附接和斷開#include<sys/shm.h>void*shmat(intshmid,constvoid*addr,intshmflags);intshmdt(constvoid*addr);由于兩個函數(shù)需指出進程地址空間中的地址,因此比較復雜。簡化的辦法是將shmat中的地址設(shè)為NULL?!驹闯绦颉俊具\行與測試】

實驗名稱:虛擬存儲實驗時間:年10月30日第9周星期三一、實驗目的1.掌握虛擬存儲器的概念,理解實現(xiàn)虛擬存儲器的基本辦法。2.體會請求分頁存儲管理中,頁面置換的過程,進一步掌握請求分頁的基本原理。3.進一步認識多個頁面置換算法的實現(xiàn)機制,通過實驗對各算法進行評價。二、實驗預習(預備知識的問題及回答)1.描述請求分頁的地址轉(zhuǎn)換過程。開始程序請求訪問第一頁開始缺頁中斷解決頁號>頁表長度?保存CPU現(xiàn)場頁號>頁表長度?保存CPU現(xiàn)場越界中斷是越界中斷從外存中找到缺頁否從外存中找到缺頁CPU檢索快表CPU檢索快表內(nèi)存滿否否內(nèi)存滿否頁表在快表中?頁表在快表中?是選擇一頁換出是選擇一頁換出訪問該表否訪問該表該頁被修改否該頁被修改否頁在內(nèi)存?否頁在內(nèi)存? 產(chǎn)生缺頁中斷是 請求調(diào)頁將該頁寫回外存是將該頁寫回外存修改快表修改快表OS命令CPU從外存讀缺頁OS命令CPU從外存讀缺頁修改訪問位和修改位修改訪問位和修改位啟動I/O硬件啟動I/O硬件形成物理地址形成物理地址將第一頁從外存轉(zhuǎn)入內(nèi)存將第一頁從外存轉(zhuǎn)入內(nèi)存地址變換結(jié)束修改頁表地址變換結(jié)束修改頁表2.解釋FIFO頁面置換算法所產(chǎn)生的Belady現(xiàn)象。答:Belady現(xiàn)象是指當進程分派的內(nèi)存塊數(shù)增加時,進程缺頁率反而上升的現(xiàn)象。FIFO算法在頁面置換時,總是裁減先進入主存的頁面,而先進入主存的頁面并不一定是后來用不到的頁面,如果這些頁面后來需要訪問,則將產(chǎn)生缺頁,因此即使分派的內(nèi)存塊數(shù)增加,缺頁率仍然有可能上升,這是由于使用的頁面置換算法不合理造成的。三、實驗內(nèi)容1.計算并輸出下列頁面置換算法在不同內(nèi)存容量(4頁至32頁)下的命中率.(1)最佳置換算法(OPT)(2)先進先出算法(FIFO)(3)近來最久未用頁面置換算法(LRU)具體規(guī)定以下:(1)通過隨機函數(shù)產(chǎn)生一種指令序列,共320條指令.指令地址的生成原則以下:1)50%的指令是次序執(zhí)行的;2)25%的指令是均勻分布在前地址部分;3)25%的指令是均勻分布在后地址部分;程序中的具體實施辦法是:1)在[0,319]的指令地址之間隨機選用一起點地址m;2)次序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令;3)在前地址[0,m+1]中隨機執(zhí)行一條指令,該指令的地址為m’;4)次序執(zhí)行一條指令,即執(zhí)行地址為m’+1的指令;5)在后地址[m’+2,319]中隨機執(zhí)行一條指令;重復上述環(huán)節(jié)(1)(5),直到執(zhí)行320條指令為止.將指令序列變換成為頁地址流:設(shè):頁面大小為1k,顧客內(nèi)存容量為4頁逐步增加到32頁,顧客虛存容量為32k.假定在顧客虛存中,每頁寄存10條指令,即320條指令在虛存中的寄存辦法為:第0條第9條指令在第0頁;第10條第19條指令在第1頁;……第310條第319條指令在第31頁.按以上方式顧客指令共構(gòu)成32頁.據(jù)此可得出指令地址m和頁面號page以及頁內(nèi)位移量offset之間的計算公式為:page=m/10,offset=m%10.頁地址流長度為320?!驹闯绦颉?include<stdlib.h>#include<stdio.h>#include<unistd.h>#include<sys/types.h>intpage_stream[320];intb[32];Voidran()//生成頁地址流{ intinstruct[320];inti,j,m,m1.m2;srand(getpid());//生成隨機數(shù)種子i=0;while(i<320){ m=rand()%320;instruct[i]=m; i++; if((m+1)<320){ instruct[i]=m+1; i++;}m1=rand()%(m+1); instruct[i]=m1; i++; if((m1+1)<320){ instruct[i]=m1+1;i++;}if((m1+2)<320){m2=m1+2+rand()%(320-m1-2);instruct[i]=m2;i++;}}page_stream[i]=instruct[i]/10;}intin_block(intpage,intblock_count)//頁面在內(nèi)存塊中,返回1{intflag,k;flag=0;for(k=0;k<block_count;k++)if(page==b[k]){flag=1;break;}returnflag;}voidopt()//最優(yōu)的{inti,j,k,max,t,s,d[32],page_interrupt;for(i=4;i<32;i++){for(k=0;k<32;k++)b[k]=-1;j=0;for(k=0;k<i;k++){while(in_block(page_stream[j],i)==1)j++;b[k]=page_stream[j];j++;}page_interrupt=0;for(j=i;j<320;j++){if(in_block(page_stream[j],i)==1)continue;else{for(k=0;k<i;k++){d[k]=0;for(t=i+1;t<320;t++)if(page_stream[t]==b[k]){d[k]=t;break;}if(d[k]==0)d[k]=320;}max=0;for(k=0;k<i;k++)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論