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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、哈 爾 濱 學 院實 驗 報 告課程名稱: 計算機操作系統(tǒng) 專 業(yè): 軟件工程 班 級: 12-8 學 號: 12031801 姓 名: 常燕如 教務處制實驗一 進程管理【實驗目的與要求】 加深對進程概念的理解,明確進程與程序的區(qū)別。 掌握Linux進程創(chuàng)建及撤銷的方法,進一步認識并發(fā)執(zhí)行的實質。 掌握Linux系統(tǒng)下守護進程的創(chuàng)建方法?!緦嶒炘怼?Linux進程管理命令進程查看進程終止進程優(yōu)先級設置 Linux進程控制函數創(chuàng)建和修改進程設置進程屬性獲取進程屬性進程的退出 Linux守護進程獨立啟動守護進程超級守護進程守護進程的編寫流程 守護進程的編寫遵循特定的流程,主要包括五個步驟: St

2、ep 創(chuàng)建子進程,退出父進程 Step 在子進程中創(chuàng)建新會話 Step 改變當前目錄為根目錄 Step 重設文件權限掩碼 Step 關閉文件描述符【實驗主要儀器與材料】 帶Linux操作系統(tǒng)的PC機 GCC編譯器【實驗內容】 獲取進程信息通過管理命令,獲取系統(tǒng)當前執(zhí)行進程的信息,包括進程名稱與ID、PID和PGID等。 創(chuàng)建進程編程程序,實現父進程創(chuàng)建一個子進程,返回后父子進程都分別循環(huán)輸出字符串“I am parent.”或“I am child.”5次,每輸出一次延時1秒(sleep(1),然后進入下一次循環(huán)。觀察并分析運行結果。然后將程序改為父子進程同步執(zhí)行:子進程循環(huán)輸出字符串“I a

3、m child.”5次,然后父進程再循環(huán)輸出字符串“I am parent.”5次。再次觀察并分析運行結果。【實驗步驟及實驗結果分析】 實驗內容1 通過進程實現及驗證父進程及子進程的id號的命令ps -lg 實驗內容2實現父進程創(chuàng)建一個子進程,返回后父子進程都分別循環(huán)輸出字符串“I am parent.”或“I am child.”5次,每輸出一次延時1秒(sleep(1),然后進入下一次循環(huán)。 #include<sys/types.h>#include<unistd.h>#include<stdio.h>int main() pid_t pt; print

4、f("Hello world!n"); int i; pt=fork(); for(i=0;i<5;i+) if(pt=-1) printf("Fork error.n"); else if printf("I am a parent.n");Sleep(1); else printf("I am a child.n");Sleep(1); return 0; 父子進程同步執(zhí)行:子進程循環(huán)輸出字符串“I am child.”5次,然后父進程再循環(huán)輸出字符串“I am parent.”5次。#include&l

5、t;sys/types.h>#include<unistd.h>#include<stdio.h>int main() pid_t pt; printf("Hello world!n"); int i; pt=fork(); for(i=0;i<5;i+) if(pt=-1) printf("Fork error.n"); else if printf("I am a parent.n"); else printf("I am a child.n"); return 0;【思考題

6、】 程序和進程的區(qū)別。 (1)程序是動態(tài)的,程序是靜態(tài)的:程序是有序代碼的集合;進程是程序的執(zhí)行。通常進程不可在計算機之間遷移;而程序通常對應著文件、靜態(tài)和可以復制。 (2)進程是暫時的,程序是永久的:進程是一個狀態(tài)變化的過程,程序可長久保存。 (3)進程和程序的組成不同:進程的組成包括程序、數據和進程控制塊(即進程狀態(tài)信息)。 (4)進程和程序的對應關系:通過多次執(zhí)行,一個程序可對應多個進程;通過調用關系,一個進程可包括多個程序。 Linux操作系統(tǒng)下有哪些進程類型。 交互進程; 批處理進程; 守護進程; 進程創(chuàng)建函數fork和vfork的區(qū)別。 (1)fork()用于創(chuàng)建一個新進程。由fo

7、rk()創(chuàng)建的子進程是父進程的副本。即子進程 獲取父進程數據空間,堆和棧的副本。父子進程之間不共享這些存儲空間的部分。而vfork()創(chuàng)建的進程并不將父進程的地址空間完全復制到子進程中,因為子進程會立即調用exec (或exit)于是也就不會存放該地址空間。相反,在子進程調用exec或exit之前,它在父進程的空間進行。 (2)vfork()與fork()另一個區(qū)別就是:vfork保證子進程先運行,在調用exec或exit之前與父進程數據是共享的,在它調用exec或exit之后父進程才可能被調度運行。 (3)vfork和fork之間的還有一個區(qū)別是:vfork保證子進程先運行,在她調用exec

8、或exit之后父進程才可能被調度運行。如果在調用這兩個函數之前子進程依賴于父進程的進一步動作,則會導致死鎖。 進程的退出函數有哪些?有何區(qū)別?C程序是如何被啟動終止的? exit 函數; return 函數; abort函數 _exit函數。 exit和_exit函數用于正常終止一個程序 exit先執(zhí)行一些清除處理.然后進入內核清除操作包括調用執(zhí)行各終止處理程序,關閉所有標準I/O流 _exit立即進入內核 abort函數用于異常終止一個程序 exit是一個函數,有參數,把控制權交給系統(tǒng) return是函數執(zhí)行完后的返回,將控制權交給調用函數實驗二 進程通信【實驗目的與要求】 了解基于信號的進

9、程通信機制。 熟悉LINUX系統(tǒng)中進程之間軟中斷通信的基本原理。【實驗原理】 一、信號 信號的基本概念 信號的發(fā)送 對信號的處理 二、所涉及的中斷調用 kill() signal() wait() waitpid() lockf()【實驗主要儀器與材料】 帶Linux操作系統(tǒng)的PC機 GCC編譯器【實驗內容】 編寫程序:用fork()創(chuàng)建兩個子進程,再用系統(tǒng)調用signal()讓父進程捕捉鍵盤上來的中斷信號(即按c鍵);捕捉到中斷信號后,父進程用系統(tǒng)調用kill()向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止:Child process1 is killed by paren

10、t!Child process2 is killed by parent!父進程等待兩個子進程終止后,輸出如下的信息后終止:Parent process is killed! 分析利用軟中斷通信實現進程同步的機理。【實驗步驟及實驗結果分析】 編寫程序:用fork()創(chuàng)建兩個子進程,再用系統(tǒng)調用signal()讓父進程捕捉鍵盤上來的中斷信號(即按c鍵);捕捉到中斷信號后,父進程用系統(tǒng)調用kill()向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止:Child process1 is killed by parent!Child process2 is killed by paren

11、t!父進程等待兩個子進程終止后,輸出如下的信息后終止:Parent process is killed! 對軟中斷信號的處理分三種情況進行: (1)如果進程收到的軟中斷是一個已決定要忽略的信號,不做處理便立即返回。 (2)進程收到軟中斷后便退出。 (3)執(zhí)行用戶設置的軟中斷處理程序?!舅伎碱}】實驗內容的參考程序如下,請仔細閱讀、調試、分析,回答下述問題:#include <stdio.h>#include <signal.h>#include <unistd.h>#include <stdlib.h>#include <sys/wait.h

12、> void waiting(),stop();int wait_mark; int main()int p1, p2, stdout=1;while(p1=fork() = -1); /*創(chuàng)建子進程p1*/if (p1 > 0)while(p2=fork() = -1);/*創(chuàng)建子進程p2*/if(p2 > 0)wait_mark=1;signal(SIGINT, stop);/*接收到c信號,轉stop*/waiting();kill(p1, 16);/*向p1發(fā)軟中斷信號16*/kill(p2, 17);/*向p2發(fā)軟中斷信號17*/wait(0);/*同步*/wait

13、(0);printf("Parent process is killed!n");exit(0);elsewait_mark=1;signal(17, stop);/*接收到軟中斷信號17,轉stop*/waiting();lockf(stdout, 1, 0);printf("Child process 2 is killed by parent!n");lockf(stdout, 0, 0);exit(0);elsewait_mark=1;signal(16, stop);/*接收到軟中斷信號16,轉stop*/waiting();lockf(std

14、out, 1, 0);printf("Child process 1 is killed by parent!n");lockf(stdout, 0, 0);exit(0);return 0;void waiting()while(wait_mark != 0);void stop()wait_mark=0; 參考程序段前面部分用了兩個wait(0),它們起什么作用?作用:wait(0)函數作用是等待子進程結束,父進程有兩個子進程,所以兩個wait函數。 參考程序段中每個進程退出時都用了語句exit(0),為什么?作用:是為了讓子進程正常自我終止,正常退出。 參考程序的運行

15、結果是什么?Parent process is killed! 參考程序是否符合實驗要求?為什么?不符合。原因:p1,p2都會捕捉中斷信號。對于父進程,當它捕捉到中斷信號時就會轉向指定的函數stop();函數,之后父進程被喚醒,從被中斷處繼續(xù)執(zhí)行。對于子進程,由于沒有給它們指定的收到中斷信號后的動作,就會執(zhí)行默認的動作,結束自己。所以當我們發(fā)出中斷信號后,父進程按預計的方式正常執(zhí)行,而p1,p2自己結束了自己,所以不會有預計的結果。 參考程序該如何修改才能得到正確結果?第一種方法:在fork()語句創(chuàng)建子進程之前捕捉中斷信號,既signal(SIGINT, stop);。第二種方法:在每個子進

16、程前添加忽略中斷信號的語句,既signal(SIGINT,SIG_IGN);。第三種方法:打開兩個界面,一個界面正常編譯,另一個界面執(zhí)行:ps -aps -a|grep a.outkill -s INT 11313實驗三 內存管理【實驗目的與要求】 了解虛擬存儲技術的特點。 掌握請求頁式存儲管理的頁面置換算法。 3.了解頁面大小和內存實際容量對命中率的影響?!緦嶒炘怼糠猪摯鎯芾韺⒁粋€進程的邏輯地址空間分成若干大小相等的片,成為頁面或頁。在進程運行過程中,若其所要訪問的頁面不在內存而需要把他們調入內存,但內存已無空閑時,為了保證該進程能正常運行,系統(tǒng)必須從內存中調出一頁程序或數據,送磁盤的對

17、換區(qū)中。但應將哪個頁面調出,須根據一定的算法來確定。通常,把選擇換出頁面的算法稱為頁面置換算法(Page Replacement Algorithm)。一個好的頁面置換算法,應具有較低的頁面更換頻率。從理論上講,應將那些以后不再會訪問的頁面換出,或將那些在較長時間內不會再訪問的頁面調出。 最佳置換算法OPT(Optimal) 先進先出頁面置換算法FIFO 最近最久未使用置換算法LRU 最少訪問頁面置換算法LFU 最近最不經常使用算法NUR【實驗主要儀器與材料】 帶Linux操作系統(tǒng)的PC機。 GCC編譯器?!緦嶒瀮热荨?、通過隨機數產生一個指令序列,共320條指令。指令的地址按下述原則生成:l

18、 50%的指令是順序執(zhí)行的l 25%的指令是均勻分布在前地址部分l 25%的指令是均勻分布在后地址部分具體的實施方法是:l 在【0,319】的指令地址之間隨機選取一起點m;l 順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令;l 在前地址【0,m+1】中隨機選取一條指令并執(zhí)行,該指令的地址為m;l 順序執(zhí)行一條指令,其地址為m+1;l 在后地址m+2,319中隨機選取一條指令并執(zhí)行;l 重復上述步驟,直到執(zhí)行320次指令。2、將指令序列變換成為頁地址流設:l 頁面大小為1K;l 用戶內存容量為4頁到32頁;l 用戶虛擬容量為32K。在用戶虛存中,按每K存放10條指令排列虛擬地址,即320條指令在虛存

19、中的存放方式為:第0條第9條指令為第0頁(對應虛存地址為【0,9】);第10條第19條指令為第1頁(對應虛存地址為【10,19】);第310條第319條指令為第31頁(對應虛存地址為【310,319】)。按以上方式,用戶指令可組成32頁。3、計算并輸出下列各種算法在不同內存容量下的命中率。l 先進先出的算法(FIFO);l 最近最少使用算法(LRU);l 最佳淘汰算法(OPT):先淘汰最不常用的頁地址;其中OPT為選作內容。命中率 = 1 頁面時效次數/頁地址流長度在本實驗中,頁地址流長度為320,頁面失效次數為每次訪問相應指令時,該指令所對應的頁不在內存的次數?!緦嶒灢襟E及實驗結果分析】首先

20、用srand()和rand()函數定義和產生指令序列,然后將指令序列變換成相應的頁地址流,并針對不同的算法計算出相應的命中率。/*利用先進先出算法(FIFO)和最近最久未使用算法(LRU)*/#include<stdio.h>#include<stdlib.h>#include<unistd.h> #include<string.h>#define NULL_1 10000const int ty=320;int d320; /指令序列int page320; /頁地址流int p32; /內存頁面int que; /缺頁次數int time32

21、; /記錄頁面距離上次被訪問的時間void creat(int leng) /leng為內存頁面數量int i;que=0;for(i=0;i<leng;i+)pi=NULL_1; /讓內存頁面置空timei=0; /*先進先出算法void FIFO(int leng) /leng為內存頁面數量 int i,j,k;int n; /n為要被替換的頁面號,按0,1,2.leng,0,1,2.leng循環(huán)變化creat(leng); /初始化內存頁面 n=0; for(i=0;i<ty;i+) k=0;for(j=0;j<leng;j+)if(pj=NULL_1)break;el

22、se if(pj=pagei)/在內存中有該頁k=1;break; if(k=0) que+;pn=pagei;n+; if(n=leng)n=0; printf("%-7.3ft",1-(float)que/ty); /*最近最久未使用算法 void LRU(int leng) /leng為內存頁面數量 int i,j,k; int tmax; /存time的最大值 int t; /t為要被訪問的頁面號 creat(leng); /初始化內存頁面 for(i=0;i<ty;i+) k=0;for(j=0;j<leng;j+)if(pj=NULL_1)break

23、;else if(pj=pagei)/在內存中有該頁k=1;t=j;break;if(k=0)que+;tmax=time0;t=0;for(j=0;j<leng;j+) /查找最久沒訪問的頁面號賦予tif(tmax<timej)tmax=timej;t=j;pt=pagei;for(j=0;j<leng;j+) /將每個頁面time自增timej+;timet=0; /將這次被訪問的頁面time清零 printf(" %-7.3ft",1-(float)que/ty); void main( ) int m,i; srand(10*getpid(); /

24、用來作為初始化隨機數隊列的"種子" m=(int)(float)(ty-1)*(rand()/(RAND_MAX+1.0); /選0-319中一數 for (i=0; i<ty; i+=4) /產生指令隊列 di=m; /任選一指令訪問點m di+1=di+1; /順序執(zhí)行一條指令m+1 di+2=(int)(float)di*(rand()/(RAND_MAX+1.0); /執(zhí)行前地址指令m',即選擇(0,m+1)之間的數 di+3=di+2+1; /順序執(zhí)行一條指令 m= (int)(float)(ty-1)-di+2)*(rand()/(RAND_MAX

25、+1.0) + di+2; /選(m'+2,319)之間數 for(i=0;i<ty;i+) /將指令序列變換成頁地址流 pagei=di/10; printf("PAGEtFIFOt LRUtn"); for(i=4;i<=32;i+) /內存從4頁到32頁 printf(" %2dt",i); FIFO(i); LRU(i); printf("n"); 程序運行結果:【思考題】 在內存頁面較少(45個)的情況時,各種頁面置換算法的命中率有何差別? FIFO算法和LRU算法命中率都在55%左右,相差不大。 在內存

26、頁面為712個頁面時,各種頁面置換算法的命中率有何差異?FIFO算法命中率在59%-67%,LRU算法命中率在60%-70%之間,相對來說,最近最久未使用算法效率更好一些。 在內存頁面為2532個頁面時,各種頁面置換算法的命中率有何差異?兩種算法命中率都在80%-90%之間,當內存中中頁面數逐漸增加時,訪問的都已裝入內存,從而命中率都較大。實驗四 文件系統(tǒng)【實驗目的與要求】1、熟悉Linux文件系統(tǒng)的文件和目錄結構,掌握Linux文件系統(tǒng)的基本特征。2、掌握命令行方式下文件操作命令和程序中文件操作函數的使用方法。3.、掌握Linux文件系統(tǒng)的加載和卸載方法?!緦嶒炛饕獌x器與材料】1、帶Linu

27、x操作系統(tǒng)的PC機2、GCC編譯器【實驗內容】1. 熟悉Linux下的文件操作命令,如查看文件系統(tǒng)的分區(qū)和設備文件、查看文件系統(tǒng)目錄結構、創(chuàng)建文件夾、復制文件、更改文件權限等,觀察Linux文件系統(tǒng)的特點。2. 對比實驗一的文件拷貝代碼,利用不同的文件操作函數實現文件的輸出和拷貝。3. 實現對光盤的加載和訪問,然后卸載設備。4. 加載Windows文件系統(tǒng),實現對Windows數據的訪問和共享?!緦嶒灢襟E及實驗結果分析】實驗內容:1.df:查看文件系統(tǒng)的狀態(tài)信息,顯示各分區(qū)容量、硬盤占用空間、目前剩余空間及掛載點等信息 du:統(tǒng)計目錄或文件所占磁盤空間的大小 mkdir:創(chuàng)建文件夾 cp:復制文件 chmod:更改文件權限 2. (1) #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() FILE *fp;char ch;char fname30;printf("Please input the fi

溫馨提示

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

評論

0/150

提交評論