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

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——brcAAA操作系統(tǒng)實驗報告學生實驗報告

姓名:黃維津年級專業(yè)班級計科141班學號202215210137勞績

課程名稱

操作系統(tǒng)

測驗名稱

測驗1操作系統(tǒng)界面

1.熟諳Linux字符操作界面;

2.熟諳常用的Shell命令;

3.熟諳Linux文本編輯方法;

4.掌管利用GCC編譯器在Linux環(huán)境下編譯C程序的才能

1.Linux字符操作界面;

2.Shell操作命令;

3.VIM編輯器的使用方法;

4.Linux下的C程序開發(fā)。

(含主要設(shè)計設(shè)備、器材、軟件等)

計算機C語言編程軟件redhat操作系統(tǒng)VM虛擬機

(含原理圖、流程圖、關(guān)鍵代碼,或測驗過程中的記錄、數(shù)據(jù)等)

同時按住“Ctrl+Alt+Shift+F2”鍵進入字符操作界面;

熟諳常用的Shell操作命令

(1)查看系統(tǒng)分區(qū)處境:fdisk-l

(2)查看當前運行級別:runlevel

可知,當前運行級別為:5

(3)將當前運行級別變更為3:init3

運行后的結(jié)果如下圖:

輸入命令runlevel查看當前運行級別可知為3

(4)新建文件:touch文件名

這里創(chuàng)造了一個文件名為test.txt的文件

(5)刪除文件:rm要刪除的文件名

這里我刪除了剛新建的test.txt文件,輸入ls命令已查看不到test.txt文件了,證明已刪除告成。

(6)查看文件權(quán)限:ls-l

可知hello.c文件的權(quán)限是644

(7)更改文件權(quán)限:chmod文件權(quán)限文件名

這里將hello.c文件的權(quán)限更改為755,即rwxr-xr-x

VIM編輯器的使用方法

(1)一般模式:以vi開啟一個文件就直接進入一般模式了(這是默認的模式)。

(2)編輯模式:在一般模式中可以舉行刪除、復(fù)制、粘貼等的操作,但是卻無法編輯文件的內(nèi)容,只有當?shù)侥惆聪碌热魏我粋€字母之后才會進入編輯模式。按下即可退出編輯模式

(3)命令行模式:輸入三個中的任何一個,就可以將光標移動到最底下那一行。

在命令行模式下,可選用以下指令離開vi:

:q!退出,不保存;

:wq保存退出;

Linux下的C程序開發(fā)

(1)使用touch命令創(chuàng)造c文件hello.c;

(2)使用vihello.c命令編輯c文件:

#includestdio.h

intmain(){

printf(“hello,word”);

return0;

}

(3)按esc鍵[進入命令模式]

(4)輸入:“:wq!”保存退出;

(5)編譯程序:gcc-ohellohello.c

(6)運行程序:./hello

(7)運行結(jié)果:輸出hello,word

2022年11月20日

(對測驗結(jié)果舉行相應(yīng)分析,或總堅固驗的心得體會,并提出測驗的提升觀法)

在測驗的過程中,我用的是VM虛擬機和redhat操作系統(tǒng)(linux系統(tǒng)中的一種),學會了如何在虛擬機上安裝并運行l(wèi)inux操作系統(tǒng),也熟諳了Linux字符操作界面和常用的shell命令。雖然我一開頭從圖形操作界面轉(zhuǎn)到命令行操作界面多少有些不適應(yīng),但隨著對命令行的熟諳應(yīng)用,察覺也沒那么難,只是命令行太多了會記不住。與此同時,第一次在linux系統(tǒng)下編寫c程序,感覺用vi對比麻煩,由于有錯了不能調(diào)試,只是提示錯誤。不過此次測驗要求掌管編寫并運行一個簡樸的c程序,我就直接輸出一句話就好了,所以不需要怎么調(diào)試了,直接用gcc編譯并運行。在這測驗的過程中,加深了對一些術(shù)語的理解,也讓我學到了新的學識。

要說到測驗的提升觀法,我想最大要提升的地方就是要提高虛擬機運行的流暢度,不能在使用虛擬機中的操作系統(tǒng)時展現(xiàn)運行卡頓等的處境,以保住測驗的流暢舉行。

指導教師簽名:

20年月日

學生實驗報告

