




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、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)功能的子程序,并將它
2、們提供給程序員使用。程序員在需要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),這
3、是借助于中斷和陷入機制來完成的,在該機制中包括中斷和陷入硬件機構及中斷與陷入處理程序兩部分。 是指CPU對系統(tǒng)發(fā)生某事件時的一種響應.(1)是指由于外部設備事件所引起的中斷.(2)則是指由于CPU內部事件所引起的中斷. 如程序出錯(地址越界)、電源故障等。內中斷(trap)被譯為“捕獲”或“陷入”。 是由于執(zhí)行了現(xiàn)行指令所引起的;則是由于系統(tǒng)中某事件引起的,該事件與現(xiàn)行指令無關。 進程創(chuàng)建與軟中斷通信forkfork系統(tǒng)調用系統(tǒng)調用:由于進程為執(zhí)行程序的環(huán)境,因此在執(zhí)行程序前必須先建立這個能跑程序的環(huán)境。Linux系統(tǒng)提供系統(tǒng)調用拷貝現(xiàn)行進程的內容,以產生新的進程,調用fork的進程稱為父進程
4、;而所產生的新進程則稱為子進程。子進程會承襲父進程的一切特性,但是它有自己的數(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)建一個進程描述塊,然后把父進程的所有進程描述符的信息
5、精確拷貝過來,和父進程一樣(除了進程ID不一樣外),代碼段共享,數(shù)據(jù)段和堆棧段復制,所有的寄存器的值全部精確拷貝,文件描述符也許精確拷貝。forkfork的返回值的返回值,fork在父進程父進程空間中返回子進程的PIDPID,在子進程子進程空間中返回0 0。10圖3-2 父進程和子進程的內存映像用戶內存區(qū) 父進程的vm_arce_struct vm start vm start count = 2 vm start vm start count = 2 子進程的vm_arce_struct 子進程數(shù)據(jù)區(qū) 子進程堆棧區(qū) 父進程數(shù)據(jù)區(qū) 父進程堆棧區(qū) 共享正文區(qū) 11一fork()函數(shù):用于創(chuàng)建一個
6、新進程(子進程)int fork(); pid = fork(); if(pid 0) printf(The parent process is running now!n); exit(0); 進程創(chuàng)建與軟中斷通信信號與軟中斷信號是OS系統(tǒng)中使用的一種進程間通信方式,它提供一種處理異步事件的方法。例如:用戶可以通過一個中斷指令中斷一個程序的執(zhí)行,兩個進程間可以通過發(fā)送信號通知一個異步事件,系統(tǒng)或進程通過信號報告突發(fā)的硬件故障(如非法指令或運算溢出)。此外,系統(tǒng)還可以通過信號實現(xiàn)軟中斷,即用戶進程向自身發(fā)送信號,以調用某些系統(tǒng)功能,或轉入某些特定處理。進程創(chuàng)建與軟中斷通信“軟中斷”不同于普通中
7、斷,它是指通過隨機向進程發(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ù)。1.信號SIGINT由按下Ctrl-C發(fā)出,信號SIGQUIT由按下Ctrl
8、-發(fā)出。信號信號功能功能值值SIGHUPSIGHUP掛起掛起1 1SIGINTSIGINT鍵盤中斷,鍵盤按鍵盤中斷,鍵盤按DeleteDelete鍵或鍵或BreakBreak鍵鍵2 2SIGQUITSIGQUIT鍵盤按鍵盤按QuitQuit鍵鍵3 3SIGILLSIGILL非法指令非法指令4 4SIGTRAPSIGTRAP跟蹤中斷跟蹤中斷5 5SIGIOTSIGIOTIOTIOT指令指令6 6SIGBUSSIGBUS總線錯總線錯7 7SIGFPESIGFPE浮點運算溢出浮點運算溢出8 8SIGKILLSIGKILL要求終止進程要求終止進程9 9SIGUSR1SIGUSR1用戶定義信號用戶定義信
9、號#1#11010SIGSEGVSIGSEGV段違法段違法1111SIGUSR2SIGUSR2用戶定義信號用戶定義信號#2#21212SIGPIPESIGPIPE向沒有讀進程的管道上寫向沒有讀進程的管道上寫1313SIGALRMSIGALRM定時器告警,時間到定時器告警,時間到1414SIGTERMSIGTERMkillkill發(fā)出的軟件結束信號發(fā)出的軟件結束信號15 (16,15 (16,堆棧錯誤,使進程終止堆棧錯誤,使進程終止) )SIGCHLDSIGCHLD子進程死子進程死1717SIGCONTSIGCONT若已停止則繼續(xù)若已停止則繼續(xù)1818SIGPWRSIGPWR電源故障電源故障30
10、30Wait()Wait()函數(shù)函數(shù)Wait()函數(shù)常用來控制父進程與子進程的同步。在父進程中調用wait()函數(shù),則父進程被阻塞,進入等待隊列,等待子進程結束。當子進程結束時,會向父進程發(fā)出SIGCHLD信號。當接收到信號后,父進程從wait()函數(shù)返回繼續(xù)執(zhí)行原程序。Exit()Exit()函數(shù)函數(shù)是進程結束最常調用的函數(shù)。在正常終止時,exit()函數(shù)返回進程結束狀態(tài)。進程創(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);進程創(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); 進程創(chuàng)建與軟中斷通信else wait_flag=1; signal(17,stop); while(wait_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級英語上冊 Unit 3 Is this your pencil第3課時教學設計(新版)人教新目標版
- 防災減災日地震安全培訓
- 三年級上美術教學設計-天外來客-蘇少版
- 對客服務用語規(guī)范性培訓
- 二年級語文下冊 第六單元 17 要是你在野外迷了路教學設計 新人教版
- 2024中國鋁業(yè)集團有限公司華東區(qū)域法律中心法律顧問招聘1人筆試參考題庫附帶答案詳解
- 人教部編版六年級下冊第二單元單元綜合與測試表格教案及反思
- 九年級化學下冊 第8單元 金屬和金屬材料 實驗活動4 金屬的物理性質和某些化學性質教學設計 (新版)新人教版
- 九年級道德與法治上冊 第3單元 推進政治文明 第6課 建設法治中國 第2框 弘揚法治精神教學設計 北師大版
- 七年級地理下冊 第七章 第三節(jié) 印度教學設計 新人教版
- 2025銀行協(xié)議存款合同
- 2023年高考英語試卷(新課標Ⅰ卷)含答案解析
- DB51T 2679-2020 鋼軌被動式高速打磨技術規(guī)范
- DB32T 4878-2024居住區(qū)供配電設施建設標準
- 微專題含膜電池-2024高考化學一輪考點擊破
- 《航?;A知識》課件
- 慢性高血壓并發(fā)子癇前期病因介紹
- 存款保險知識培訓
- 2025年中國汽車車燈行業(yè)市場現(xiàn)狀、前景分析研究報告(智研咨詢發(fā)布)
- 2024年湖北省中考語文真題(學生版+解析版)
- 電力公司電力設備運行維護管理手冊
評論
0/150
提交評論