實(shí)驗(yàn)3進(jìn)程通信signal軟中斷201610_第1頁(yè)
實(shí)驗(yàn)3進(jìn)程通信signal軟中斷201610_第2頁(yè)
實(shí)驗(yàn)3進(jìn)程通信signal軟中斷201610_第3頁(yè)
實(shí)驗(yàn)3進(jìn)程通信signal軟中斷201610_第4頁(yè)
實(shí)驗(yàn)3進(jìn)程通信signal軟中斷201610_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第四章 進(jìn)程管理實(shí)驗(yàn)4.1 實(shí)驗(yàn)?zāi)康?一、加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別 二進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì) 三分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法 四了解Linux系統(tǒng)中進(jìn)程通信的基本原理 4.2 準(zhǔn)備知識(shí) 4.2.1 基本概念 進(jìn)程的概念 進(jìn)程與程序的區(qū)別 并發(fā)執(zhí)行的概念 進(jìn)程互斥的概念 進(jìn)程通信的基本原理 2系統(tǒng)調(diào)用圖4-1 系統(tǒng)調(diào)用的參數(shù)表方式變?cè)恚?N 參數(shù)1 參數(shù)2 參數(shù)n (a) 直接方式 trap 參數(shù)1 參數(shù)2 參數(shù)n 變?cè)恚?N 指針 (b) 間接方式 系統(tǒng)調(diào)用是一種進(jìn)入系統(tǒng)空間的辦法。通常,在OS的核心中都設(shè)置了一組用于實(shí)現(xiàn)各種系統(tǒng)功能的子程序,并將它

2、們提供給程序員使用。程序員在需要OS提供某種服務(wù)的時(shí)候,便可以調(diào)用一條系統(tǒng)調(diào)用命令,去實(shí)現(xiàn)希望的功能,這就是系統(tǒng)調(diào)用。因此,系統(tǒng)調(diào)用就像一個(gè)黑箱子一樣,對(duì)用戶屏蔽了操作系統(tǒng)的具體動(dòng)作而只是提供了調(diào)用功能的接口。系統(tǒng)調(diào)用與一般的過(guò)程調(diào)用有下述幾方面的明顯差別:(1)運(yùn)行在不同的系統(tǒng)狀態(tài)。(2)通過(guò)軟中斷進(jìn)入。 (3)返回問(wèn)題。當(dāng)調(diào)用進(jìn)程仍具有最高優(yōu)先級(jí)時(shí),才返回到調(diào)用進(jìn)程繼續(xù)執(zhí)行;否則,將引起重新調(diào)度,以便讓優(yōu)先權(quán)最高的進(jìn)程優(yōu)先執(zhí)行。 (4)嵌套調(diào)用。系統(tǒng)調(diào)用也可以嵌套進(jìn)行 系統(tǒng)調(diào)用的實(shí)現(xiàn)系統(tǒng)調(diào)用的實(shí)現(xiàn)與一般過(guò)程調(diào)用的實(shí)現(xiàn)相比,兩者間有很大差異。對(duì)于系統(tǒng)調(diào)用,控制是由原來(lái)的用戶態(tài)轉(zhuǎn)換為系統(tǒng)態(tài),這

3、是借助于中斷和陷入機(jī)制來(lái)完成的,在該機(jī)制中包括中斷和陷入硬件機(jī)構(gòu)及中斷與陷入處理程序兩部分。 是指CPU對(duì)系統(tǒng)發(fā)生某事件時(shí)的一種響應(yīng).(1)是指由于外部設(shè)備事件所引起的中斷.(2)則是指由于CPU內(nèi)部事件所引起的中斷. 如程序出錯(cuò)(地址越界)、電源故障等。內(nèi)中斷(trap)被譯為“捕獲”或“陷入”。 是由于執(zhí)行了現(xiàn)行指令所引起的;則是由于系統(tǒng)中某事件引起的,該事件與現(xiàn)行指令無(wú)關(guān)。 進(jìn)程創(chuàng)建與軟中斷通信forkfork系統(tǒng)調(diào)用系統(tǒng)調(diào)用:由于進(jìn)程為執(zhí)行程序的環(huán)境,因此在執(zhí)行程序前必須先建立這個(gè)能跑程序的環(huán)境。Linux系統(tǒng)提供系統(tǒng)調(diào)用拷貝現(xiàn)行進(jìn)程的內(nèi)容,以產(chǎn)生新的進(jìn)程,調(diào)用fork的進(jìn)程稱為父進(jìn)程