姓名:黃維津年級專業(yè)班級計科141學號202215210137勞績

課程名稱

操作系統(tǒng)

測驗名稱

測驗2進程管理

1.熟諳進程與程序的識別,加深對進程概念的理解;

2.了解并發(fā)進程的執(zhí)行過程;

3.掌管解決進程互斥使用資源的方法。

1.編寫一段程序,實現(xiàn)進程的管理;

2.編寫一段程序?qū)崿F(xiàn)進程的通信。

(含主要設(shè)計設(shè)備、器材、軟件等)

信息樓505機房

Linux環(huán)境

(含原理圖、流程圖、關(guān)鍵代碼,或測驗過程中的記錄、數(shù)據(jù)等)

編寫一個程序,創(chuàng)造兩個子進程,然后分別在父、子進程中顯示它們的進程號,以及對于的父進程號

(1)思路:使用系統(tǒng)調(diào)用fork()創(chuàng)造兩個子進程。當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示字符“A”,子進程分別顯示字符“b”和“c”。

(2)程序關(guān)鍵代碼

#includestdio.h

main(){

intp1,p2;

if(p1=fork())/*子進程創(chuàng)造告成,假設(shè)失敗fork函數(shù)會返回一個負值*/

putchar(b);

else{

if(p2=fork())/*子進程創(chuàng)造告成,假設(shè)失敗fork函數(shù)會返回一個負值*/

putchar(c);

elseputchar(A);/*父進程執(zhí)行*/

}

}

(3)運行結(jié)果:Abc任意的排序

(4)結(jié)果分析:

從進程執(zhí)行并發(fā)來看,輸出Abc的排列都是有可能的。fork()函數(shù)創(chuàng)造進程所需的時間雖然可能多于輸出一個字符的時間,但各個進程的時間片的獲得卻不確定是依次的,所以輸出Abc的排列都是有可能的。

寫一個程序,實現(xiàn)父子進程之間的通信

用管道實現(xiàn):

pipe_named_write.c

//向管道文件寫信息

#includestdio.h

#includeunistd.h

#includesys/types.h

intmain(){

FILE*out_file;

intcount=1;

charbuf[80];

out_file=fopen(“mypipe”,”w”);

if(out_file==NULL){

printf(“Erroropeningpipe”);

exit(1);

}

sprintf(buf,”thisisthetestdataforthenamedpipeexample\n”);

fwrite(buf,1,88,out_file);

fclose(out_file);

}

pipe_named_read.c

//從管道文件讀信息

intmain(){

FILE*in_file;

intcount=1;

charbuf[80];

in_file=fopen(“mypipe”,“r”);

if(in_file==NULL){

printf(“Errorinfopen.\n”);

exit(1);

}

while((count=fread(buf,1,80,in_file))0)

printf(“receivedfrompipe:%s\n”,buf);

fclose()in_file;

}

使用FIFO實現(xiàn)進程間的通信。用mkfifo函數(shù)創(chuàng)造管道文件my_fifo,然后從Data.txt文件中讀取數(shù)據(jù),并寫入管道文件my_fifo中;在從管道文件my_fifo中讀取數(shù)據(jù),寫入DataFromFIFO.txt文件中。整個過程用兩個C程序來實現(xiàn):fifowrite.c文件實現(xiàn)管道文件的創(chuàng)造,以及將Data.txt文件中的數(shù)據(jù)讀入管道文件中;fiforead.c文件實現(xiàn)從管道文件中讀取數(shù)據(jù),并寫入DataFromFIFO.txt文件中。

fifowrite.c的源代碼如下:

#includeunistd.h

#includestdlib.h

#includefcntl.h

#includelimits.h

#includesys/types.h

#includesys/stat.h

#includestdio.h

#includestring.h

intmain()

