




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 西 安 郵 電 大 學 (計算機學院)課內(nèi)實驗報告實驗名稱: 進程管理 專業(yè)名稱: 計算機科學與技術(shù)班 級:計科1104 學生姓名:張冬冬(07)學號(8位): 04111112指導教師: 任東陜設(shè)計起止時間: 2013年11月22日一. 實驗目的及實驗環(huán)境(1)加深對進程概念的理解,明確進程和程序的區(qū)別。 (2)進一步認識并發(fā)執(zhí)行的實質(zhì)。 (3)分析進程競爭資源現(xiàn)象,學習解決進程互斥的方法。 (4)了解Linux系統(tǒng)中進程通信的基本原理。二. 實驗內(nèi)容(1)進程的創(chuàng)建 編寫一段源程序,使系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程,當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動。讓每一個進程在
2、屏幕上顯示一個字符:父進程顯示字符“a”;子進程分別顯示字符“b”和字符“c”。試觀察紀錄屏幕上的顯示結(jié)果,并分析原因。 (2)進程的控制 修改已編寫的程序,將每個進程輸出一個字符改為每個進程輸出一句話,在觀察程序執(zhí)行時屏幕出現(xiàn)的現(xiàn)象,并分析原因。 如果在程序中使用調(diào)用lockf()來給每一個子進程加鎖,可以實現(xiàn)進程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)象。 (3)編寫一段程序,使其現(xiàn)實進程的軟中斷通信。 要求:使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用signal()讓父進程捕捉鍵盤上來的中斷信號(即按DEL鍵);當捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用Kill()向兩個子進程發(fā)出信號,子進程
3、捕捉到信號后分別輸出下列信息后終止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父進程等待兩個子進程終止后,輸出如下的信息后終止 Parent Process is Killed! 在上面的程序中增加語句signal (SIGNAL, SIG-IGN) 和signal (SIGQUIT, SIG-IGN), 觀察執(zhí)行結(jié)果,并分析原因。 (4)進程的管道通信 編制一段程序,實現(xiàn)進程的管理通信。 使用系統(tǒng)調(diào)用pipe()建立一條管道線;兩個子進程P1和P2分別向管道中寫一句話: Child 1
4、 is sending a message! Child 2 is sending a message! 而父進程則從管道中讀出來自于兩個子進程的信息,顯示在屏幕上。 要求父進程先接收子進程P1發(fā)來的消息,然后再接收子進程P2發(fā)來的消息。三方案設(shè)計1 進程的創(chuàng)建任務編寫一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個子進程。當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符;父進程顯示字符“a”,子進程分別顯示字符“b”和“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。程序#include<stdio.h>main()int p1,p2;if(p1=
5、fork() /*子進程創(chuàng)建成功*/ putchar('b');else if(p2=fork() /*子進程創(chuàng)建成功*/ putchar('c'); else putchar('a'); /*父進程執(zhí)行*/<運行結(jié)果>bca(有時會出現(xiàn)bac)分析:從進程執(zhí)行并發(fā)來看,輸出bac,acb等情況都有可能。原因:fork()創(chuàng)建進程所需的時間多于輸出一個字符的時間,因此在主進程創(chuàng)建進程2的同時,進程1就輸出了“b”,而進程2和主程序的輸出次序是有隨機性的,所以會出現(xiàn)上述結(jié)果。2 進程的控制<任務> 修改已編寫好的程序,將每個
6、程序的輸出由單個字符改為一句話,再觀察程序執(zhí)行時屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。如果在程序中使用系統(tǒng)調(diào)用lockf()來給每個程序加鎖,可以實現(xià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);運行結(jié)果child.sondaughterdaughter或childsonchildsondaughter分析:由于函數(shù)printf()輸出的字符串之間不會被中斷,因此,字符串內(nèi)部的字符順序輸出時不變。但是 , 由于進程并發(fā)執(zhí)行時的調(diào)度順序和父子進程的搶占處理機問題,輸出字符串的順序和先后隨著執(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); <運行結(jié)果大致與未上鎖的輸出結(jié)果相同,也是隨著執(zhí)行時間不同,輸出結(jié)果的順序有所不同。分析:因為上述程序執(zhí)行時,不同進程之間不存在共享臨
9、界資源(其中打印機的互斥性已有由操作系統(tǒng)保證)問題,所以,加鎖與不加鎖效果相同。3軟中斷通信任務1編制一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用signal()讓父進程捕捉鍵盤上來的中斷信號(即按ctrl+c鍵),當捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用kill()向兩個子進程發(fā)出信號,子進程捕捉到信號后,分別輸出下列信息后終止:child process1 is killed by parent!child process2 is killed by parent!父進程等待兩個子進程終止后,輸出以下信息后終止:parent process is killed! 4.fork
10、( ) 創(chuàng)建一個新進程。系統(tǒng)調(diào)用格式:pid=fork( )參數(shù)定義:int fork( )fork( )返回值意義如下:0:在子進程中,pid變量保存的fork( )返回值為0,表示當前進程是子進程。>0:在父進程中,pid變量保存的fork( )返回值為子進程的id值(進程唯一標識符)。-1:創(chuàng)建失敗。如果fork( )調(diào)用成功,它向父進程返回子進程的PID,并向子進程返回0,即fork( )被調(diào)用了一次,但返回了兩次。此時OS在內(nèi)存中建立一個新進程,所建的新進程是調(diào)用fork( )父進程(
11、parent process)的副本,稱為子進程(child process)。子進程繼承了父進程的許多特性,并具有與父進程完全相同的用戶級上下文。父進程與子進程并發(fā)執(zhí)行。核心為fork( )完成以下操作:(1)為新進程分配一進程表項和進程標識符進入fork( )后,核心檢查系統(tǒng)是否有足夠的資源來建立一個新進程。若資源不足,則fork( )系統(tǒng)調(diào)用失?。环駝t,核心為新進程分配一進程表項和唯一的進程標識符。(2)檢查同時運行的進程數(shù)目超過預先規(guī)定的最大數(shù)目時,fork( )系統(tǒng)調(diào)用失敗。(3)拷貝進程表項中的數(shù)據(jù)將父進程的當前目錄和所有已打開的數(shù)據(jù)拷貝到子進程表項中,并置進程的狀態(tài)為“創(chuàng)建”狀態(tài)
12、。(4)子進程繼承父進程的所有文件對父進程當前目錄和所有已打開的文件表項中的引用計數(shù)加1。(5)為子進程創(chuàng)建進程上、下文進程創(chuàng)建結(jié)束,設(shè)子進程狀態(tài)為“內(nèi)存中就緒”并返回子進程的標識符。(6)子進程執(zhí)行雖然父進程與子進程程序完全相同,但每個進程都有自己的程序計數(shù)器pc,然后根據(jù)pid變量保存的fork()返回值的不同,執(zhí)行了不同的分支語句。#include <stdio.h>main( )int p1,p2;while(p1=fork( )= = -1); /*創(chuàng)建子進程p1*/if (p1
13、= =0) putchar('b'); elsewhile(p2=fork( )= = -1); /*創(chuàng)建子進程p2*/if(p2= =0) putchar('c'); else putchar('a'); 運行結(jié)果:bca四測試數(shù)據(jù)及運行結(jié)果五總結(jié)1實驗過程中遇到的問題及解決辦法;實驗結(jié)果為c,b,a或b,c,a。父進程a剛啟動,接著就生成子進
14、程b,c,父進程此時之后暫停,去生成子進程b,c。生成完子進程b,c之后,父進程繼續(xù)執(zhí)行。 2不能夠同時生兩個子進程,會發(fā)生進程間的互斥。 進程創(chuàng)見之后,從鍵盤上接受一個信后,然后關(guān)閉子進程和父進程。 4子進程之間通過管道相互發(fā)送消息 2對設(shè)計及調(diào)試過程的心得體會。本次實驗主要實現(xiàn)Linux操作系統(tǒng)中進程管理的功能。了解了進程的創(chuàng)建、執(zhí)行特定任務、終止、和同步的相關(guān)系統(tǒng)調(diào)用。理解了fork、exec、wait、exit3個系統(tǒng)調(diào)用的使用。該系統(tǒng)包括有簡單的進程控制、同步與通訊機構(gòu),系統(tǒng)在運行過程中能顯示各進程的狀態(tài)及有關(guān)參數(shù)的變化情況,從而觀察諸進程的運行過程及系統(tǒng)的管理過程,在我的電腦能夠運行通過,雖不能盡善盡美,但也基本能實現(xiàn)老師的要求的實驗,雖然時間有點短,但我也收獲不少,這次實驗,加深了我對進程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 可靠性增強策略-洞察及研究
- 高速列車氣動噪聲控制-第1篇-洞察及研究
- 危重病人搶救要領(lǐng)
- 數(shù)字貨幣監(jiān)管-第4篇-洞察及研究
- 生態(tài)足跡評估體系-洞察及研究
- 擬態(tài)色彩光譜進化-洞察及研究
- 1.4質(zhì)譜儀和回旋加速器+課件-2024-2025學年高二下學期物理人教版(2019)選擇性必修第二冊
- 金融監(jiān)管創(chuàng)新研究-洞察及研究
- 5.3 適應職業(yè)應對壓力 教案(2課時表格式) 人教版中職心理健康
- 2025春季學期國開電大本科《人文英語4》一平臺機考真題及答案(第七套)
- 煉鋼生產(chǎn)工藝流程
- 2024年6月浙江省普通高校招生選考高考信息技術(shù)真題及答案
- 2024年度海南省國家電網(wǎng)招聘之電網(wǎng)計算機題庫練習試卷B卷附答案
- 2025年鄉(xiāng)文化站半年工作總結(jié)樣本(2篇)
- 2025新版保密法知識考試題庫(含參考答案)
- 工業(yè)園區(qū)物業(yè)管理安全職責指南
- 2025年1月國家開放大學本科《公共政策概論》期末紙質(zhì)考試試題及答案
- 2023年北京朝陽區(qū)初二期末下數(shù)學試卷含答案解析
- 《網(wǎng)絡(luò)安全保險 風險量化評估指南》
- 約瑟夫森結(jié)臨界電流特性研究-洞察分析
- 《教你做智能澆花器》課件
評論
0/150
提交評論