操作系統(tǒng)實驗指導書V2013[1]_第1頁
操作系統(tǒng)實驗指導書V2013[1]_第2頁
操作系統(tǒng)實驗指導書V2013[1]_第3頁
操作系統(tǒng)實驗指導書V2013[1]_第4頁
操作系統(tǒng)實驗指導書V2013[1]_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實驗指導書 操作系統(tǒng)課程組 編內(nèi)蒙古工業(yè)大學信息工程學院計算機系二一三年九月目 錄操作系統(tǒng)實驗教學大綱1實驗一 進程管理1實驗二 SPOOLing技術實現(xiàn)12I操作系統(tǒng)實驗教學大綱一、基本信息課程編碼020213008課程學時56課程類別學科基礎課程實驗總學時10開出學期5開出單位計算機系適用專業(yè)計算機科學與技術、軟件工程二、實驗安排序號實 驗 項 目實驗學時每組人數(shù)實驗類型開出要求1實驗一 進程管理41驗證必做實驗二 SPOOLing技術實現(xiàn)61設計必做三、實驗目的、內(nèi)容與要求實驗一 進程管理(一)實驗目的1加深對進程概念的理解,明確進程和程序的區(qū)別;2進一步認識并發(fā)執(zhí)行的實質;3分

2、析進程爭用資源的現(xiàn)象,學習解決進程互斥的方法;4了解Linux系統(tǒng)中進程通信的基本原理。(二)實驗內(nèi)容1進程的創(chuàng)建;2進程的控制;3進程的軟中斷通信;4進程的管道通信。(三)實驗要求1掌握Linux系統(tǒng)中進程的創(chuàng)建、控制和通信的實現(xiàn);2根據(jù)實驗內(nèi)容,在Linux平臺上用C語言編程實現(xiàn),上機調(diào)試運行得出實驗結果;3寫出預習報告和實驗報告。實驗二 SPOOLing技術實現(xiàn)(一)實驗目的1加深對SPOOLing系統(tǒng)的理解;2進一步認識SPOOLing技術的實質;3分析、設計SPOOLing系統(tǒng)的實現(xiàn)方法;4了解Linux系統(tǒng)中SPOOLing的基本原理。(二)實驗內(nèi)容設計并運行一個簡單的SPOOLi

3、ng系統(tǒng)來模擬實際的SPOOLing輸入/輸出過程,以掌握這種以空間換時間的技術。要求將SPOOLing輸入/輸出處理程序編成一個獨立的進程模塊并與其他請求輸入/輸出的進程并發(fā)運行。SPOOLing進程負責把從輸入設備輸入的信息送到外存輸入井中,或把外存輸出井中的信息送到打印機等輸出設備上輸出。其余進程只要求編寫輸入/輸出部分的程序。要求定義實施算法的相關數(shù)據(jù)結構,實現(xiàn)設備分配和SPOOLing算法。(三)實驗要求1掌握SPOOLing技術的實現(xiàn);2根據(jù)實驗內(nèi)容,在Linux平臺上用C語言編程實現(xiàn),上機調(diào)試運行得出實驗結果;3寫出預習報告和實驗報告。四、考核方式實驗成績占課程總成績的比重為10

4、%。考核方式根據(jù)實驗課考勤、課前預習情況、課上實驗能力、原型系統(tǒng)效果驗收與實驗報告的完成情況綜合評分。每個實驗考核:實驗預習占30%,實驗能力和效果占30%,實驗報告占40%。五、建議教材與教學參考書1課程教材1 張堯學. 計算機操作系統(tǒng)教程. 第三版. 北京:清華大學出版社. 20062 趙俊生操作系統(tǒng)實驗指導書自編20082教學參考書1 湯小丹計算機操作系統(tǒng)第三版西安: 西安電子科技大學出版社2008 2 徐虹. 操作系統(tǒng)實驗指導. 北京: 清華大學出版社20043 屠祁. 操作系統(tǒng)基礎第三版北京: 清華大學出版社20004 馮耀霖. 操作系統(tǒng). 西安: 西安電子科技大學出版社20015

5、左萬歷計算機操作系統(tǒng)教程第二版北京:高等教育出版社2004六、編制說明編制者:系統(tǒng)軟件課程組 組長:壽永熙執(zhí)筆人:趙俊生 編制時間:2009年3月15實驗一 進程管理一、 實驗目的1學會在Linux中利用系統(tǒng)調(diào)用fork()創(chuàng)建進程。2加深對進程概念的理解,明確進程和程序的區(qū)別。3進一步認識在系統(tǒng)內(nèi)進程并發(fā)執(zhí)行的實質。4分析進程競爭資源的現(xiàn)象,學習解決進程互斥的方法。5掌握Linux中進程通信的基本原理。二、 實驗類型驗證性實驗。三、 實驗預備知識 1閱讀Linux的sched.h源碼文件,加深對進程管理概念的理解。 2閱讀Linux的fork.c源碼文件,分析進程的創(chuàng)建過程。四、 實驗內(nèi)容

