版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、* 實踐教學(xué)實踐教學(xué)*蘭州理工大學(xué)蘭州理工大學(xué)計算機與通信學(xué)院2007 年秋季學(xué)期操作系統(tǒng)原理操作系統(tǒng)原理課程設(shè)計課程設(shè)計題 目: 信號機制實現(xiàn) 專業(yè)班級: 計通基地班 姓 名: 學(xué) 號: 指導(dǎo)教師: 成 績: _ 目目 錄錄摘摘 要要.3正正 文文.61. 設(shè)計思想.62. 算法用到的主要數(shù)據(jù)結(jié)構(gòu).83. 相關(guān)的各模塊的偽碼算法.94. 調(diào)試分析和測試結(jié)果.105. 源程序.11總總 結(jié)結(jié).14參考文獻參考文獻.15致致 謝謝.153摘摘 要要操作系統(tǒng)被建立在用戶和系統(tǒng)硬件之間,接受用戶命令,從而組織硬件完成相應(yīng)功能,以滿足用戶要求。進程是操作系統(tǒng)上程序的執(zhí)行過程。程序通過進程得以執(zhí)行。然而
2、,程序并不是孤立的,復(fù)雜的問題,可以使用不同程序去解決,即不同的進程去協(xié)作完成。由此產(chǎn)生了進程通信的概念。信號機制作為進程通信的一個基本方法,在進程通信中占有重要地位。雖然其機制有些陳舊,但在操作系統(tǒng)中仍然起著不可替代的作用,又被稱為軟中斷. 在本程序中,父進程創(chuàng)建兩個子進程,再用 kill()向兩個子進發(fā)出中斷信號,子進程 P1 和 P2 接到信號后,用 exit(0)函數(shù)正常終止自我進程(向父進程發(fā)SIGINT 信號) 。父進程的 wait()函數(shù)收到子進程的 SIGINT 信號后,對子進程作適當(dāng)處理后(資源回收)后返回本進程。因為父進程有兩個子進程,所以需要兩個 wait()函數(shù)來等待子
3、進程的結(jié)束。 關(guān)關(guān) 鍵鍵 字字信號,軟中斷,父進程,子進程,stop(),waiting(),fork(),signal(),exit()4前前 言言1.1.信號的基本概念信號的基本概念 每個信號都對應(yīng)一個正整數(shù)常量(稱為 signal number,即信號編號。定義在系統(tǒng)頭文件中),代表同一用戶的諸進程之間傳送事先約定的信息的類型,用于通知某進程發(fā)生了某異常事件。每個進程在運行時都要通過信號機制來檢查是否有信號到達。若有,便中斷正在執(zhí)行的程序,轉(zhuǎn)向與該信號相對應(yīng)的處理程序,以完成對該事件的處理;處理結(jié)束后再返回到原來的斷點繼續(xù)執(zhí)行。實質(zhì)上,信號機制是對中斷機制的一種模擬,故在早期的 UNIX
4、 版本中又把它稱為軟中斷。 信號與中斷的相似點:信號與中斷的相似點: (1)采用了相同的異步通信方式; (2)當(dāng)檢測出有信號或中斷請求時,都暫停正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序; (3)都在處理完畢后返回到原來的斷點;(4)對信號或中斷都可進行屏蔽。信號與中斷的區(qū)別:信號與中斷的區(qū)別: (1)中斷有優(yōu)先級,而信號沒有優(yōu)先級,所有的信號都是平等的; (2)信號處理程序是在用戶態(tài)下運行的,而中斷處理程序是在核心態(tài)下運行;(3)中斷響應(yīng)是及時的,而信號響應(yīng)通常都有較大的時間延遲。 信號機制具有以下三方面的功能:信號機制具有以下三方面的功能: (1)發(fā)送信號的程序用系統(tǒng)調(diào)用 kill( )實現(xiàn);
5、 (2)接收信號的程序用 signal( )來實現(xiàn)對處理方式的預(yù)置; (3)收受信號的進程按事先的規(guī)定完成對相應(yīng)事件的處理。 2 2信號的發(fā)送信號的發(fā)送 信號的發(fā)送,是指由發(fā)送進程把信號送到指定進程的信號域的某一位上。如果目標進程正在一個可被中斷的優(yōu)先級上睡眠,核心便將它喚醒,發(fā)送進程就此結(jié)束。一個進程可能在其信號域中有多個位被置位,代表有多種類型的信號到達,但對于一類信號,進程卻只能記住其中的某一個。進程用 kill( )向一個進程或5一組進程發(fā)送一個信號。在本程序中,使用 16 SIGUSR1 用戶自定義信號 1 和 17 SIGUSR2 用戶自定義信號 2 分別向子進程 1、2 發(fā)送信號
6、。即 kill(p1,16)和kill(p2,17) 。3 3對信號的處理對信號的處理 當(dāng)一個進程要進入或退出一個低優(yōu)先級睡眠狀態(tài)時,或一個進程即將從核心態(tài)返回用戶態(tài)時,核心都要檢查該進程是否已收到軟中斷。當(dāng)進程處于核心態(tài)時,即使收到軟中斷也不予理睬;只有當(dāng)它返回到用戶態(tài)后,才處理軟中斷信號。對軟中斷信號的處理分三種情況進行: (1)如果進程收到的軟中斷是一個已決定要忽略的信號(function=1),進程不做任何處理便立即返回; (2)進程收到軟中斷后便退出(function=0);(3)執(zhí)行用戶設(shè)置的軟中斷處理程序。6正正 文文1.1. 設(shè)計思想設(shè)計思想學(xué)生通過該題目的設(shè)計過程,可以掌握信
7、號的發(fā)送與接收的原理、軟件開發(fā)方法并提高解決實際問題的能力。使用系統(tǒng)調(diào)用 kill(),wait(),signal(),及 fork()編制一個通過信號完成進程通信,在接受信號后進程完成相應(yīng)功能的程序。 (1)為了便于操作和觀察結(jié)果 ,用一個程序作為 “引子”,先后fork()兩個子進程 , 使用信號 ”SIGINT”進行通信。 (2)程序運行產(chǎn)生父進程使用signal()捕捉信號 Ctrl+C(即C) 然后用 kill()向子進程發(fā)送 SIGINT 并使用 wait()等待子進程結(jié)束,然后打印“parent killed“并退出。 (3)fork()建立兩個子進程 ,等待其父進程發(fā)來的消息。
8、當(dāng)遇到SIGINT 信號時 ,則作為結(jié)束信號 , 子進程打印 :“child process1 killed by parent并結(jié)束退出。 涉及的系統(tǒng)調(diào)用:1. kill( )向指定進程發(fā)送信號。2. signal( ) 捕捉信號并在捕捉到相應(yīng)信號后調(diào)用函數(shù)。3.wait( ) 中斷進程執(zhí)行,等待子進程結(jié)束停止等待繼續(xù)進程的執(zhí)行。4.fork( ) 創(chuàng)建進程的系統(tǒng)調(diào)用。2.2. 算法用到的主要數(shù)據(jù)結(jié)構(gòu)(采用類算法用到的主要數(shù)據(jù)結(jié)構(gòu)(采用類 c c 語言定義)語言定義)1、kill( )系統(tǒng)調(diào)用格式int kill(pid,sig)參數(shù)定義int pid,sig; 其中,pid 是一個或一組進
9、程的標識符,參數(shù) sig 是要發(fā)送的軟中斷信號。 (1)pid0 時,核心將信號發(fā)送給進程 pid。 (2)pid=0 時,核心將信號發(fā)送給與發(fā)送進程同組的所有進程。7 (3)pid=-1 時,核心將信號像廣播般傳送給系統(tǒng)內(nèi)所有進程。2、signal( )預(yù)置對信號的處理方式,允許調(diào)用進程控制軟中斷信號。系統(tǒng)調(diào)用格式signal(sig,function)頭文件為#include 參數(shù)定義signal(sig,function)int sig;void (*function) ( )函數(shù)說明:signal()會依參數(shù) sig 指定的信號編號來設(shè)置該信號的處理函數(shù)。當(dāng)指定信號到達時就會跳轉(zhuǎn)到參數(shù)
10、 function 指定的函數(shù)執(zhí)行。如果參數(shù)function 不是函數(shù)指針,則必須是下列兩個常數(shù)之一:SIG_IGN 忽略參數(shù) sig 指定的信號SIG_DFL 將參數(shù) sig 指定的信號重設(shè)為核心預(yù)設(shè)的信號處理方式。其中 sig 用于指定信號的類型,sig 為 0 則表示沒有收到任何信號, 其中SIGINT(值是 02)表示中斷,當(dāng)用戶從鍵盤按c 鍵或break 鍵時,則會產(chǎn)生此信號。function:該進程中的一個函數(shù)地址,在核心返回用戶態(tài)時,它以軟中斷信號的序號作為參數(shù)調(diào)用該函數(shù),對除了信號 SIGKILL,SIGTRAP 和 SIGPWR 以外的信號,核心自動地重新設(shè)置軟中斷信號處理程
11、序的值為 SIG_DFL,一個進程不能捕獲 SIGKILL 信號。function 的解釋如下:(1)function=1 時,進程對 sig 類信號不予理睬,亦即屏蔽了該類信號;(2)function=0 時,缺省值,進程在收到 sig 信號后應(yīng)終止自己;(3)function 為非 0,非 1 類整數(shù)時,function 的值即作為信號處理程序的指針。3、wait( ) 等待子進程運行結(jié)束。如果子進程沒有完成,父進程一直等待。wait( )將調(diào)用進程掛起,直至其子進程因暫停或終止而發(fā)來軟中斷信號為止。如果在wait( )前已有子進程暫停或終止,則調(diào)用進程做適當(dāng)處理后便返回。系統(tǒng)調(diào)用格式:i
12、nt wait(status)int *status; 其中,status 是用戶空間的地址。它的低 8 位反應(yīng)子進程狀態(tài),為 0 表8示子進程正常結(jié)束,非 0 則表示出現(xiàn)了各種各樣的問題;高 8 位則帶回了 exit( )的返回值。exit( )返回值由系統(tǒng)給出。核心對 wait( )作以下處理:(1)首先查找調(diào)用進程是否有子進程,若無,則返回出錯碼;(2)若找到一處于“僵死狀態(tài)”的子進程,則將子進程的執(zhí)行時間加到父進程的執(zhí)行時間上,并釋放子進程的進程表項;(3)若未找到處于“僵死狀態(tài)”的子進程,則調(diào)用進程便在可被中斷的優(yōu)先級上睡眠,等待其子進程發(fā)來軟中斷信號時被喚醒。4、exit( )終止
13、進程的執(zhí)行。系統(tǒng)調(diào)用格式: void exit(status) int status; 其中,status 是返回給父進程的一個整數(shù),以備查考。為了及時回收進程所占用的資源并減少父進程的干預(yù),UNIX/LINUX 利用 exit( )來實現(xiàn)進程的自我終止,通常父進程在創(chuàng)建子進程時,應(yīng)在進程的末尾安排一條 exit( ),使子進程自我終止。exit(0)表示進程正常終止,exit(1)表示進程運行有錯,異常終止。 如果調(diào)用進程在執(zhí)行 exit( )時,其父進程正在等待它的終止,則父進程可立即得到其返回的整數(shù)。核心須為 exit( )完成以下操作:(1)關(guān)閉軟中斷(2)回收資源(3)寫記帳信息(4
14、)置進程為“僵死狀態(tài)”5、lockf( )用作鎖定文件的某些段或整個文件。系統(tǒng)調(diào)用格式: int lockf(feles,function,size) int files,function; long size;其中,files 是文件描述符;function 是鎖定和解鎖,1 表示鎖定,0 表示解鎖;size 是鎖定和解鎖的字節(jié)數(shù),若用 0,表示從文件的當(dāng)前位置到文件尾。6、fork()函數(shù)用于創(chuàng)建一個新進程(子進程) 。其調(diào)用格式為: Int fork( );其中返回 int 取值意義如下:正確返回:等于 0,創(chuàng)建子進程,從子進程返回 ID 值。9錯誤返回:等于-1,創(chuàng)建失敗。3.3. 相
15、關(guān)的各模塊的偽碼算法相關(guān)的各模塊的偽碼算法1)創(chuàng)建子進程 1 和 2 并它們接受軟中斷信號main()int p1,p2;if(p1=fork() /*創(chuàng)建子進程 p1*/if(p2=fork() /*創(chuàng)建子進程 p2*/wait_mark=1;signal(SIGINT,stop); /*接收到c 信號,轉(zhuǎn) stop*/waiting();kill(p1,02); /*向 p1 發(fā)軟中斷信號 02*/ kill(p2,02); /*向 p2 發(fā)軟中斷信號 02*/ wait(0); /*等待子進程 1 結(jié)束的信號*/wait(0); /*等待子進程 2 結(jié)束的信號*/printf(paren
16、t process is killed!n);exit(0); /*父進程結(jié)束*/elsewait_mark=1;signal(SIGINT,stop); /*等待進程 2 被殺死的中斷號 02*/waiting();lockf(1,0,0);printf(child process2 is killed by parent!n);lockf(1,0,0);10exit(0);elsewait_mark=1;signal(SIGINT,stop); /*等待進程 1 被殺死的中斷號 02*/waiting(); lockf(1,0,0);printf(child process1 is kil
17、led by parent!n);lockf(1,0,0);exit(0);2)定義 waiting()函數(shù) void waiting() while(wait_matk!=0);3)定義 stop()函數(shù) void stop( ) while(wait_mark=0);4.調(diào)試分析調(diào)試分析和測試結(jié)果和測試結(jié)果11父進程用系統(tǒng)調(diào)用 kill( )向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止:child process1 is killed by parent!child process2 is killed by parent! parent process is kille
18、d!5 5、源程序(帶注釋):、源程序(帶注釋):4. #include 5. #include 6. #include 7. #include 8. int waite; 9. void stop()10. 11. waite=0; 12. 13. static void waiting()14. 1215. while(waite=1); 16. 17. main()18. 19. int p1,p2; 20. while(p1=fork()=-1); /*創(chuàng)建子進程 p1*/21. if(p10)22. 23. printf(Child 1 is create !n); 24. whil
19、e(p2=fork()=-1); /*創(chuàng)建子進程 p2*/25. if(p20)26. 27. printf(Child 2 is create !n); 28. printf(Please press ctrl+Cn); 29. waite=1; 30. signal(SIGINT,stop); /*接收到c 信號轉(zhuǎn) stop*/31. waiting(); 32. kill(p1,16); /*向 p1 發(fā)軟中斷信號 16*/33. kill(p2,17); /*向 p2 發(fā)軟中斷信號 17*/34. wait(0); /*同步*/35. wait(0); /*同步*/36. printf
20、(nParent process is killed !n); 1337. exit(0); 38. 39. else40. 41. waite=1; 42. signal(SIGINT,stop); 43. waiting(); 44. printf(nChild process2 is killed by parent !n); 45. exit(0); 46. 47. 48. else49. 50. waite=1; 51. signal(SIGINT,stop); 52. waiting(); 53. printf(nChild process1 is killed by parent !n); 54. exit(0); 55. 56. 14總總 結(jié)結(jié)課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.在這兩周的操作系統(tǒng)課程設(shè)計中, 我感受很深,使我明白只有徹底掌握知識才能把理論和知識牢固結(jié)合起來。由于以前沒有接觸過 UNIX/LINUX,也不知道如何使用 vi 編輯器,所以在調(diào)程序的時候翻閱了大量的資料。雖然很辛苦,但是可以學(xué)到很多很多的東西,同時不僅可以鞏固以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計我懂得了理論與實際相結(jié)合
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信用分析師崗前規(guī)章制度考核試卷含答案
- 科研助理安全檢查能力考核試卷含答案
- 釬焊工持續(xù)改進考核試卷含答案
- 耐火材料成型操作工安全應(yīng)急能力考核試卷含答案
- 肉品分級員班組評比模擬考核試卷含答案
- 絕緣成型件制造工安全素養(yǎng)模擬考核試卷含答案
- 紡織染色機操作工安全知識競賽測試考核試卷含答案
- 鉆孔機司機標準化考核試卷含答案
- 水聲換能器制造工安全管理水平考核試卷含答案
- 水工監(jiān)測工保密意識強化考核試卷含答案
- 種植業(yè)合作社賬務(wù)處理
- 【麗江玉龍旅游薪酬制度的創(chuàng)新研究6100字】
- 公司兩權(quán)分離管理制度
- 車輛叉車日常檢查記錄表
- 廣東高校畢業(yè)生“三支一扶”計劃招募考試真題2024
- 膠帶機硫化工藝.課件
- 種雞免疫工作總結(jié)
- 河南省商丘市柘城縣2024-2025學(xué)年八年級上學(xué)期期末數(shù)學(xué)試題(含答案)
- 河南省信陽市2024-2025學(xué)年高二上學(xué)期1月期末英語試題(含答案無聽力原文及音頻)
- 給女朋友申請書
- 八下《桃花源記》《小石潭記》全文背誦(原文+譯文)
評論
0/150
提交評論