操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

附加題3.學(xué)習(xí)下面共享存儲(chǔ)區(qū)的內(nèi)容,并用共享存儲(chǔ)區(qū)的方式實(shí)現(xiàn)“觀察者——報(bào)告者”問(wèn)題(共享的count變量存于共享存儲(chǔ)區(qū)),并驗(yàn)證“與時(shí)間有關(guān)的錯(cuò)誤”。共享存儲(chǔ)操作使得兩個(gè)或兩個(gè)以上的進(jìn)程能夠共用一段物理內(nèi)存(普通狀況下,兩個(gè)進(jìn)程的數(shù)據(jù)區(qū)是完全獨(dú)立的,父進(jìn)程用fork創(chuàng)立子進(jìn)程后,子進(jìn)程會(huì)復(fù)制父進(jìn)程數(shù)據(jù)到自己的數(shù)據(jù)區(qū))。(1)創(chuàng)立共享內(nèi)存#include<sys/shm.h>intshmget(key_tkey,size_tsize,intpermflags);參數(shù)key是共享內(nèi)存的標(biāo)記,size是共享內(nèi)存段的最小字節(jié)數(shù),permflags是訪問(wèn)權(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)容請(qǐng)參考手冊(cè)。(3)共享內(nèi)存的附接和斷開(kāi)#include<sys/shm.h>void*shmat(intshmid,constvoid*addr,intshmflags);intshmdt(constvoid*addr);由于兩個(gè)函數(shù)需指出進(jìn)程地址空間中的地址,因此比較復(fù)雜。簡(jiǎn)化的辦法是將shmat中的地址設(shè)為NULL?!驹闯绦颉俊具\(yùn)行與測(cè)試】

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