




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 西 安 郵 電 大 學(xué) (計(jì)算機(jī)學(xué)院)課內(nèi)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱: 進(jìn)程管理 專業(yè)名稱: 計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí):計(jì)科1104 學(xué)生姓名:張冬冬(07)學(xué)號(hào)(8位): 04111112指導(dǎo)教師: 任東陜?cè)O(shè)計(jì)起止時(shí)間: 2013年11月22日一. 實(shí)驗(yàn)?zāi)康募皩?shí)驗(yàn)環(huán)境(1)加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。 (2)進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。 (3)分析進(jìn)程競爭資源現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法。 (4)了解Linux系統(tǒng)中進(jìn)程通信的基本原理。二. 實(shí)驗(yàn)內(nèi)容(1)進(jìn)程的創(chuàng)建 編寫一段源程序,使系統(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)程在
2、屏幕上顯示一個(gè)字符:父進(jìn)程顯示字符“a”;子進(jìn)程分別顯示字符“b”和字符“c”。試觀察紀(jì)錄屏幕上的顯示結(jié)果,并分析原因。 (2)進(jìn)程的控制 修改已編寫的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話,在觀察程序執(zhí)行時(shí)屏幕出現(xiàn)的現(xiàn)象,并分析原因。 如果在程序中使用調(diào)用lockf()來給每一個(gè)子進(jìn)程加鎖,可以實(shí)現(xiàn)進(jìn)程之間的互斥,觀察并分析出現(xiàn)的現(xià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)程
3、捕捉到信號(hào)后分別輸出下列信息后終止: Child Processll is Killed by 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
4、 is sending a message! Child 2 is sending a message! 而父進(jìn)程則從管道中讀出來自于兩個(gè)子進(jìn)程的信息,顯示在屏幕上。 要求父進(jìn)程先接收子進(jìn)程P1發(fā)來的消息,然后再接收子進(jìn)程P2發(fā)來的消息。三方案設(shè)計(jì)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>main()int p1,p2;if(p1=
5、fork() /*子進(jìn)程創(chuàng)建成功*/ putchar('b');else if(p2=fork() /*子進(jìn)程創(chuàng)建成功*/ putchar('c'); else putchar('a'); /*父進(jìn)程執(zhí)行*/<運(yùn)行結(jié)果>bca(有時(shí)會(huì)出現(xiàn)bac)分析:從進(jìn)程執(zhí)行并發(fā)來看,輸出bac,acb等情況都有可能。原因:fork()創(chuàng)建進(jìn)程所需的時(shí)間多于輸出一個(gè)字符的時(shí)間,因此在主進(jìn)程創(chuàng)建進(jìn)程2的同時(shí),進(jìn)程1就輸出了“b”,而進(jìn)程2和主程序的輸出次序是有隨機(jī)性的,所以會(huì)出現(xiàn)上述結(jié)果。2 進(jìn)程的控制<任務(wù)> 修改已編寫好的程序,將每個(gè)
6、程序的輸出由單個(gè)字符改為一句話,再觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。如果在程序中使用系統(tǒng)調(diào)用lockf()來給每個(gè)程序加鎖,可以實(shí)現(xiàn)進(jìn)程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)象。程序1#include<stdio.h>main()int p1,p2,i;if(p1=fork() for(i=0;i<500;i+) printf("child %dn",i);else if(p2=fork() for(i=0;i<500;i+) printf("son %dn",i); else for(i=0;i<500;i+) pri
7、ntf("daughter %dn",i);運(yùn)行結(jié)果child.sondaughterdaughter或childsonchildsondaughter分析:由于函數(shù)printf()輸出的字符串之間不會(huì)被中斷,因此,字符串內(nèi)部的字符順序輸出時(shí)不變。但是 , 由于進(jìn)程并發(fā)執(zhí)行時(shí)的調(diào)度順序和父子進(jìn)程的搶占處理機(jī)問題,輸出字符串的順序和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同。程序2#include<stdio.h>main()int p1,p2,i;if(p1=fork() lockf(1,1,0); for(i=0;i<500;i+) prin
8、tf("child %dn",i); lockf(1,1,0);else if(p2=fork() lockf(1,1,0); for(i=0;i<500;i+) printf("son %dn",i); lockf(1,1,0); else lockf(1,1,0); for(i=0;i<500;i+) printf("daughter %dn",i); lockf(1,0,0); <運(yùn)行結(jié)果大致與未上鎖的輸出結(jié)果相同,也是隨著執(zhí)行時(shí)間不同,輸出結(jié)果的順序有所不同。分析:因?yàn)樯鲜龀绦驁?zhí)行時(shí),不同進(jìn)程之間不存在共享臨
9、界資源(其中打印機(jī)的互斥性已有由操作系統(tǒng)保證)問題,所以,加鎖與不加鎖效果相同。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! 4.fork
10、( ) 創(chuàng)建一個(gè)新進(jìn)程。系統(tǒng)調(diào)用格式:pid=fork( )參數(shù)定義:int fork( )fork( )返回值意義如下:0:在子進(jìn)程中,pid變量保存的fork( )返回值為0,表示當(dāng)前進(jìn)程是子進(jìn)程。>0:在父進(jìn)程中,pid變量保存的fork( )返回值為子進(jìn)程的id值(進(jìn)程唯一標(biāo)識(shí)符)。-1:創(chuàng)建失敗。如果fork( )調(diào)用成功,它向父進(jìn)程返回子進(jìn)程的PID,并向子進(jìn)程返回0,即fork( )被調(diào)用了一次,但返回了兩次。此時(shí)OS在內(nèi)存中建立一個(gè)新進(jìn)程,所建的新進(jìn)程是調(diào)用fork( )父進(jìn)程(
11、parent process)的副本,稱為子進(jìn)程(child process)。子進(jìn)程繼承了父進(jìn)程的許多特性,并具有與父進(jìn)程完全相同的用戶級(jí)上下文。父進(jìn)程與子進(jìn)程并發(fā)執(zhí)行。核心為fork( )完成以下操作:(1)為新進(jìn)程分配一進(jìn)程表項(xiàng)和進(jìn)程標(biāo)識(shí)符進(jìn)入fork( )后,核心檢查系統(tǒng)是否有足夠的資源來建立一個(gè)新進(jìn)程。若資源不足,則fork( )系統(tǒng)調(diào)用失?。环駝t,核心為新進(jìn)程分配一進(jìn)程表項(xiàng)和唯一的進(jìn)程標(biāo)識(shí)符。(2)檢查同時(shí)運(yùn)行的進(jìn)程數(shù)目超過預(yù)先規(guī)定的最大數(shù)目時(shí),fork( )系統(tǒng)調(diào)用失敗。(3)拷貝進(jìn)程表項(xiàng)中的數(shù)據(jù)將父進(jìn)程的當(dāng)前目錄和所有已打開的數(shù)據(jù)拷貝到子進(jìn)程表項(xiàng)中,并置進(jìn)程的狀態(tài)為“創(chuàng)建”狀態(tài)
12、。(4)子進(jìn)程繼承父進(jìn)程的所有文件對(duì)父進(jìn)程當(dāng)前目錄和所有已打開的文件表項(xiàng)中的引用計(jì)數(shù)加1。(5)為子進(jìn)程創(chuàng)建進(jìn)程上、下文進(jìn)程創(chuàng)建結(jié)束,設(shè)子進(jìn)程狀態(tài)為“內(nèi)存中就緒”并返回子進(jìn)程的標(biāo)識(shí)符。(6)子進(jìn)程執(zhí)行雖然父進(jìn)程與子進(jìn)程程序完全相同,但每個(gè)進(jìn)程都有自己的程序計(jì)數(shù)器pc,然后根據(jù)pid變量保存的fork()返回值的不同,執(zhí)行了不同的分支語句。#include <stdio.h>main( )int p1,p2;while(p1=fork( )= = -1); /*創(chuàng)建子進(jìn)程p1*/if (p1
13、= =0) putchar('b'); elsewhile(p2=fork( )= = -1); /*創(chuàng)建子進(jìn)程p2*/if(p2= =0) putchar('c'); else putchar('a'); 運(yùn)行結(jié)果:bca四測試數(shù)據(jù)及運(yùn)行結(jié)果五總結(jié)1實(shí)驗(yàn)過程中遇到的問題及解決辦法;實(shí)驗(yàn)結(jié)果為c,b,a或b,c,a。父進(jìn)程a剛啟動(dòng),接著就生成子進(jìn)
14、程b,c,父進(jìn)程此時(shí)之后暫停,去生成子進(jìn)程b,c。生成完子進(jìn)程b,c之后,父進(jìn)程繼續(xù)執(zhí)行。 2不能夠同時(shí)生兩個(gè)子進(jìn)程,會(huì)發(fā)生進(jìn)程間的互斥。 進(jìn)程創(chuàng)見之后,從鍵盤上接受一個(gè)信后,然后關(guān)閉子進(jìn)程和父進(jìn)程。 4子進(jìn)程之間通過管道相互發(fā)送消息 2對(duì)設(shè)計(jì)及調(diào)試過程的心得體會(huì)。本次實(shí)驗(yàn)主要實(shí)現(xiàn)Linux操作系統(tǒng)中進(jìn)程管理的功能。了解了進(jìn)程的創(chuàng)建、執(zhí)行特定任務(wù)、終止、和同步的相關(guān)系統(tǒng)調(diào)用。理解了fork、exec、wait、exit3個(gè)系統(tǒng)調(diào)用的使用。該系統(tǒng)包括有簡單的進(jìn)程控制、同步與通訊機(jī)構(gòu),系統(tǒng)在運(yùn)行過程中能顯示各進(jìn)程的狀態(tài)及有關(guān)參數(shù)的變化情況,從而觀察諸進(jìn)程的運(yùn)行過程及系統(tǒng)的管理過程,在我的電腦能夠運(yùn)行通過,雖不能盡善盡美,但也基本能實(shí)現(xiàn)老師的要求的實(shí)驗(yàn),雖然時(shí)間有點(diǎn)短,但我也收獲不少,這次實(shí)驗(yàn),加深了我對(duì)進(jìn)程
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年南昌貨運(yùn)從業(yè)資格證考試題及答案大全
- 八個(gè)著力戰(zhàn)略部署與3341項(xiàng)目工程-酒泉
- 物流行業(yè)貨物運(yùn)輸及安全送達(dá)證明(7篇)
- ××超市促銷活動(dòng)規(guī)定
- 聯(lián)合營銷合作協(xié)議及說明
- 2025年消防安全知識(shí)實(shí)操考試題庫:實(shí)操應(yīng)用篇重點(diǎn)難點(diǎn)
- 2025年勞動(dòng)關(guān)系協(xié)調(diào)員(初級(jí))考試試卷:勞動(dòng)保障政策解讀與應(yīng)用策略技巧
- 2025年鑄造機(jī)械項(xiàng)目規(guī)劃申請(qǐng)報(bào)告
- 體育場館設(shè)施維護(hù)管理服務(wù)協(xié)議
- 歷史文化遺產(chǎn)保護(hù)研究試題庫
- 2025年全國保密教育線上培訓(xùn)考試試題庫帶答案(典型題)含答案詳解
- 甘肅蘭州2025年公開招聘農(nóng)村(村務(wù))工作者筆試題帶答案分析
- 青少年去極端化安全教育宣傳
- 大健康項(xiàng)目商業(yè)計(jì)劃書
- AI賦能與素養(yǎng)導(dǎo)向:初中英語智慧課堂的融合實(shí)踐研究
- 《2025年危險(xiǎn)化學(xué)品企業(yè)安全生產(chǎn)執(zhí)法檢查重點(diǎn)事項(xiàng)指導(dǎo)目錄》解讀與培訓(xùn)
- 2025全國交通運(yùn)輸行業(yè)職業(yè)技能競賽學(xué)生組技術(shù)方案
- 常用儀表使用方法鐵道信號(hào)綜合實(shí)訓(xùn)課件
- 2025云南黃金礦業(yè)集團(tuán)股份限公司招聘114人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年03月四川成都農(nóng)業(yè)科技中心公開招聘筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 預(yù)防職務(wù)犯罪交流課件
評(píng)論
0/150
提交評(píng)論