操作系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)一:熟悉%20Linux%20命令及進(jìn)程管理%20自己電腦上裝了%20Ubuntu%20系統(tǒng),所以這次實(shí)驗(yàn)的內(nèi)容在此操%20作系統(tǒng)下進(jìn)行在%20home%20文件夾下有如下目錄workspace%20文件夾下有如下目錄一、%20實(shí)驗(yàn)?zāi)康?201、%20熟悉%20Linux%20命令%202、%20用%20Vi%20文本編輯器新建%20c%20語言文件并編譯運(yùn)行%203、%20進(jìn)程管理%20二、%20實(shí)驗(yàn)內(nèi)容和步驟%201.%20熟悉%20Linux%20命令(1)ls%20顯示文件目錄%20打開終端%20ls%20顯示%20home%20文件夾下文件目錄如(5)中圖所示%20(2)%20cd:改變當(dāng)前目錄cd%20workspace%20進(jìn)入%20workspace%20文件夾%20ls%20顯示%20workspace%20文件夾下目錄%20如(5)中圖所示%20(3)mkdir%20建立子目錄mkdir%20newfile%20建立文件名為%20newfile%20的新目錄%20ls%20顯示目錄%20如(5)中圖所示%20(4)rmdir%20刪除子目錄%20rmdir%20newfile%20刪除文件名為%20newfile%20的目錄%20ls%20顯示目錄%20如(5)中圖所示%20(5)mv%20文件改名%20mv%20example1%20example4%20將%20example1%20修改為%20example4%20ls%20顯示目錄2.%20用%20Vi%20文本編輯器新建%20c%20語言文件并編譯運(yùn)行%20在%20workspace/program%20文件夾下進(jìn)行操作vi%20hello.c%20新建文件名為%20hello.c%20的文件i%20進(jìn)入文本編輯模式輸入程序代碼Esc%20退出文本編輯模式%20Shift+;%20wq%20退出保存%20ls%20查看目錄gcc%20hello.c%20–o%20hello%20編譯%20ls%20查看目錄(綠色表示可執(zhí)行文件)./hello%20當(dāng)前目錄下執(zhí)行輸出%20hello%20linux!%203.%201.%20getpid()函數(shù)vi%20getpid_test.c%20i%20輸入代碼%20esc%20Shift+;%20wq%20gcc%20getpid_test.c%20-o%20getpid_test%20./getpid_test如下如所示,存在%20getpid_test.c%20文件和%20getpid_test%20可執(zhí)行文件2.%20fork()函數(shù)%20前面已經(jīng)熟悉%20vi%20編輯器模式,所以下面使用文檔編輯運(yùn)行%20fork_test%203.%20exit()函數(shù)運(yùn)行%20exit_test%204.%20zombie.c運(yùn)行%20zombie.c%20列一下系統(tǒng)內(nèi)的進(jìn)程%20ps%20-ax5.%20wait.c%20編寫代碼運(yùn)行%20wait.c%20等待%2010%20秒后三、%20代碼及運(yùn)行結(jié)果分析%20附錄程序%201、process1%20程序代碼運(yùn)行結(jié)果結(jié)果分析%20此處的運(yùn)行結(jié)果與自己的設(shè)想出現(xiàn)了差別。
if(i=fork())表示為父進(jìn) 程時(shí),j=wait()父進(jìn)程等待,此處應(yīng)該返回子進(jìn)程的 IDlinux命令,但返回的時(shí) -1,正確的答案應(yīng)該是 j=i(子進(jìn)程 ID)。此處出錯(cuò)還沒有找到原因, 自己課下會(huì)再查資料理解。2、process2 程序代碼運(yùn)行結(jié)果結(jié)果分析P1 父P1 子 b=2437P2 父 a3、process3P2 子 c=2436 c=2438程序代碼運(yùn)行結(jié)果結(jié)果分析ID=2687; m=2688;n=2689; k=2690ID=2689; m=2694;ID=2690ID=2694ID=2688 m=2691ID=2691 m=2693ID=2692ID=26934、process4 程序代碼運(yùn)行結(jié)果結(jié)果分析 子進(jìn)程和父進(jìn)程的執(zhí)行順序是隨機(jī)的,在運(yùn)行過程中,進(jìn)程是會(huì) 被打斷的。 5、編寫程序#include <stdio.h> int main() { int m,n,k;m=fork();printf("PID:%d\t",getpid()); printf("The return value of fork():%d\t\t",m); printf("he\n"); n=fork(); printf("PID:%d\t",getpid()); printf("The return value of fork():%d\t\t",n); printf("ha\n"); if(m>0&&n>0){k=fork(); printf("PID:%d\t",getpid()); printf("The return value of fork():%d\t\t",k); printf("ho\n"); } }6、編寫程序#include <stdio.h> int main(){int p1,p2,i;while((p1=fork())==-1); if(p1==0){ /*子進(jìn)程 1*/lockf(1,1,0); /*鎖定*/for(i=0;i<50000;i++)printf("son%d\n",i);lockf(1,0,0); /*解鎖*/}else{/*父進(jìn)程*/lockf(1,1,0); /*鎖定*/while((p2=fork())==-1); if(p2==0){ /*父進(jìn)程創(chuàng)建的子進(jìn)程 2*/lockf(1,1,0); /*鎖定*/for(i=0;i<50000;i++)printf("daughter%d\n",i);lockf(1,0,0); /*解鎖*/}else{/*子進(jìn)程 1 創(chuàng)建的子進(jìn)程 3*/lockf(1,1,0); /*鎖定*/for(i=0;i<50000;i++)printf("parent%d\n",i);lockf(1,0,0); /*解鎖*/}lockf(1,0,0);/*解鎖*/}}四、 心得體會(huì) 通過這次實(shí)驗(yàn),自己對 linux 系統(tǒng)的基本命令有了初步的了解。
學(xué) 會(huì)了使用 vi 編輯器編寫代碼,用 gcc 工具進(jìn)行運(yùn)行。以前電腦中 雖然安裝了 Linux 系統(tǒng),但是自己并不經(jīng)常使用,通過這次實(shí)驗(yàn), 自己初步領(lǐng)略到了 Linux 系統(tǒng)的魅力。 通過對進(jìn)程管理的學(xué)習(xí),了解了 Linux 系統(tǒng)的進(jìn)程管理機(jī)制linux命令, 后面的四個(gè)驗(yàn)證性實(shí)驗(yàn)以及兩個(gè)作業(yè),加深了自己的理解。最后 兩個(gè)自己設(shè)計(jì)的程序,自己并沒有完全理解,所以參考了同學(xué)的 程序,業(yè)余時(shí)間自己再做學(xué)習(xí)。