4、;而所產(chǎn)生的新進(jìn)程則稱為子進(jìn)程。子進(jìn)程會(huì)承襲父進(jìn)程的一切特性,但是它有自己的數(shù)據(jù)段,也就是說(shuō),盡管子進(jìn)程改變了所屬的變量,卻不會(huì)影響到父進(jìn)程的變量值。 父進(jìn)程和子進(jìn)程共享一個(gè)程序段共享一個(gè)程序段,但是各自擁有自己的堆棧、數(shù)據(jù)段、用戶空間以及進(jìn)程控制塊。換言之,兩個(gè)進(jìn)程執(zhí)行的程序代碼是一樣的,但是各有各的程序計(jì)數(shù)器與自己的私人數(shù)據(jù)。 9linux 是多用戶和多進(jìn)程的操作系統(tǒng),進(jìn)程在操作系統(tǒng)中的創(chuàng)建,都會(huì)生成一個(gè)進(jìn)程描述塊,描述當(dāng)前進(jìn)程的所有信息,包括,數(shù)據(jù)段、代碼段、堆棧段的地址,當(dāng)前進(jìn)程的環(huán)境變量,文件描述符等。fork函數(shù)過(guò)程:操作系統(tǒng)先創(chuàng)建一個(gè)進(jìn)程描述塊,然后把父進(jìn)程的所有進(jìn)程描述符的信息

5、精確拷貝過(guò)來(lái),和父進(jìn)程一樣(除了進(jìn)程ID不一樣外),代碼段共享,數(shù)據(jù)段和堆棧段復(fù)制,所有的寄存器的值全部精確拷貝,文件描述符也許精確拷貝。forkfork的返回值的返回值,fork在父進(jìn)程父進(jìn)程空間中返回子進(jìn)程的PIDPID,在子進(jìn)程子進(jìn)程空間中返回0 0。10圖3-2 父進(jìn)程和子進(jìn)程的內(nèi)存映像用戶內(nèi)存區(qū) 父進(jìn)程的vm_arce_struct vm start vm start count = 2 vm start vm start count = 2 子進(jìn)程的vm_arce_struct 子進(jìn)程數(shù)據(jù)區(qū) 子進(jìn)程堆棧區(qū) 父進(jìn)程數(shù)據(jù)區(qū) 父進(jìn)程堆棧區(qū) 共享正文區(qū) 11一fork()函數(shù):用于創(chuàng)建一個(gè)

6、新進(jìn)程(子進(jìn)程)int fork(); pid = fork(); if(pid 0) printf(The parent process is running now!n); exit(0); 進(jìn)程創(chuàng)建與軟中斷通信信號(hào)與軟中斷信號(hào)是OS系統(tǒng)中使用的一種進(jìn)程間通信方式,它提供一種處理異步事件的方法。例如:用戶可以通過(guò)一個(gè)中斷指令中斷一個(gè)程序的執(zhí)行,兩個(gè)進(jìn)程間可以通過(guò)發(fā)送信號(hào)通知一個(gè)異步事件,系統(tǒng)或進(jìn)程通過(guò)信號(hào)報(bào)告突發(fā)的硬件故障(如非法指令或運(yùn)算溢出)。此外,系統(tǒng)還可以通過(guò)信號(hào)實(shí)現(xiàn)軟中斷,即用戶進(jìn)程向自身發(fā)送信號(hào),以調(diào)用某些系統(tǒng)功能,或轉(zhuǎn)入某些特定處理。進(jìn)程創(chuàng)建與軟中斷通信“軟中斷”不同于普通中

7、斷,它是指通過(guò)隨機(jī)向進(jìn)程發(fā)送信號(hào),通知進(jìn)程完成某事件。只有執(zhí)行狀態(tài)的進(jìn)程才會(huì)響應(yīng)該信號(hào),與處理普通中斷一樣,進(jìn)程轉(zhuǎn)而執(zhí)行信號(hào)要求的處理。如果信號(hào)到達(dá)時(shí),進(jìn)程處于執(zhí)行狀態(tài)以外的其他狀態(tài),則信號(hào)不會(huì)被響應(yīng)。進(jìn)程創(chuàng)建與軟中斷通信系統(tǒng)調(diào)用signal( sig, function)是進(jìn)程用來(lái)設(shè)定某個(gè)信號(hào)的處理方法;系統(tǒng)調(diào)用kill(Pid, Iid)是用來(lái)發(fā)送信號(hào)給指定進(jìn)程的。這 兩個(gè)調(diào)用可以形成信號(hào)的基本操作。處理信號(hào)有三種類型:進(jìn)程接收到信號(hào)后退 出;進(jìn)程忽略該信號(hào);進(jìn)程收到信號(hào)后執(zhí)行用戶設(shè)定用系統(tǒng)調(diào)用signal的函數(shù)。1.信號(hào)SIGINT由按下Ctrl-C發(fā)出,信號(hào)SIGQUIT由按下Ctrl