6、1進程的創(chuàng)建 【任務】 編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程,當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符;父進程顯示字符“a”,子進程分別顯示字符“b”和“c”。試觀察記錄屏幕上的顯示結果,并分析原因?!境绦颉縤nclude <stdio.h>main() int p1,p2; while(p1=fork()= =-1); /*創(chuàng)建子進程p1,失敗時循環(huán)*/ if(p1= =0) /*子進程p1創(chuàng)建成功*/ putchar(b); else /*父進程返回*/ while(p2=fork()= =-1); /*創(chuàng)建另一個子

7、進程p2,失敗時循環(huán)*/ if(p2= =0) /*子進程p2創(chuàng)建成功*/ putchar(c); else putchar(a); /*父進程執(zhí)行*/ 【執(zhí)行結果】 同學自己得到實驗結果。 【分析原因】 同學自己分析多次執(zhí)行產(chǎn)生不同實驗結果的原因。2進程的控制【任務】修改已編寫的程序,將每個進程的輸出由單個字符改為一句話,再觀察程序執(zhí)行時屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。如果在程序中使用系統(tǒng)調(diào)用lockf()來給每個進程加鎖,可以實現(xiàn)進程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)象?!境绦?】include <stdio.h>main() int p1,p2,i; while(p1=fork(

8、)= =-1); if(p1= =0) for(i=0;i<50;i+) printf(“child %dn”,i); else while(p2=fork()= =-1) if(p2= =0) for(i=0;i<50;i+) printf(“son %dn”,i); else for(i=0;i<50;i+) printf(“daughter %dn”,i); 【執(zhí)行結果】 同學自己得到實驗結果。 【分析原因】同學自己分析多次執(zhí)行產(chǎn)生不同實驗結果的原因?!境绦?】include <stdio.h>include <unistd.h>main() i

9、nt p1,p2,i; while(p1=fork()= =-1); if(p1= =0) lockf(1,1,0); /*加鎖*/ for(i=0;i<50;i+) printf(“child %dn”,i); lockf(1,0,0); /*解鎖*/ else while(p2=fork()= =-1) if(p2= =0) lockf(1,1,0); for(i=0;i<50;i+) printf(“son %dn”,i); lockf(1,0,0); else lockf(1,1,0); for(i=0;i<50;i+) printf(“daughter %dn”,i

10、); lockf(1,0,0); 【執(zhí)行結果】 同學自己得到實驗結果。 【分析原因】 同學自己分析多次執(zhí)行產(chǎn)生不同實驗結果的原因。3軟中斷通信【任務1】編制一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用signal()讓父進程捕捉鍵盤上來的中斷信號(即按任意字母鍵和Enter鍵),當捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用kill()向兩個子進程發(fā)出信號,子進程捕捉到信號后,分別輸出下列信息后終止: child process 1 is killed by parent! child process 2 is killed by parent!父進程等待兩個子進程終止后,輸出以下信息

11、后終止:parent process is killed!【程序】#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <signal.h>void waiting(),stop();int wait_mark;main() int p1,p2; while(p1=fork()= =-1); /*創(chuàng)建進程p1*/ if(p1>0) while(p2=fork()= =-1); /*創(chuàng)建進程p2*/ if(p2>0) Printf(“parent run!

12、n”); Printf(“p1=%dn”,p1); Printf(“p2=%dn”,p2); wait_mark=1;getchar(); kill(p1,16); /*向p1發(fā)軟中斷信號16*/kill(p2,17); /*向p2發(fā)軟中斷信號17*/sleep(5); /*父進程睡眠5秒*/wait(0); /*等待子進程結束,同步*/wait(0); /*等待另一子進程結束,同步*/lockf(stdout,1,0); /*標準輸出加鎖*/printf(“parent process is killed!n”);lockf(stdout,0,0); /*標準輸出解鎖*/exit(0); /

13、*父進程終止*/ else printf(“p2 run!n”); wait_mark=1;signal(17,stop); /*接收父進程發(fā)來的軟中斷信號17,并轉stop*/waiting();lockf(stdout,1,0); /*標準輸出加鎖*/printf(“child process 2 is killed by parent!n”);lockf(stdout,0,0); /*標準輸出解鎖*/exit(0); /*子進程p2終止*/ else printf(“p1 run!n”); wait_mark=1;signal(16,stop); /*接收父進程發(fā)來的軟中斷信號16,并轉

14、stop*/waiting();lockf(stdout,1,0); /*標準輸出加鎖*/printf(“child process 1 is killed by parent!n”);lockf(stdout,0,0); /*標準輸出解鎖*/exit(0); /*子進程p1終止*/ void waiting() printf(“waiting begin!n”); while(wait_mark!=0); printf(“waiting end!n”); void stop() wait_mark=0; printf(“signal stop!”); 【執(zhí)行結果】 同學自己得到實驗結果。 【