{

constchar*fifo_name=/home/c/my_fifo;

intpipe_fd=-1;

intdata_fd=-1;

intres=0;

constintopen_mode=O_WRONLY;

intbytes_sent=0;

charbuffer[PIPE_BUF+1];

if(access(fifo_name,F_OK)==-1)

{

//管道文件不存在

//創(chuàng)造命名管道

res=mkfifo(fifo_name,0777);

if(res!=0)

{

fprintf(stderr,Couldnotcreatefifo%s\n,fifo_name);

exit(EXIT_FAILURE);

}

}

printf(Process%dopeningFIFOO_WRONLY\n,getpid());

//以只寫阻塞方式開啟FIFO文件,以只讀方式開啟數(shù)據(jù)文件

pipe_fd=open(fifo_name,open_mode);

data_fd=open(Data.txt,O_RDONLY);

printf(Process%dresult%d\n,getpid(),pipe_fd);

if(pipe_fd!=-1)

{

intbytes_read=0;

//向數(shù)據(jù)文件讀取數(shù)據(jù)

bytes_read=read(data_fd,buffer,PIPE_BUF);

buffer[bytes_read]=\0;

while(bytes_read0)

{

//向FIFO文件寫數(shù)據(jù)

res=write(pipe_fd,buffer,bytes_read);

if(res==-1)

{

fprintf(stderr,Writeerroronpipe\n);

exit(EXIT_FAILURE);

}

//累加寫的字節(jié)數(shù),并持續(xù)讀取數(shù)據(jù)

bytes_sent+=res;

bytes_read=read(data_fd,buffer,PIPE_BUF);

buffer[bytes_read]=\0;

}

close(pipe_fd);

close(data_fd);

}

else

exit(EXIT_FAILURE);

printf(Process%dfinished\n,getpid());

exit(EXIT_SUCCESS);

}

源文件fiforead.c的代碼如下:

#includeunistd.h

#includestdlib.h

#includestdio.h

#includefcntl.h

#includesys/types.h

#includesys/stat.h

#includelimits.h

#includestring.h

intmain()

{

constchar*fifo_name=/home/c/my_fifo;

intpipe_fd=-1;

intdata_fd=-1;

intres=0;

intopen_mode=O_RDONLY;

charbuffer[PIPE_BUF+1];

intbytes_read=0;

intbytes_write=0;

//清空緩沖數(shù)組

memset(buffer,\0,sizeof(buffer));

printf(Process%dopeningFIFOO_RDONLY\n,getpid());

//以只讀阻塞方式開啟管道文件,留神與fifowrite.c文件中的FIFO同名

pipe_fd=open(fifo_name,open_mode);

//以只寫方式創(chuàng)造保存數(shù)據(jù)的文件

data_fd=open(DataFormFIFO.txt,O_WRONLY|O_CREAT,0644);

printf(Process%dresult%d\n,getpid(),pipe_fd);

if(pipe_fd!=-1)

{

do

{

//讀取FIFO中的數(shù)據(jù),并把它保存在文件DataFormFIFO.txt文件中

res=read(pipe_fd,buffer,PIPE_BUF);

bytes_write=write(data_fd,buffer,res);

bytes_read+=res;

}while(res0);

close(pipe_fd);

close(data_fd);

}

else

exit(EXIT_FAILURE);

printf(Process%dfinished,%dbytesread\n,getpid(),bytes_read);

exit(EXIT_SUCCESS);

}

運行結(jié)果如下:

2022年11月26日

(對測驗結(jié)果舉行相應(yīng)分析,或總堅固驗的心得體會,并提出測驗的提升觀法)

在查詢了資料后逐步懂得怎么下手完成這個測驗,在測驗過程中逐步理解了進程的概念,并進一步了解了進程的管理機制,同時也明白了什么是管道通信,怎樣加鎖和解鎖,對課本上的學識理解得更加深入了。同時也讓我熟悉到自己的缺乏,操作系統(tǒng)的有些學識,我知道的還不多,沒有掌管好,還需要多多學學,不斷提升自己的才能。

指導教師簽名:

年月日

學生實驗報告

姓名:黃維津年級專業(yè)班級計科141學號202215210137勞績

課程名稱

操作系統(tǒng)

測驗名稱

測驗3存儲管理

1.了解虛擬存儲管理技術(shù)的原理與特點;

2.掌管苦求頁式存儲管理的頁面設(shè)置算法。

1.編寫一個程序模擬存儲管理過程。

(含主要設(shè)計設(shè)備、器材、軟件等)

計算機C語言編程軟件

(含原理圖、流程圖、關(guān)鍵代碼,或測驗過程中的記錄、數(shù)據(jù)等)

頁式虛擬存儲管理程序模擬

(1)設(shè)計思路