8、-發(fā)出。信號(hào)信號(hào)功能功能值值SIGHUPSIGHUP掛起掛起1 1SIGINTSIGINT鍵盤中斷,鍵盤按鍵盤中斷,鍵盤按DeleteDelete鍵或鍵或BreakBreak鍵鍵2 2SIGQUITSIGQUIT鍵盤按鍵盤按QuitQuit鍵鍵3 3SIGILLSIGILL非法指令非法指令4 4SIGTRAPSIGTRAP跟蹤中斷跟蹤中斷5 5SIGIOTSIGIOTIOTIOT指令指令6 6SIGBUSSIGBUS總線錯(cuò)總線錯(cuò)7 7SIGFPESIGFPE浮點(diǎn)運(yùn)算溢出浮點(diǎn)運(yùn)算溢出8 8SIGKILLSIGKILL要求終止進(jìn)程要求終止進(jìn)程9 9SIGUSR1SIGUSR1用戶定義信號(hào)用戶定義信

9、號(hào)#1#11010SIGSEGVSIGSEGV段違法段違法1111SIGUSR2SIGUSR2用戶定義信號(hào)用戶定義信號(hào)#2#21212SIGPIPESIGPIPE向沒(méi)有讀進(jìn)程的管道上寫(xiě)向沒(méi)有讀進(jìn)程的管道上寫(xiě)1313SIGALRMSIGALRM定時(shí)器告警,時(shí)間到定時(shí)器告警,時(shí)間到1414SIGTERMSIGTERMkillkill發(fā)出的軟件結(jié)束信號(hào)發(fā)出的軟件結(jié)束信號(hào)15 (16,15 (16,堆棧錯(cuò)誤,使進(jìn)程終止堆棧錯(cuò)誤,使進(jìn)程終止) )SIGCHLDSIGCHLD子進(jìn)程死子進(jìn)程死1717SIGCONTSIGCONT若已停止則繼續(xù)若已停止則繼續(xù)1818SIGPWRSIGPWR電源故障電源故障30

10、30Wait()Wait()函數(shù)函數(shù)Wait()函數(shù)常用來(lái)控制父進(jìn)程與子進(jìn)程的同步。在父進(jìn)程中調(diào)用wait()函數(shù),則父進(jìn)程被阻塞,進(jìn)入等待隊(duì)列,等待子進(jìn)程結(jié)束。當(dāng)子進(jìn)程結(jié)束時(shí),會(huì)向父進(jìn)程發(fā)出SIGCHLD信號(hào)。當(dāng)接收到信號(hào)后,父進(jìn)程從wait()函數(shù)返回繼續(xù)執(zhí)行原程序。Exit()Exit()函數(shù)函數(shù)是進(jìn)程結(jié)束最常調(diào)用的函數(shù)。在正常終止時(shí),exit()函數(shù)返回進(jìn)程結(jié)束狀態(tài)。進(jìn)程創(chuàng)建與軟中斷通信#include #include #include #include int wait_flag;void stop() wait_flag=0; wait_flag=0; ;main() int p

11、id1,pid2;wait_flag=1;signal(2,stop); /or signal(14,stop);進(jìn)程創(chuàng)建與軟中斷通信 while(wait_flag=1); while(wait_flag=1);while(pid1=fork()=-1);while(pid1=fork()=-1);if(pid10) if(pid10) while(pid2=fork()=-1); while(pid2=fork()=-1); if(pid20) if(pid20) wait_flag=1; wait_flag=1; sleep(5); sleep(5); kill(pid1,16); ki

12、ll(pid1,16); kill(pid2,17); kill(pid2,17); wait(0); wait(0); wait(0); wait(0); printf( printf(ParentParent process is killed !n); process is killed !n); exit(0); exit(0); else else wait_flag=1; wait_flag=1; signal(17,stop); signal(17,stop); while(wait_flag=1); while(wait_flag=1); printf(Child printf

13、(Child process 2 process 2 is killed by parent !n);is killed by parent !n); exit(0); exit(0); else else wait_flag=1; wait_flag=1; signal(16,stop); signal(16,stop); while(wait_flag=1); while(wait_flag=1); printf(Child printf(Child process 1 process 1 is killed by parent !n);is killed by parent !n); exit(0); exit(0); 進(jìn)程創(chuàng)建與軟中斷通信else wait_flag=1; signal(17,stop); while(wait_

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論