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

下載本文檔

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

文檔簡介

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

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

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

4、%??己朔绞礁鶕?jù)實驗課考勤、課前預(yù)習(xí)情況、課上實驗?zāi)芰Α⒃拖到y(tǒng)效果驗收與實驗報告的完成情況綜合評分。每個實驗考核:實驗預(yù)習(xí)占30%,實驗?zāi)芰托Ч?0%,實驗報告占40%。五、建議教材與教學(xué)參考書1課程教材1 張堯?qū)W. 計算機操作系統(tǒng)教程. 第三版. 北京:清華大學(xué)出版社. 20062 趙俊生操作系統(tǒng)實驗指導(dǎo)書自編20082教學(xué)參考書1 湯小丹計算機操作系統(tǒng)第三版西安: 西安電子科技大學(xué)出版社2008 2 徐虹. 操作系統(tǒng)實驗指導(dǎo). 北京: 清華大學(xué)出版社20043 屠祁. 操作系統(tǒng)基礎(chǔ)第三版北京: 清華大學(xué)出版社20004 馮耀霖. 操作系統(tǒng). 西安: 西安電子科技大學(xué)出版社20015

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

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

7、進(jìn)程p2,失敗時循環(huán)*/ if(p2= =0) /*子進(jìn)程p2創(chuàng)建成功*/ putchar(c); else putchar(a); /*父進(jìn)程執(zhí)行*/ 【執(zhí)行結(jié)果】 同學(xué)自己得到實驗結(jié)果。 【分析原因】 同學(xué)自己分析多次執(zhí)行產(chǎn)生不同實驗結(jié)果的原因。2進(jìn)程的控制【任務(wù)】修改已編寫的程序,將每個進(jìn)程的輸出由單個字符改為一句話,再觀察程序執(zhí)行時屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。如果在程序中使用系統(tǒng)調(diào)用lockf()來給每個進(jìn)程加鎖,可以實現(xiàn)進(jìn)程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)象。【程序1】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í)行結(jié)果】 同學(xué)自己得到實驗結(jié)果。 【分析原因】同學(xué)自己分析多次執(zhí)行產(chǎn)生不同實驗結(jié)果的原因?!境绦?】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í)行結(jié)果】 同學(xué)自己得到實驗結(jié)果。 【分析原因】 同學(xué)自己分析多次執(zhí)行產(chǎn)生不同實驗結(jié)果的原因。3軟中斷通信【任務(wù)1】編制一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進(jìn)程,再用系統(tǒng)調(diào)用signal()讓父進(jìn)程捕捉鍵盤上來的中斷信號(即按任意字母鍵和Enter鍵),當(dāng)捕捉到中斷信號后,父進(jìn)程用系統(tǒng)調(diào)用kill()向兩個子進(jìn)程發(fā)出信號,子進(jìn)程捕捉到信號后,分別輸出下列信息后終止: child process 1 is killed by parent! child process 2 is killed by parent!父進(jìn)程等待兩個子進(jìn)程終止后,輸出以下信息

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)建進(jìn)程p1*/ if(p1>0) while(p2=fork()= =-1); /*創(chuàng)建進(jìn)程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); /*父進(jìn)程睡眠5秒*/wait(0); /*等待子進(jìn)程結(jié)束,同步*/wait(0); /*等待另一子進(jìn)程結(jié)束,同步*/lockf(stdout,1,0); /*標(biāo)準(zhǔn)輸出加鎖*/printf(“parent process is killed!n”);lockf(stdout,0,0); /*標(biāo)準(zhǔn)輸出解鎖*/exit(0); /

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

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

15、分析原因】 同學(xué)自己分析產(chǎn)生該實驗結(jié)果的原因。 【任務(wù)2】 在上面任務(wù)1中,增加語句signal(SIGINT,SIG_IGN)和語句signal(SIGQUIT,SIG_IGN),觀察執(zhí)行結(jié)果,并分析原因。這里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í)行結(jié)果】 同學(xué)自己得到實驗結(jié)果。 【分析原因】 同學(xué)自己分析產(chǎn)生該實驗結(jié)果的原因。4進(jìn)程的管道通信【任務(wù)】 編制一段程序,實現(xiàn)進(jìn)程的管道通信。使用系統(tǒng)調(diào)用pipe()建立一條管道線。兩個子進(jìn)程p1和p2分別向管道各寫一句話: child 1 is sending a message! child 2 is sending a message! 而父進(jìn)程則從管道中讀出來自于兩個子進(jìn)程的信息,顯示在屏幕上。 【程序】#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í)行結(jié)果】 同學(xué)自己得到實驗結(jié)果。 【分析原因】 同學(xué)自己分析產(chǎn)生該實驗結(jié)果的原因。實驗二 SPOOLing技術(shù)實現(xiàn)一、實驗?zāi)康?加深對SPOOLing (Simultaneaus Periphernal Operating OnLine)系統(tǒng)組成與基本工作原理的理解。2使用客戶/服務(wù)器模式進(jìn)行程序設(shè)計。3使用Linux進(jìn)程技術(shù),模擬SPOOLing系統(tǒng)中輸出進(jìn)程的工作。4使用Linux進(jìn)程通信技術(shù),模擬SPOOLing系統(tǒng)工作進(jìn)程與輸出進(jìn)程的數(shù)據(jù)輸出。5使用Linux文件技

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

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論