2022年2022年實(shí)驗(yàn)二進(jìn)程管理_第1頁
2022年2022年實(shí)驗(yàn)二進(jìn)程管理_第2頁
2022年2022年實(shí)驗(yàn)二進(jìn)程管理_第3頁
2022年2022年實(shí)驗(yàn)二進(jìn)程管理_第4頁
2022年2022年實(shí)驗(yàn)二進(jìn)程管理_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選學(xué)習(xí)資料 - - - 歡迎下載試驗(yàn)二進(jìn)程治理(一)試驗(yàn)?zāi)康幕蛟囼?yàn)原理1加深對(duì)進(jìn)程概念的懂得,明確進(jìn)程和程序的區(qū)分;2進(jìn)一步熟悉并發(fā)執(zhí)行的實(shí)質(zhì);3分析進(jìn)程競(jìng)爭(zhēng)資源現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法;4明白 linux 系統(tǒng)中進(jìn)程通信的基本原理;(二)試驗(yàn)內(nèi)容1進(jìn)程的創(chuàng)建;2進(jìn)程的掌握;3編寫一段程序,使其現(xiàn)實(shí)進(jìn)程的軟中斷通信;要求:使用系統(tǒng)調(diào)用fork創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal讓父進(jìn)程捕獲鍵盤上來的中斷信號(hào)(即按del鍵);當(dāng)捕獲到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕獲到信號(hào)后分別輸出以下信息后終止:child processll is killed b

2、y parent. child processl2 is killed by parent.父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止parent process is killed.在上面的程序中增加語句signal signal、 sig-ign和signal sigquit、 sig-ign、觀看執(zhí)行結(jié)果,并分析緣由;4進(jìn)程的管道通信;編制一段程序,實(shí)現(xiàn)進(jìn)程的治理通信;使用系統(tǒng)調(diào)用pipe建立一條管道線;兩個(gè)子進(jìn)程p1 和p2 分別向管道中寫一句話: child 1 is sending a message.child 2 is sending a message.而父進(jìn)程就從管道

3、中讀出來自于兩個(gè)子進(jìn)程的信息,顯示在屏幕上;要求父進(jìn)程先接收子進(jìn)程p1 發(fā)來的消息,然后再接收子進(jìn)程p2 發(fā)來的消息;試驗(yàn) 2指導(dǎo) 試驗(yàn)內(nèi)容 1進(jìn)程的創(chuàng)建任務(wù)編寫一段程序,使用系統(tǒng)調(diào)用fork 創(chuàng)建兩個(gè)子進(jìn)程;當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng);讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符;父進(jìn)程顯示字符 “a”,子進(jìn)程分別顯示字符“b”和“ c”;試觀看記錄屏幕上的顯示結(jié)果,并分析緣由;程序#include<stdio.h> mainint p1、p2;ifp1=fork/* 子進(jìn)程創(chuàng)建勝利*/ putchar'b'精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎

4、下載elseifp2=fork/* 子進(jìn)程創(chuàng)建勝利*/ putchar'c'else putchar'a'/* 父進(jìn)程執(zhí)行 */精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載<運(yùn)行結(jié)果 >bca 有時(shí)會(huì)顯現(xiàn)abc 的任意的排列分析:從進(jìn)程執(zhí)行并發(fā)來看,輸出abc 的排列都為有可能的;緣由:fork創(chuàng)建進(jìn)程所需的時(shí)間雖然可能多于輸出一個(gè)字符的時(shí)間,但各個(gè)進(jìn)程的時(shí)間片的獲得卻不為肯定為次序的,所以輸出abc 的排列都為有可能的;2進(jìn)程的掌握<任務(wù) >修改已編寫好的程序, 將每個(gè)程序的輸出由單個(gè)字符改為一句話, 再觀看程序執(zhí)行時(shí)屏幕上顯現(xiàn)的現(xiàn)象

5、,并分析其緣由;假如在程序中使用系統(tǒng)調(diào)用 lockf 來給每個(gè)程序加鎖,可以實(shí)現(xiàn)進(jìn)程之間的互斥,觀看并分析顯現(xiàn)的現(xiàn)象;程序 1#include<stdio.h> mainint p1、p2、i; ifp1=fork精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載elsefori=0;i<500;i+printf"parent%dn"、i;wait0; /*保證在子進(jìn)程終止前,父進(jìn)程不會(huì)終止*/ exit0;ifp2=forkfori=0;i<500;i+ printf"son %dn"、i;wait0; /*保證在子進(jìn)程終止前,父進(jìn)

6、程不會(huì)終止*/exit0; /* 向父進(jìn)程信號(hào)0 且該進(jìn)程退出*/精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載elsefori=0;i<500;i+精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載printf exit0;gr“andchild %dn"、i;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載運(yùn)行結(jié)果parent. son grandchild grandchild或 grandchildson grandchild son parent分析:由于函數(shù)printf輸出的字符串之間不會(huì)被中斷,因此、 每個(gè)字符串內(nèi)部的字符次序輸出時(shí)不變;但為、由于進(jìn)程并發(fā)執(zhí)行時(shí)的調(diào)度次