根據(jù)模擬的頁式管理設(shè)計,在頁式存儲管理中有三種最根本的頁面調(diào)度算法:最正確置換算法(OPT)、先進先出置換算法(FIFO)、最近最久未使用置換算法(LRU),但在三種算法中均要求在調(diào)度程序中產(chǎn)生的頁面序列是隨機產(chǎn)生的,而不是人為的輸入,在執(zhí)行時只需變更頁面的大小及內(nèi)存容量就可以得到不同的頁面序列,另外還需要說明隨機的性能和其性能可能對算法的影響,并對隨機性要有確定的參數(shù)操縱才能。此次測驗將使用兩種方法實現(xiàn),分別是先進先出(FIFO)頁面置換和最近最久未使用(LRU)置換。

程序流程圖

輸入內(nèi)存調(diào)配頁數(shù)

輸入內(nèi)存調(diào)配頁數(shù)

開頭

初始化第一列值

是否有苦求訪問頁

復(fù)制前一頁內(nèi)容

內(nèi)存是否已存在

內(nèi)存是否有空頁

直接插入

替換內(nèi)存中將來不展現(xiàn)或離當前最遠的頁

輸出全部頁面變化處境

終止

Y

Y

N

N

Y

N

(3)關(guān)鍵代碼

FIFO算法關(guān)鍵代碼

functionFIFO(){

PageList=[6210342045931205318];//初始化:

NumofPage=length(PageList);

NumofPosition=M;

SMatrix[NumofPosition][2]={-1};//將其初始化為-1

for(i=0;iNumofPage;i++){

pos=findPositionFIFO(SMatrix,PageList[i]);

if(pos==-1)continue;//在SMatrix中找到頁面已經(jīng)存在

for(j=0;jM;j++){

if(SMatrix[i][2]0)SMatrix[i][2]=SMatrix[i][2]+1;

}

SMatrix[pos][1]=PageList[i];

if(SMatrix[pos][2]==-1){SMatrix[pos][2]=1}

}

}

functionpos=findPositionFIFO(SMatrix,Pageid){

NumofPosition=length(SMatrix);

lastPeriod=SMatrix[0][2];

value=SMatrix[0][1];

for(i=0;iNumofPosition;i++){

if(SMatrix[i][1]==-1){

pos=i;

return;

}

elseif(SMatrix[i][1]==Pageid){

pos=-1;

return;

}

elseif(SMatrix[i][2]lastPeriod){

pos=i;

lastPeriod=SMatrix[i][2];

}

}

}

LRU算法關(guān)鍵代碼

functionLRU(){

PageList=[6210342045931205318];//初始化:

NumofPage=length(PageList);

NumofPosition=M;

SMatrix=array[NumofPosition][2];//將其初始化為-1

for(i=0;iNumofPage;i++){

[posisIn]=findPositionLRU(SMatrix,PageList[i]);

if(pos==-1){//在SMatrix中找到頁面已經(jīng)存在

SMatrix[i][2]=1;

continue;

}

for(j=0;jM;j++){

if(SMatrix[i][2]0)SMatrix[i][2]=SMatrix[i][2]+1;

}

SMatrix[pos][1]=PageList[i];

if(SMatrix[pos][2]==-1){SMatrix[pos][2]=1}

}

}

function[posisIn]=findPositionLRU(SMatrix,Pageid){

NumofPosition=length(SMatrix);

lastPeriod=SMatrix[0][2];

value=SMatrix[0][1];

isIn=0;

for(i=0;iNumofPosition;i++){

if(SMatrix[i][1]==-1){

pos=i;

return;

}

elseif(SMatrix[i][1]==Pageid){

pos=-1;

isIn=1;

return;

}

elseif(SMatrix[i][2]lastPeriod){

pos=i;

lastPeriod=SMatrix[i][2];

}

}

}

2022年11月26日

(對測驗結(jié)果舉行相應(yīng)分析,或總堅固驗的心得體會,并提出測驗的提升觀法)

由于學識有限,只能約莫地完成這次測驗。通過完成這個測驗,讓我反復(fù)地琢磨著課本上的學識點,努力將其弄懂,這樣才有思路來完成測驗。從理論到實踐可以學到好多的東西,同時也可以穩(wěn)定老師在課堂上講過的學識,也學到了好多在書本上學不到的學識。通過這次測驗使我懂得了理論與實際相結(jié)合是很重要的,只有理論學識是遠遠不夠的。

指導教師簽名:

20年月日

