




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選學習資料 - - - 歡迎下載試驗二進程治理(一)試驗目的或試驗原理1加深對進程概念的懂得,明確進程和程序的區(qū)分;2進一步熟悉并發(fā)執(zhí)行的實質;3分析進程競爭資源現(xiàn)象,學習解決進程互斥的方法;4明白 linux 系統(tǒng)中進程通信的基本原理;(二)試驗內容1進程的創(chuàng)建;2進程的掌握;3編寫一段程序,使其現(xiàn)實進程的軟中斷通信;要求:使用系統(tǒng)調用fork創(chuàng)建兩個子進程,再用系統(tǒng)調用signal讓父進程捕獲鍵盤上來的中斷信號(即按del鍵);當捕獲到中斷信號后,父進程用系統(tǒng)調用kill向兩個子進程發(fā)出信號,子進程捕獲到信號后分別輸出以下信息后終止:child processll is killed b
2、y parent. child processl2 is killed by parent.父進程等待兩個子進程終止后,輸出如下的信息后終止parent process is killed.在上面的程序中增加語句signal signal、 sig-ign和signal sigquit、 sig-ign、觀看執(zhí)行結果,并分析緣由;4進程的管道通信;編制一段程序,實現(xiàn)進程的治理通信;使用系統(tǒng)調用pipe建立一條管道線;兩個子進程p1 和p2 分別向管道中寫一句話: child 1 is sending a message.child 2 is sending a message.而父進程就從管道
3、中讀出來自于兩個子進程的信息,顯示在屏幕上;要求父進程先接收子進程p1 發(fā)來的消息,然后再接收子進程p2 發(fā)來的消息;試驗 2指導 試驗內容 1進程的創(chuàng)建任務編寫一段程序,使用系統(tǒng)調用fork 創(chuàng)建兩個子進程;當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動;讓每一個進程在屏幕上顯示一個字符;父進程顯示字符 “a”,子進程分別顯示字符“b”和“ c”;試觀看記錄屏幕上的顯示結果,并分析緣由;程序#include<stdio.h> mainint p1、p2;ifp1=fork/* 子進程創(chuàng)建勝利*/ putchar'b'精品學習資料精選學習資料 - - - 歡迎
4、下載elseifp2=fork/* 子進程創(chuàng)建勝利*/ putchar'c'else putchar'a'/* 父進程執(zhí)行 */精品學習資料精選學習資料 - - - 歡迎下載<運行結果 >bca 有時會顯現(xiàn)abc 的任意的排列分析:從進程執(zhí)行并發(fā)來看,輸出abc 的排列都為有可能的;緣由:fork創(chuàng)建進程所需的時間雖然可能多于輸出一個字符的時間,但各個進程的時間片的獲得卻不為肯定為次序的,所以輸出abc 的排列都為有可能的;2進程的掌握<任務 >修改已編寫好的程序, 將每個程序的輸出由單個字符改為一句話, 再觀看程序執(zhí)行時屏幕上顯現(xiàn)的現(xiàn)象
5、,并分析其緣由;假如在程序中使用系統(tǒng)調用 lockf 來給每個程序加鎖,可以實現(xiàn)進程之間的互斥,觀看并分析顯現(xiàn)的現(xiàn)象;程序 1#include<stdio.h> mainint p1、p2、i; ifp1=fork精品學習資料精選學習資料 - - - 歡迎下載elsefori=0;i<500;i+printf"parent%dn"、i;wait0; /*保證在子進程終止前,父進程不會終止*/ exit0;ifp2=forkfori=0;i<500;i+ printf"son %dn"、i;wait0; /*保證在子進程終止前,父進
6、程不會終止*/exit0; /* 向父進程信號0 且該進程退出*/精品學習資料精選學習資料 - - - 歡迎下載elsefori=0;i<500;i+精品學習資料精選學習資料 - - - 歡迎下載printf exit0;gr“andchild %dn"、i;精品學習資料精選學習資料 - - - 歡迎下載運行結果parent. son grandchild grandchild或 grandchildson grandchild son parent分析:由于函數(shù)printf輸出的字符串之間不會被中斷,因此、 每個字符串內部的字符次序輸出時不變;但為、由于進程并發(fā)執(zhí)行時的調度次
7、序和父子進程的搶占處理機問題,輸出字符串的次序和先后隨著執(zhí)行的不同而發(fā)生變化;這與打印單字符的結果相同;程序 2#include<stdio.h>#include<stdio.h>mainint p1、p2、i; ifp1=fork精品學習資料精選學習資料 - - - 歡迎下載elselockf1、1、0; fori=0;i<500;i+printf"parent %dn"、i; lockf1、0、0;wait0; /*保證在子進程終止前,父進程不會終止*/exit0;ifp2=forklockf1、1、0; fori=0;i<500;i
8、+printf"son %dn"、i; lockf1、0、0;精品學習資料精選學習資料 - - - 歡迎下載wait0; /*保證在子進程終止前,父進程不會終止*/ exit0;elselockf1、1、0;fori=0;i<500;i+ printf"daughter %dn"、i;lockf1、0、0; exit0;<運行結果輸出 parent塊、son塊、grandchild塊的次序可能不同,但為每個塊的輸出過程不會被打斷;分析:由于上述程序執(zhí)行時,lockf1、1、0 鎖定標準輸出設備,lockf1、0、0 解鎖標準輸出設備,在 lo
9、ckf1、1、0 與 lockf1、0、0 中間的 for 循環(huán)輸出不會被中斷,加鎖與不加鎖成效不相同;3軟中斷通信任務 1編制一段程序,使用系統(tǒng)調用fork創(chuàng)建兩個子進程,再用系統(tǒng)調用signal讓父進程捕獲鍵盤上來的中斷信號(即按ctrl+c鍵),當捕獲到中斷信號后,父進程用系統(tǒng)調用kill向兩個子進程發(fā)出信號,子進程捕獲到信號后,分別輸出以下信息后終止:child process1 is killed by parent. child process2 is killed by parent.父進程等待兩個子進程終止后,輸出以下信息后終止:parent process is killed
10、.<程序流程圖 >精品學習資料精選學習資料 - - - 歡迎下載程序#include<stdio.h>#include<signal.h>#include<unistd.h>void waiting、stop、alarming;精品學習資料精選學習資料 - - - 歡迎下載int wait_mark;mainint p1、p2;ifp1=fork/* 創(chuàng)建子進程p1*/ifp2=fork/* 創(chuàng)建子進程p2*/wait_mark=1;signalsigint、stop;/* 接收到 c 信號,轉stop*/ signalsigalrm、alarm
11、ing;/*接受 sigalrm*/ waiting;killp1、16;/* 向 p1 發(fā)軟中斷信號16*/ killp2、17;/* 向 p2 發(fā)軟中斷信號17*/精品學習資料精選學習資料 - - - 歡迎下載elseelsewait0;/* 同步 */wait0;printf"parent process is killed.n" exit0;wait_mark=1; signal17、stop;signalsigint、sig_ign;/* 忽視c 信號 */while wait_mark.=0; lockf1、1、0;printf"child proce
12、ss2is killed by parent.n"lockf1、0、0; exit0;精品學習資料精選學習資料 - - - 歡迎下載wait_mark=1; signal16、stop;signalsigint、sig_ign;/* 忽視 c 信號 */while wait_mark.=0 lockf1、1、0;printf"child process1 is killed by parent.n" lockf1、0、0;exit0;精品學習資料精選學習資料 - - - 歡迎下載void waitingsleep5;if wait_mark.=0 killgetp
13、id、sigalrm;void alarmingwait_mark=0;void stopwait_mark=0;<運行結果 >不做任何操作等待五秒鐘父進程回在子進程縣推出后退出,并打印退出的次序;或者點擊 ctrl+c后程序退出并打印退出的次序;任務 2在 上面的任務1中,增加 語句signalsigint、sig_ign和語句signalsigquit、sig_ign,觀看執(zhí)行結果,并分析緣由;這里,signalsigint、sig_ign和 signalsigquit、sig_ign分別為忽視鍵信號以及忽視中斷信號;<程序 >#include<stdio.h
14、>#include<signal.h>#include<unistd.h>int pid1、pid2; int endflag=0; int pf1=0;int pf2=0;void intdeletekillpid1、16; killpid2、17;精品學習資料精選學習資料 - - - 歡迎下載void int1printf"child process 1 is killed .by parentn" exit0;void int2printf"child process 2 is killed .by parentn"
15、exit0;mainint exitpid;ifpid1=forkifpid2=forksignalsigint、intdelete; waitpid-1、&exitpid、0; waitpid-1、&exitpid、0;printf"parent process is killedn" exit0;elsesignalsigint、sig_ign; signal17、int2;pause;精品學習資料精選學習資料 - - - 歡迎下載elsesignalsigint、sig_ign; signal16、int1;pause;精品學習資料精選學習資料 - -
16、 - 歡迎下載運行結果請將上述程序輸入運算機后,執(zhí)行并觀看;3進程的管道通信任務編制一段程序,實現(xiàn)進程的管道通信;使用系統(tǒng)調用pipe建立一條管道線;兩個子精品學習資料精選學習資料 - - - 歡迎下載進程 p1 和 p2 分別向通道個寫一句話: child1process is sending message. child2process is sending message.而父進程就從管道中讀出來自兩個進程的信息,顯示在屏幕上;程序#include <unistd.h>#include <signal.h>#include <stdio.h> int
17、pid1、pid2;main int fd2;char outpipe100、inpipe100;pipefd;/* 創(chuàng)建一個管道*/while pid1=fork =-1; ifpid1=0lockffd1、1、0;sprintfoutpipe、"child 1 process is sending message."/* 把串放入數(shù)組outpipe 中 */writefd1、outpipe、50;/* 向管道寫長為50 字節(jié)的串 */ sleep5;/* 自我堵塞5 秒*/ lockffd1、0、0;exit0;elsewhilepid2=fork =-1; ifpid2=0lockffd1、1、0;/* 互斥 */ sprintfoutpipe、"child 2 process is sending message." writefd1、outpipe、50;sleep5; lockffd1、0、0; exit0;精品學習資料精選學習資料 - - - 歡迎下載elsewait0;/* 同步 */readfd0、inpipe、50;/* 從管道中讀長為50
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度教育機構講師團隊合作協(xié)議
- 公司文員勞動協(xié)議
- 全球環(huán)境治理項目資金捐贈協(xié)議
- 中國地理讀后感
- 《數(shù)學競賽題庫設計與復習教學教案》
- 大宗商品貿(mào)易管理流程手冊
- 委托貸款借款合同
- 農(nóng)產(chǎn)品質量安全追溯手冊
- 互聯(lián)網(wǎng)軟件開發(fā)合同協(xié)議
- 綠化工程承包合同協(xié)議
- 小兒抽動癥中西醫(yī)治療
- 一年級下冊《綜合實踐活動》全冊教案【完整版】
- 人教版小學一年級英語課本上冊課件
- 電子對抗原理與技術PPT完整全套教學課件
- 烹飪美學PPT完整全套教學課件
- 人美版初中美術知識點匯總九年級全冊
- 中交第三航務工程局有限公司安全管理制度匯編(2020版)
- 公路工程崗位安全操作規(guī)程
- 中藥知識全解及分類大全
- 中醫(yī)學理論體系的基本特點(中醫(yī)基礎理論課件)
- 川74取心筒說明書
評論
0/150
提交評論