15、分析原因】 同學自己分析產(chǎn)生該實驗結果的原因。 【任務2】 在上面任務1中,增加語句signal(SIGINT,SIG_IGN)和語句signal(SIGQUIT,SIG_IGN),觀察執(zhí)行結果,并分析原因。這里signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)分別為忽略“Ctrl+c”鍵信號以及忽略中斷信號。 【程序】#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <signal.h> int pid1,pid2;

16、int endflag=0,pf1=0,pf2=0; void intdelete() kill(pid1,16); kill(pid2,17); endflag=1; void int1() printf(“child process 1 is killed by parent!”); exit(0); void int2() printf(“child process 2 is killed by parent!”); exit(0); main() int exitpid; signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); while(pi

17、d1=fork()= =-1); if(pid1= =0) printf(“process 1 run!n”); signal(SIGUSR1,int1); signal(16, SIG_IGN); pause(); exit(0); else while(pid2=fork()= =-1); if(pid2= =0) printf(“process 2 run!n”); signal(SIGUSR2,int2); signal(17, SIG_IGN); pause(); exit(0); else printf(“parent run!n”); signal(SIGINT,intdelet

18、e); waitpid(-1,&exitpid,0); printf(“parent process is killed!n”); exit(0); 【執(zhí)行結果】 同學自己得到實驗結果。 【分析原因】 同學自己分析產(chǎn)生該實驗結果的原因。4進程的管道通信【任務】 編制一段程序,實現(xiàn)進程的管道通信。使用系統(tǒng)調(diào)用pipe()建立一條管道線。兩個子進程p1和p2分別向管道各寫一句話: child 1 is sending a message! child 2 is sending a message! 而父進程則從管道中讀出來自于兩個子進程的信息,顯示在屏幕上。 【程序】#include &l

19、t;unistd.h>#include <stdio.h>#include <signal.h> int pid1,pid2; main() int fd3; char outpipe100,inpipe100; pipe(fd); while(pid1=fork()= =-1); if(pid1= =0) printf(“p1 run!n”); lockf(fd1,1,0); sprintf(outpipe,”child 1 process is sending a message!”); write(fd1,outpipe,50); sleep(1); loc

20、kf(fd1,0,0); exit(0); else while(pid2=fork()= =-1); if(pid2= =0) printf(“p2 run!n”); lockf(fd1,1,0); sprintf(outpipe,”child 2 process is sending a message!”); write(fd1,outpipe,50); sleep(1); lockf(fd1,0,0); exit(0); else printf(“parent run!n”); wait(0); read(fd0,inpipe,50); printf(“%sn”,inpipe); wa

21、it(0); read(fd0,inpipe,50); printf(“%sn”,inpipe); exit(0); 【執(zhí)行結果】 同學自己得到實驗結果。 【分析原因】 同學自己分析產(chǎn)生該實驗結果的原因。實驗二 SPOOLing技術實現(xiàn)一、實驗目的1加深對SPOOLing (Simultaneaus Periphernal Operating OnLine)系統(tǒng)組成與基本工作原理的理解。2使用客戶/服務器模式進行程序設計。3使用Linux進程技術,模擬SPOOLing系統(tǒng)中輸出進程的工作。4使用Linux進程通信技術,模擬SPOOLing系統(tǒng)工作進程與輸出進程的數(shù)據(jù)輸出。5使用Linux文件技

22、術,模擬SPOOLing系統(tǒng)輸出井的工作過程。二、實驗類型設計性實驗。三、實驗預備知識 1閱讀Linux進程通信技術(消息和管道)的使用方法。 2閱讀Linux文件操作技術,掌握文件的基本處理方法。四、實驗內(nèi)容 假脫機打印是SPOOLing系統(tǒng)的典型應用。本次實驗的內(nèi)容就是以客戶/服務器模式模擬假脫機打印的工作過程。工作原理見圖2-1。打印服務器輸入緩存區(qū)打印隊列輸出井客戶機1請求打印打印文件輸出緩存區(qū)數(shù)據(jù)傳輸客戶機n請求打印數(shù)據(jù)傳輸.圖2-1 模擬假脫機打印工作原理整個系統(tǒng)的工作是先啟動打印服務器,初始化客戶/服務器間的通信、準備輸入緩存區(qū)、打印隊列和輸出井。然后啟動請求打印的客戶機程序(如命令:printmn file.dat),將要打印的文件(如:file.dat)讀入客戶機系統(tǒng),包裝成客戶機和服務器之間通信的基本信息單位,放入輸出緩存區(qū),然后啟動進程間通信機制,向打印服務器發(fā)出請求。服務器通過進程間的通信機制,將客戶機傳送的數(shù)據(jù)放入輸出緩存區(qū),并向打印隊列申請

溫馨提示

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

最新文檔

評論

0/150

提交評論