學生實驗報告

姓名:黃維津年級專業(yè)班級計科141學號202215210137勞績

課程名稱

操作系統(tǒng)

測驗名稱

測驗4文件管理

1.了解文件系統(tǒng)的功能和內(nèi)部實現(xiàn);

2.熟諳文件系統(tǒng)的系統(tǒng)調(diào)用;

使用有關(guān)文件系統(tǒng)的系統(tǒng)調(diào)用create()、open()、close()、read()和write()將file1.c和file2.c合并為file3.c;

(含主要設(shè)計設(shè)備、器材、軟件等)

計算機C語言編程軟件

(含原理圖、流程圖、關(guān)鍵代碼,或測驗過程中的記錄、數(shù)據(jù)等)

(1)了解函數(shù)

create()函數(shù):

功能描述:創(chuàng)造一個文件并以只寫的方式開啟

函數(shù)原型:intcreat(constchar*pathname,mode_tmode)

參數(shù)說明:pathname:指向欲建立的文件路徑字符串

mode_tmode:表示新建文件的權(quán)限

返回值:告成:返回文件描述符

失?。悍祷?1

open()函數(shù):

功能描述:用于開啟或創(chuàng)造文件,在開啟或創(chuàng)造文件時可以指定文件的屬性及用戶的權(quán)限等各種參數(shù)。

函數(shù)原型:intopen(constchar*pathname,intflags,intperms)

參數(shù)說明:pathname:被開啟的文件名(可包括路徑名如dev/ttyS0)

flags:文件開啟方式

perms:被開啟文件的存取權(quán)限

返回值:告成:返回文件描述符

失?。悍祷?1

close()函數(shù):

功能描述:用于關(guān)閉一個被開啟的的文件

函數(shù)原型:intclose(intfd)

參數(shù)說明:fd文件描述符

函數(shù)返回值:0告成,-1出錯

read()函數(shù)

功能描述:從文件讀取數(shù)據(jù)

函數(shù)原型:ssize_tread(intfd,void*buf,size_tcount)

參數(shù)說明:fd:將要讀取數(shù)據(jù)的文件描述詞

buf:指緩沖區(qū),即讀取的數(shù)據(jù)會被放到這個緩沖區(qū)中去

count:表示調(diào)用一次read操作,理應(yīng)讀多少數(shù)量的字符

返回值:返回所讀取的字節(jié)數(shù);0(讀到EOF);-1(出錯)

write()函數(shù)

功能描述:向文件寫入數(shù)據(jù)

函數(shù)原型:ssize_twrite(intfd,void*buf,size_tcount)

返回值:寫入文件的字節(jié)數(shù)(告成);-1(出錯)

(2)關(guān)鍵代碼

#includestdio.h

#includestdlib.h

#includestring.h

voidmain()

{

chars1filename[20],s2filename[20],dfilename[20];

FILE*s1fp,*s2fp,*dfp;

intnum=0;

/*得到第一個文件的文件名*/

printf(Pleaseinputsource1filename:\n);

gets(s1filename);

/*得到另一個文件的文件名*/

printf(Pleaseinputsource2filename:\n);

gets(s2filename);

/*得到要目標文件的文件名*/

printf(Pleaseinputdestinationfilename:\n);

gets(dfilename);

/*輸出信息合并前的文件的內(nèi)容*/

if((s1fp=fopen(s1filename,r))==0)

{

printf(Cantopenthefile:%s\n,s1filename);

exit(0);

}

if((s2fp=fopen(s2filename,r))==0)

{

printf(Cantopenthefile:%s\n,s2filename);

exit(0);

}

if((dfp=fopen(dfilename,w+))==0)

{

printf(Cantopenorcreatethefile:%s\n,dfilename);

exit(0);

}

/*輸出信息合并前文件的內(nèi)容*/

printf(\nThetextofthefile%sbeforemerging:\n,s1filename);

OutputFile(s1fp);

printf(\nThetextofthefile%sbeforemerging:\n,s2filename);

OutputFile(s2fp);

fseek(s2fp,0L,SEEK_SET);

fseek(s1fp,0L,SEEK_SET);

/*信息合并*/

MergeFile(s1fp,s2fp,dfp,num);

/*輸出信息合并后文件的內(nèi)容*/

printf(\nThetextofthefile%saftermerging:\n,dfil

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論