7、序和父子進(jìn)程的搶占處理機(jī)問題,輸出字符串的次序和先后隨著執(zhí)行的不同而發(fā)生變化;這與打印單字符的結(jié)果相同;程序 2#include<stdio.h>#include<stdio.h>mainint p1、p2、i; ifp1=fork精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載elselockf1、1、0; fori=0;i<500;i+printf"parent %dn"、i; lockf1、0、0;wait0; /*保證在子進(jìn)程終止前,父進(jìn)程不會(huì)終止*/exit0;ifp2=forklockf1、1、0; fori=0;i<500;i

8、+printf"son %dn"、i; lockf1、0、0;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載wait0; /*保證在子進(jìn)程終止前,父進(jìn)程不會(huì)終止*/ exit0;elselockf1、1、0;fori=0;i<500;i+ printf"daughter %dn"、i;lockf1、0、0; exit0;<運(yùn)行結(jié)果輸出 parent塊、son塊、grandchild塊的次序可能不同,但為每個(gè)塊的輸出過程不會(huì)被打斷;分析:由于上述程序執(zhí)行時(shí),lockf1、1、0 鎖定標(biāo)準(zhǔn)輸出設(shè)備,lockf1、0、0 解鎖標(biāo)準(zhǔn)輸出設(shè)備,在 lo

9、ckf1、1、0 與 lockf1、0、0 中間的 for 循環(huán)輸出不會(huì)被中斷,加鎖與不加鎖成效不相同;3軟中斷通信任務(wù) 1編制一段程序,使用系統(tǒng)調(diào)用fork創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal讓父進(jìn)程捕獲鍵盤上來的中斷信號(hào)(即按ctrl+c鍵),當(dāng)捕獲到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕獲到信號(hào)后,分別輸出以下信息后終止:child process1 is killed by parent. child process2 is killed by parent.父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出以下信息后終止:parent process is killed

10、.<程序流程圖 >精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載程序#include<stdio.h>#include<signal.h>#include<unistd.h>void waiting、stop、alarming;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載int wait_mark;mainint p1、p2;ifp1=fork/* 創(chuàng)建子進(jìn)程p1*/ifp2=fork/* 創(chuàng)建子進(jìn)程p2*/wait_mark=1;signalsigint、stop;/* 接收到 c 信號(hào),轉(zhuǎn)stop*/ signalsigalrm、alarm

11、ing;/*接受 sigalrm*/ waiting;killp1、16;/* 向 p1 發(fā)軟中斷信號(hào)16*/ killp2、17;/* 向 p2 發(fā)軟中斷信號(hào)17*/精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載elseelsewait0;/* 同步 */wait0;printf"parent process is killed.n" exit0;wait_mark=1; signal17、stop;signalsigint、sig_ign;/* 忽視c 信號(hào) */while wait_mark.=0; lockf1、1、0;printf"child proce

12、ss2is killed by parent.n"lockf1、0、0; exit0;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載wait_mark=1; signal16、stop;signalsigint、sig_ign;/* 忽視 c 信號(hào) */while wait_mark.=0 lockf1、1、0;printf"child process1 is killed by parent.n" lockf1、0、0;exit0;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載void waitingsleep5;if wait_mark.=0 killgetp

13、id、sigalrm;void alarmingwait_mark=0;void stopwait_mark=0;<運(yùn)行結(jié)果 >不做任何操作等待五秒鐘父進(jìn)程回在子進(jìn)程縣推出后退出,并打印退出的次序;或者點(diǎn)擊 ctrl+c后程序退出并打印退出的次序;任務(wù) 2在 上面的任務(wù)1中,增加 語句signalsigint、sig_ign和語句signalsigquit、sig_ign,觀看執(zhí)行結(jié)果,并分析緣由;這里,signalsigint、sig_ign和 signalsigquit、sig_ign分別為忽視鍵信號(hào)以及忽視中斷信號(hào);<程序 >#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;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載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;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載elsesignalsigint、sig_ign; signal16、int1;pause;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - -

16、 - 歡迎下載運(yùn)行結(jié)果請(qǐng)將上述程序輸入運(yùn)算機(jī)后,執(zhí)行并觀看;3進(jìn)程的管道通信任務(wù)編制一段程序,實(shí)現(xiàn)進(jìn)程的管道通信;使用系統(tǒng)調(diào)用pipe建立一條管道線;兩個(gè)子精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載進(jìn)程 p1 和 p2 分別向通道個(gè)寫一句話: child1process is sending message. child2process is sending message.而父進(jìn)程就從管道中讀出來自兩個(gè)進(jìn)程的信息,顯示在屏幕上;程序#include <unistd.h>#include <signal.h>#include <stdio.h> int

17、pid1、pid2;main int fd2;char outpipe100、inpipe100;pipefd;/* 創(chuàng)建一個(gè)管道*/while pid1=fork =-1; ifpid1=0lockffd1、1、0;sprintfoutpipe、"child 1 process is sending message."/* 把串放入數(shù)組outpipe 中 */writefd1、outpipe、50;/* 向管道寫長(zhǎng)為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;精品學(xué)習(xí)資料精選學(xué)習(xí)資料 - - - 歡迎下載elsewait0;/* 同步 */readfd0、inpipe、50;/* 從管道中讀長(zhǎng)為50

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論