版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1第四章進程管理實驗4.1實驗目的一、加深對進程概念的理解,明確進程和程序的區(qū)別
二.進一步認識并發(fā)執(zhí)行的實質
三.分析進程爭用資源的現(xiàn)象,學習解決進程互斥的方法
四.了解Linux系統(tǒng)中進程通信的基本原理
4.2準備知識
4.2.1基本概念
進程的概念
進程與程序的區(qū)別
并發(fā)執(zhí)行的概念
進程互斥的概念
進程通信的基本原理
2系統(tǒng)調用圖4-1系統(tǒng)調用的參數(shù)表方式變元表:N參數(shù)1參數(shù)2……參數(shù)n(a)直接方式trap參數(shù)1參數(shù)2……參數(shù)n××變元表:N指針(b)間接方式系統(tǒng)調用是一種進入系統(tǒng)空間的辦法。通常,在OS的核心中都設置了一組用于實現(xiàn)各種系統(tǒng)功能的子程序,并將它們提供給程序員使用。程序員在需要OS提供某種服務的時候,便可以調用一條系統(tǒng)調用命令,去實現(xiàn)希望的功能,這就是系統(tǒng)調用。因此,系統(tǒng)調用就像一個黑箱子一樣,對用戶屏蔽了操作系統(tǒng)的具體動作而只是提供了調用功能的接口。系統(tǒng)調用與一般的過程調用有下述幾方面的明顯差別:(1)運行在不同的系統(tǒng)狀態(tài)。(2)通過軟中斷進入。(3)返回問題。當調用進程仍具有最高優(yōu)先級時,才返回到調用進程繼續(xù)執(zhí)行;否則,將引起重新調度,以便讓優(yōu)先權最高的進程優(yōu)先執(zhí)行。(4)嵌套調用。系統(tǒng)調用也可以嵌套進行系統(tǒng)調用的實現(xiàn)系統(tǒng)調用的實現(xiàn)與一般過程調用的實現(xiàn)相比,兩者間有很大差異。對于系統(tǒng)調用,控制是由原來的用戶態(tài)轉換為系統(tǒng)態(tài),這是借助于中斷和陷入機制來完成的,在該機制中包括中斷和陷入硬件機構及中斷與陷入處理程序兩部分。中斷是指CPU對系統(tǒng)發(fā)生某事件時的一種響應.中斷分為外中斷和內中斷(1)所謂外中斷是指由于外部設備事件所引起的中斷.(2)內中斷則是指由于CPU內部事件所引起的中斷.
如程序出錯(地址越界)、電源故障等。內中斷(trap)被譯為“捕獲”或“陷入”。陷入是由于執(zhí)行了現(xiàn)行指令所引起的;中斷則是由于系統(tǒng)中某事件引起的,該事件與現(xiàn)行指令無關。進程創(chuàng)建與軟中斷通信fork系統(tǒng)調用:由于進程為執(zhí)行程序的環(huán)境,因此在執(zhí)行程序前必須先建立這個能"跑"程序的環(huán)境。Linux系統(tǒng)提供系統(tǒng)調用拷貝現(xiàn)行進程的內容,以產生新的進程,調用fork的進程稱為父進程;而所產生的新進程則稱為子進程。子進程會承襲父進程的一切特性,但是它有自己的數(shù)據(jù)段,也就是說,盡管子進程改變了所屬的變量,卻不會影響到父進程的變量值。
父進程和子進程共享一個程序段,但是各自擁有自己的堆棧、數(shù)據(jù)段、用戶空間以及進程控制塊。換言之,兩個進程執(zhí)行的程序代碼是一樣的,但是各有各的程序計數(shù)器與自己的私人數(shù)據(jù)。
9linux是多用戶和多進程的操作系統(tǒng),進程在操作系統(tǒng)中的創(chuàng)建,都會生成一個進程描述塊,描述當前進程的所有信息,包括,數(shù)據(jù)段、代碼段、堆棧段的地址,當前進程的環(huán)境變量,文件描述符等。
fork函數(shù)過程:操作系統(tǒng)先創(chuàng)建一個進程描述塊,然后把父進程的所有進程描述符的信息精確拷貝過來,和父進程一樣(除了進程ID不一樣外),代碼段共享,數(shù)據(jù)段和堆棧段復制,所有的寄存器的值全部精確拷貝,文件描述符也許精確拷貝。
fork的返回值,fork在父進程空間中返回子進程的PID,在子進程空間中返回0。10圖3-2父進程和子進程的內存映像用戶內存區(qū)父進程的vm_arce_structvmstartvmstartcount=2vmstartvmstartcount=2子進程的vm_arce_struct子進程數(shù)據(jù)區(qū)子進程堆棧區(qū)父進程數(shù)據(jù)區(qū)父進程堆棧區(qū)共享正文區(qū)11一.fork()函數(shù):用于創(chuàng)建一個新進程(子進程)intfork();pid=fork();if(pid<0){printf("forkerror\n");exit(0);}if(pid==0){printf("Thechildprocessisrunningnow!\n");exit(0);}if(pid>0){printf("Theparentprocessisrunningnow!\n");exit(0);}
進程創(chuàng)建與軟中斷通信信號與軟中斷信號是OS系統(tǒng)中使用的一種進程間通信方式,它提供一種處理異步事件的方法。例如:用戶可以通過一個中斷指令中斷一個程序的執(zhí)行,兩個進程間可以通過發(fā)送信號通知一個異步事件,系統(tǒng)或進程通過信號報告突發(fā)的硬件故障(如非法指令或運算溢出)。此外,系統(tǒng)還可以通過信號實現(xiàn)軟中斷,即用戶進程向自身發(fā)送信號,以調用某些系統(tǒng)功能,或轉入某些特定處理。進程創(chuàng)建與軟中斷通信“軟中斷”不同于普通中斷,它是指通過隨機向進程發(fā)送信號,通知進程完成某事件。只有執(zhí)行狀態(tài)的進程才會響應該信號,與處理普通中斷一樣,進程轉而執(zhí)行信號要求的處理。如果信號到達時,進程處于執(zhí)行狀態(tài)以外的其他狀態(tài),則信號不會被響應。進程創(chuàng)建與軟中斷通信系統(tǒng)調用signal(sig,function)是進程用來設定某個信號的處理方法;系統(tǒng)調用kill(Pid,Iid)是用來發(fā)送信號給指定進程的。這兩個調用可以形成信號的基本操作。處理信號有三種類型:進程接收到信號后退出;進程忽略該信號;進程收到信號后執(zhí)行用戶設定用系統(tǒng)調用signal的函數(shù)。信號SIGINT由按下Ctrl-C發(fā)出,信號SIGQUIT由按下Ctrl-發(fā)出。信號功能值SIGHUP掛起1SIGINT鍵盤中斷,鍵盤按Delete鍵或Break鍵2SIGQUIT鍵盤按Quit鍵3SIGILL非法指令4SIGTRAP跟蹤中斷5SIGIOTIOT指令6SIGBUS總線錯7SIGFPE浮點運算溢出8SIGKILL要求終止進程9SIGUSR1用戶定義信號#110SIGSEGV段違法11SIGUSR2用戶定義信號#212SIGPIPE向沒有讀進程的管道上寫13SIGALRM定時器告警,時間到14SIGTERMkill發(fā)出的軟件結束信號15(16,堆棧錯誤,使進程終止)SIGCHLD子進程死17SIGCONT若已停止則繼續(xù)18SIGPWR電源故障30Wait()函數(shù)Wait()函數(shù)常用來控制父進程與子進程的同步。在父進程中調用wait()函數(shù),則父進程被阻塞,進入等待隊列,等待子進程結束。當子進程結束時,會向父進程發(fā)出SIGCHLD信號。當接收到信號后,父進程從wait()函數(shù)返回繼續(xù)執(zhí)行原程序。Exit()函數(shù)是進程結束最常調用的函數(shù)。在正常終止時,exit()函數(shù)返回進程結束狀態(tài)。進程創(chuàng)建與軟中斷通信#include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types.h>intwait_flag;voidstop(){wait_flag=0;};main(){ intpid1,pid2; wait_flag=1; signal(2,stop);//orsignal(14,stop);進程創(chuàng)建與軟中斷通信while(wait_flag==1); while((pid1=fork())==-1); if(pid1>0){while((pid2=fork())==-1); if(pid2>0){wait_flag=1; sleep(5); kill(pid1,16); kill(pid2,17); wait(0); wait(0); printf("Parentprocessiskilled!!\n"); exit(0); }
else{wait_flag=1; signal(17,stop); while(wait_flag==1); printf("Childprocess2iskilledbyparent!!\n"); exit(0);
}
}
else
{wait_flag=1;
signal(16,stop);
while(wait_flag==1);printf("Childprocess1iskilledbyparent!!\n");exit(0); }}
進程創(chuàng)建與軟中斷通信
else{wait_flag=1; signal(17,stop); while(wait_flag==1); printf("Childprocess2iskilledbyparent!!\n"); exit(0);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)正式租賃合同范例本
- 礦山買賣中介合同范例
- 寫字樓買房合同范例
- 托盤廠家采購合同范例
- 廣告合同補充合同范例
- 南京日租房合同范例
- 足浴店用工合同范例
- 勘察合同范例
- 維修銷售電器合同范例
- 江蘇呼叫中心外包合同范例
- 圖文轉換-圖表(小題訓練)(解析版)-2025年部編版中考語文一輪復習
- 七上語文期末考試復習計劃表
- 2024兒童青少年抑郁治療與康復痛點調研報告 -基于患者家長群體的調研
- 大數(shù)據(jù)+治理智慧樹知到期末考試答案章節(jié)答案2024年廣州大學
- 江蘇省建筑與裝飾工程計價定額(2014)電子表格版
- 山東省煙臺市2023-2024學年高二上學期期末考試數(shù)學試卷(含答案)
- 2024年中國鐵路南寧局集團招聘筆試參考題庫含答案解析
- 國家開放大學化工節(jié)能課程-復習資料期末復習題
- GB 18613-2020 電動機能效限定值及能效等級
- 小學寫字閱讀考核實施方案
- 發(fā)現(xiàn)所授薪律師及律師助理管理辦法
評論
0/150
提交評論