操作系統(tǒng)實(shí)驗(yàn)報(bào)告finalEDI_第1頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告finalEDI_第2頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告finalEDI_第3頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告finalEDI_第4頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告finalEDI_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、學(xué)生學(xué)號(hào)0121010680225 實(shí)驗(yàn)課成績武漢理工大學(xué)學(xué) 生 實(shí) 驗(yàn) 報(bào) 告 書實(shí)驗(yàn)課程名稱 操作系統(tǒng) 開 課 學(xué) 院 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 指導(dǎo)老師姓名 劉軍 學(xué) 生 姓 名 姬琪 學(xué)生專業(yè)班級(jí) 軟件工程SY1001 2012 2013 學(xué)年 第 一 學(xué)期實(shí)驗(yàn)課程名稱: 操作系統(tǒng) 實(shí)驗(yàn)項(xiàng)目名稱Linux鍵盤命令和vi實(shí)驗(yàn)成績實(shí)驗(yàn)者姬琪專業(yè)班級(jí)軟件工程SY1001 組別同組者實(shí)驗(yàn)日期 年 月 日第一部分:實(shí)驗(yàn)分析與設(shè)計(jì)(可加頁)一、 實(shí)驗(yàn)內(nèi)容描述(問題域描述)Linux鍵盤命令和vi1.要求:掌握Linux系統(tǒng)鍵盤命令的使用方法 1. 使用mkdir命令建立一個(gè)子目錄subdir 2. 使

2、用cat或more命令查看file1文件的內(nèi)容。3. 將date命令的用法附加到文件file1的后面:4. 利用ls -l file1命令列出文件file1的較詳細(xì)的信息。5. 利用rm fa命令將文件fa刪除。再利用ls -l命令查看工作目錄內(nèi)容。6. 運(yùn)行mv file1 file_a命令,然后用ls命令查看這兩個(gè)文件是否都還在工作目錄中2.vi操作1.了解vi編輯器的作用和功能2.熟悉vi的操作環(huán)境和切換方法3.掌握vi操作的方式(幾個(gè)常用鍵)4.了解常用的快捷鍵二、 實(shí)驗(yàn)基本原理與設(shè)計(jì)(包括實(shí)驗(yàn)方案設(shè)計(jì),實(shí)驗(yàn)手段的確定,試驗(yàn)步驟等,用硬件邏輯或者算法描述)VI編輯器的常見命令:vifi

3、lename:打開或新建文件,并將光標(biāo)置于第一行首 vi+nfilename:打開文件,并將光標(biāo)置于第n行首 vi+filename:打開文件,并將光標(biāo)置于最后一行首 vi+/patternfilename:打開文件,并將光標(biāo)置于第一個(gè)與pattern匹配的串處 vi-rfilename:在上次正用vi編輯時(shí)發(fā)生系統(tǒng)崩潰,恢復(fù)filename vifilename.filename:打開多個(gè)文件,依次進(jìn)行編輯 鍵盤命令:1.cat, more, less命令2.Is命令3.cp命令4.rm命令5.mv命令VI命令:1.vi 進(jìn)入vi緩沖區(qū)2.vi file1:進(jìn)入文件file13.退出vi三、

4、主要儀器設(shè)備及耗材Ubuntu操作體統(tǒng)Vi編輯器第二部分:實(shí)驗(yàn)調(diào)試與結(jié)果分析(可加頁)一、 調(diào)試過程(包括調(diào)試方法描述、實(shí)驗(yàn)數(shù)據(jù)記錄,實(shí)驗(yàn)現(xiàn)象記錄,實(shí)驗(yàn)過程發(fā)現(xiàn)的問題等)1 使用mkdir命令建立一個(gè)子目錄subdir $ mkdir subdir$2 使用cat或more命令查看file1文件的內(nèi)容。$ cat file1Sat Mar 17 21:25:14 CST 2012$3 將date命令的用法附加到文件file1的后面: man date file1$ man date file1$4 利用ls -l file1命令列出文件file1的較詳細(xì)的信息。$ ls -l file1-rw

5、-rw-r- 1 ml2010 ml2010 5690 Mar 17 21:28 file1$5 利用rm fa命令將文件fa刪除。再利用ls -l命令查看工作目錄內(nèi)容。$ rm fa$ ls -ltotal 12-rw-rw-r- 1 ml2010 ml2010 5690 Mar 17 21:28 file1$6 運(yùn)行mv file1 file_a命令,然后用ls命令查看這兩個(gè)文件是否都還在工作目錄中?ml2010tan subdir$ mv file1 file_aml2010tan subdir$ lsfile_aml2010tan subdir$顯然,只有file_a在工作目錄中,而f

6、ile1不在工作目錄中vi 共分為三種模式(1)命令模式:命令模式為vi的初始模式,可以使用“上下左右”按鍵來移動(dòng)光標(biāo),您可以使用“刪除字符”或“刪除整行”來處理文檔。在編輯模式或指令列模式中按【ESC】鍵可換回命令模式。(2)編輯模式:在命令模式中按下【i, I, o, O, a, A, r, R】等字母之后才會(huì)進(jìn)入編輯模式。按下上述的字母時(shí),在畫面的左下方會(huì)出現(xiàn)【 -INSERT- 或 -插入- 】的字樣,才可以做文字?jǐn)?shù)據(jù)輸入。 (3)指令列模式:在命令模式當(dāng)中,輸入 【:】或【 / 】就可以將光標(biāo)移動(dòng)到最底下那一行,進(jìn)入指令列模式。在這個(gè)模式當(dāng)中,可以存盤、結(jié)束vi 、顯示行號(hào)等操作。

7、二、 實(shí)驗(yàn)結(jié)果及分析(包括結(jié)果描述、實(shí)驗(yàn)現(xiàn)象分析、影響因素討論、綜合分析和結(jié)論等)Free 顯示系統(tǒng)中已用空閑內(nèi)存數(shù)量 Rm:刪除文件或目錄三、 實(shí)驗(yàn)小結(jié)、建議及體會(huì)Linux對(duì)比Windows有些不同需要時(shí)間去適應(yīng)。通過這次實(shí)驗(yàn)對(duì)Linux操作系統(tǒng)有了進(jìn)一步的了解。初步掌握了一些Linux系統(tǒng)常用的命令。通過這僅一個(gè)周時(shí)間的學(xué)習(xí),我們只是了解了linux的一些最基本知識(shí),我會(huì)在后的學(xué)習(xí)中不斷完善和加以擴(kuò)充linux知識(shí)的學(xué)習(xí)。實(shí)驗(yàn)課程名稱: 操作系統(tǒng) 實(shí)驗(yàn)項(xiàng)目名稱Linux下C編程實(shí)驗(yàn)成績實(shí)驗(yàn)者姬琪專業(yè)班級(jí)軟件SY1001組別同組者實(shí)驗(yàn)日期 年 月 日第一部分:實(shí)驗(yàn)分析與設(shè)計(jì)(可加頁)一、

8、實(shí)驗(yàn)內(nèi)容描述(問題域描述) Linux下的C編程要求:掌握vi編輯器的使用方法;掌握Linux下C程序的源程序編輯方法;編譯、連接和運(yùn)行方法。內(nèi)容:設(shè)計(jì)、編輯、編譯、連接以及運(yùn)行一個(gè)C程序,其中包含鍵盤輸入和屏幕輸出語句。1.掌握vi編輯器的使用方法;2.掌握gcc的使用格式二、 實(shí)驗(yàn)基本原理與設(shè)計(jì)(包括實(shí)驗(yàn)方案設(shè)計(jì),實(shí)驗(yàn)手段的確定,試驗(yàn)步驟等,用硬件邏輯或者算法描述)#includeusing namespace std;int main()int begin, end;int temp = 0;coutPlease enter two number:beginend;if(beginend

9、)temp = begin;begin = end;end = temp;for(int i=begin; i=end; i+)couti ;coutendl;return 0;三、主要儀器設(shè)備及耗材Ubuntu操作體統(tǒng)Vi編輯器G+編譯第二部分:實(shí)驗(yàn)調(diào)試與結(jié)果分析(可加頁)一、 調(diào)試過程(包括調(diào)試方法描述、實(shí)驗(yàn)數(shù)據(jù)記錄,實(shí)驗(yàn)現(xiàn)象記錄,實(shí)驗(yàn)過程發(fā)現(xiàn)的問題等) (1).先用vi JamesJi.c 建立文件(2).在vi的插入界面輸入#include int main(void)printf(JamesJi.gcc!rn); return 0;(3).編譯生成JamesJi文件:gcc -o J

10、amesJi JamesJi.c(4).運(yùn)行JamesJi文件:./JamesJi二、 實(shí)驗(yàn)小結(jié)、建議及體會(huì)通過這次實(shí)驗(yàn)vi編輯器有了進(jìn)一步的應(yīng)用,同時(shí)學(xué)會(huì)了在Linux進(jìn)行簡單的C語言編程,掌握Linux下C程序的源程序編輯方法;編譯、連接和運(yùn)行方法。在以后的學(xué)習(xí)中會(huì)加大努力加強(qiáng)自己的編程能力。加深了對(duì)linux的印象,linux的兼容性很強(qiáng)。C/C+仍舊可以在上面編譯成功。實(shí)驗(yàn)課程名稱: 操作系統(tǒng) 實(shí)驗(yàn)項(xiàng)目名稱SHELL編程和后臺(tái)批處理實(shí)驗(yàn)成績實(shí)驗(yàn)者姬琪專業(yè)班級(jí)軟件SY1001組別同組者實(shí)驗(yàn)日期 年 月 日第一部分:實(shí)驗(yàn)分析與設(shè)計(jì)(可加頁)三、 實(shí)驗(yàn)內(nèi)容描述(問題域描述)SHELL編程和后

11、臺(tái)批處理要求:掌握Linux系統(tǒng)的SHELL編程方法和后臺(tái)批處理方法。內(nèi)容: (1) 將編譯、連接以及運(yùn)行上述C程序各步驟用SHELL程序批處理完成,前臺(tái)運(yùn)行。(2) 將上面SHELLL程序后臺(tái)運(yùn)行。觀察原C程序運(yùn)行時(shí)輸入輸出情況。 (3) 修改調(diào)試上面SHELL程序和C程序,使得在后臺(tái)批處理方式下,原鍵盤輸入內(nèi)容可以鍵盤命令行位置參數(shù)方式交互式輸入替代原鍵盤輸入內(nèi)容,然后輸出到屏幕。四、 實(shí)驗(yàn)基本原理與設(shè)計(jì)(包括實(shí)驗(yàn)方案設(shè)計(jì),實(shí)驗(yàn)手段的確定,試驗(yàn)步驟等,用硬件邏輯或者算法描述)test.cpp文件如下:#includeusing namespace std;int main()int i,

12、j;int a1010 = 0;a00 = 1;for(i=1; i=9; i+)for(j=0; j=i; j+)if(j=0) | (i=j)aij = 1;elseaij = ai-1j-1 + ai-1j;for(i=0; i=9; i+)for(j=0; j=i; j+)cout aij;coutendl;return 0;test.sh文件如下#!/bin/bash#Program:# This program is used to compile and run a file of cpp#History#2011/06/01g+ -o test.out test.cppchmo

13、d u+x test.out./test.out三、主要儀器設(shè)備及耗材Ubuntu操作系統(tǒng)Vi編輯器 第二部分:實(shí)驗(yàn)調(diào)試與結(jié)果分析(可加頁)四、 調(diào)試過程(包括調(diào)試方法描述、實(shí)驗(yàn)數(shù)據(jù)記錄,實(shí)驗(yàn)現(xiàn)象記錄,實(shí)驗(yàn)過程發(fā)現(xiàn)的問題等) 調(diào)試過程中未發(fā)現(xiàn)任何問題 五、 實(shí)驗(yàn)結(jié)果及分析(包括結(jié)果描述、實(shí)驗(yàn)現(xiàn)象分析、影響因素討論、綜合分析和結(jié)論等)六、 實(shí)驗(yàn)小結(jié)、建議及體會(huì)通過這次實(shí)驗(yàn)熟悉了shell編程,對(duì)Linux下的編程有了進(jìn)一步的了解。也對(duì)Linux系統(tǒng)終端方式使用的編輯器vi有進(jìn)一步的認(rèn)識(shí),如何使用命令來打開文件以及在編輯器vi里面編寫內(nèi)容等,??傊?,通過這次實(shí)驗(yàn),對(duì)課本上的知識(shí)有了進(jìn)一步的理解以及

14、鞏固。實(shí)驗(yàn)課程名稱: 操作系統(tǒng) 實(shí)驗(yàn)項(xiàng)目名稱Linux系統(tǒng)調(diào)用(time)實(shí)驗(yàn)成績實(shí)驗(yàn)者姬琪專業(yè)班級(jí)軟件SY1001組別同組者實(shí)驗(yàn)日期 年 月 日第一部分:實(shí)驗(yàn)分析與設(shè)計(jì)(可加頁)一、 實(shí)驗(yàn)內(nèi)容描述(問題域描述)學(xué)習(xí)Linux內(nèi)核的系統(tǒng)調(diào)用,理解、掌握Linux系統(tǒng)調(diào)用的實(shí)現(xiàn)框架、用戶界面、參數(shù)傳遞、進(jìn)入/返回過程。閱讀Linux內(nèi)核源代碼,通過添加一個(gè)簡單的系統(tǒng)調(diào)用實(shí)驗(yàn),進(jìn)一步理解Linux操作系統(tǒng)處理系統(tǒng)調(diào)用的統(tǒng)一流程。Linux系統(tǒng)調(diào)用使用方法。要求:掌握Linux系統(tǒng)調(diào)用使用方法。內(nèi)容:學(xué)習(xí)使用time, ctime, sleep, exit等Linux系統(tǒng)調(diào)用使用方法。二、 實(shí)驗(yàn)基本

15、原理與設(shè)計(jì)(包括實(shí)驗(yàn)方案設(shè)計(jì),實(shí)驗(yàn)手段的確定,試驗(yàn)步驟等,用硬件邏輯或者算法描述)#include#include#include#includeusing namespace std;int main()while(1) char timebuf100; time_t t; time(&t); strftime(timebuf, sizeof(timebuf),%Y 年 %m 月 %d 日 %H: %M: %S,localtime(&t); couttimebufendl; fflush(stdout); sleep(1); return 0;在現(xiàn)有的系統(tǒng)中添加一個(gè)不用傳遞參數(shù)的系統(tǒng)調(diào)用。這

16、個(gè)系統(tǒng)調(diào)用的功能是實(shí)現(xiàn)遍歷進(jìn)程。實(shí)驗(yàn)主要內(nèi)容: 添加系統(tǒng)調(diào)用的名字利用標(biāo)準(zhǔn)C庫進(jìn)行包裝添加系統(tǒng)調(diào)用號(hào) 在系統(tǒng)調(diào)用表中添加相應(yīng)表項(xiàng) sys_mysyscall的實(shí)現(xiàn)三、主要儀器設(shè)備及耗材Ubuntu操作系統(tǒng)Vi編輯器G+編譯器第二部分:實(shí)驗(yàn)調(diào)試與結(jié)果分析(可加頁)一、 調(diào)試過程(包括調(diào)試方法描述、實(shí)驗(yàn)數(shù)據(jù)記錄,實(shí)驗(yàn)現(xiàn)象記錄,實(shí)驗(yàn)過程發(fā)現(xiàn)的問題等) 【1】下載并部署內(nèi)核源代碼 此步已經(jīng)在實(shí)驗(yàn)2中完成?!?】添加系統(tǒng)調(diào)用號(hào) 系統(tǒng)調(diào)用號(hào)在文件unistd.h里面定義。這個(gè)文件在ubuntu10.10下位于/usr/include/asm/unistd_32.h?,F(xiàn)在我們?cè)趗nistd.h中添加我們的系

17、統(tǒng)調(diào)用號(hào):_NR_mysyscall,如下所示: 231 #define _NR_mysyscall 223 /*添加或修改為mysyscall */* 注意:不同版本的內(nèi)核系統(tǒng)調(diào)用號(hào)不一樣,您可以根據(jù)內(nèi)核版本不同對(duì)系統(tǒng)調(diào)用號(hào)進(jìn)行修改*/ 添加系統(tǒng)調(diào)用號(hào)之后,系統(tǒng)才能根據(jù)這個(gè)號(hào),作為索引,去找syscall_table中的相應(yīng)表項(xiàng)?!?】在系統(tǒng)調(diào)用表中添加或修改相應(yīng)表項(xiàng) 我們知道,系統(tǒng)調(diào)用處理程序(system_call)會(huì)根據(jù)eax中的索引到系統(tǒng)調(diào)用表(sys_call_table)中尋找相應(yīng)的表項(xiàng)。所以,我們必須在那里添加我們自己的一個(gè)值。 在2.6.36的內(nèi)核下,只需要修改arch/x8

18、6/kernel/syscall_table_32.S。注意,修改該文件首先要切換到root權(quán)限,此外使用gedit打開該文件時(shí)注意它的擴(kuò)展名是大寫的S。 233 .long sys_mysyscall /*在對(duì)應(yīng)的位置修改或添加*/234 .long sys_gettid235 .long sys_readahead /* 225 */ 到現(xiàn)在為止,系統(tǒng)已經(jīng)能夠正確地找到并且調(diào)用sys_mysyscall。剩下的就只有一件事情,那就是sys_mysyscall的實(shí)現(xiàn)。【4】sys_mysyscall的實(shí)現(xiàn) 我們把一小段程序添加在kernel/sys.c里面。在這里,我們并沒有在kernel目

19、錄下另外添加自己的一個(gè)文件,這樣做的目的是為了簡單,而且不用修改makefile,省去不必要的麻煩。 mysyscall系統(tǒng)調(diào)用實(shí)現(xiàn)遍歷系統(tǒng)中的所有的進(jìn)程,并打印每個(gè)進(jìn)程的進(jìn)程名字,進(jìn)程標(biāo)識(shí)符,進(jìn)程的狀態(tài)和父進(jìn)程的標(biāo)識(shí)符。 進(jìn)程名字、pid、進(jìn)程狀態(tài)、父進(jìn)程的指針在task-struct結(jié)構(gòu)的字段中。在內(nèi)核中使用printk函數(shù)打印有關(guān)變量的值。遍歷進(jìn)程可以使用next_task宏,init_task進(jìn)程為0號(hào)進(jìn)程。 asmlinkage int sys_mysyscall(void) /在此處加入遍歷進(jìn)程的代碼; return 0;【5】重新編譯內(nèi)核 一定要重新編譯內(nèi)核。內(nèi)核編譯完成后,重新

20、啟動(dòng)編譯后的新內(nèi)核?!?】編寫用戶態(tài)程序 要測試新添加的系統(tǒng)調(diào)用,需要編寫一個(gè)用戶態(tài)測試程序(test.c)調(diào)用mysyscall系統(tǒng)調(diào)用。mysyscall系統(tǒng)調(diào)用中printk函數(shù)輸出的信息在/var/log/message文件中。也可以在shell下用dmesg命令查看。用戶態(tài)測試程序可以用如下方法實(shí)現(xiàn)#include # include #define _NR_ mysyscall 223int main()syscall(_NR_mysyscall); /*或syscall(223) */在此加入在屏幕輸出每個(gè)進(jìn)程相關(guān)信息的代碼;l 用gcc編譯源程序# gcc o test tes

21、t.cl 運(yùn)行程序# ./testl 用shell命令查看遍歷進(jìn)程輸出的信息#dmesg 二、 實(shí)驗(yàn)結(jié)果及分析(包括結(jié)果描述、實(shí)驗(yàn)現(xiàn)象分析、影響因素討論、綜合分析和結(jié)論等)三、 實(shí)驗(yàn)小結(jié)、建議及體會(huì)這次實(shí)驗(yàn)有點(diǎn)難度,但是通過查找資料和與老師的交流之后還是順利完成了實(shí)驗(yàn),希望以后相關(guān)能力能夠得到加強(qiáng)。實(shí)驗(yàn)課程名稱: 操作系統(tǒng) 實(shí)驗(yàn)項(xiàng)目名稱Linux進(jìn)程控制(fork)實(shí)驗(yàn)成績實(shí)驗(yàn)者姬琪專業(yè)班級(jí)軟件SY1001組別同組者實(shí)驗(yàn)日期 年 月 日第一部分:實(shí)驗(yàn)分析與設(shè)計(jì)(可加頁)一、 實(shí)驗(yàn)內(nèi)容描述(問題域描述)Linux系統(tǒng)進(jìn)程控制要求:掌握Linux系統(tǒng)中進(jìn)程控制原語fork的使用方法。內(nèi)容:設(shè)計(jì)C程

22、序,其中主進(jìn)程創(chuàng)建一個(gè)子進(jìn)程,以特定次序各自執(zhí)行規(guī)定操作后退出。二、 實(shí)驗(yàn)基本原理與設(shè)計(jì)(包括實(shí)驗(yàn)方案設(shè)計(jì),實(shí)驗(yàn)手段的確定,試驗(yàn)步驟等,用硬件邏輯或者算法描述)#include#include#includeusing namespace std;int main()coutParent process id:getpid()endl;pid_t iRet = fork();if(iRet0) coutCreate child process fail!endl;else if(iRet = 0) coutIm child process, and id isgetpid()ppid is:g

23、etppid()endl;else coutCreate child process success childthe id is:iRetendl;return 0;三、主要儀器設(shè)備及耗材Ubuntu操作體統(tǒng)Vi編輯器G+編譯第二部分:實(shí)驗(yàn)調(diào)試與結(jié)果分析(可加頁)一、 調(diào)試過程(包括調(diào)試方法描述、實(shí)驗(yàn)數(shù)據(jù)記錄,實(shí)驗(yàn)現(xiàn)象記錄,實(shí)驗(yàn)過程發(fā)現(xiàn)的問題等)(1)【進(jìn)程的創(chuàng)建】 編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程,當(dāng)此進(jìn)程運(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é)果

24、,并分析原因。【源程序】:#includeint main() int p1, p2; while (p1 = fork() = -1); if (p1 = 0) /第一子進(jìn)程 putchar(b); else while (p2 = fork() = -1); if (p2 = 0) putchar(c); /第二子進(jìn)程 else putchar(a); /父進(jìn)程 return 0;運(yùn)行多次:主要輸出有bca,偶爾輸出cab和cba,abc,bac,acb會(huì)有如此多種不同輸出,主要是因?yàn)閒ork()生成的子進(jìn)程和父進(jìn)程是并行運(yùn)行的,所以先運(yùn)行哪個(gè)進(jìn)程是由系統(tǒng)的調(diào)度算法決定的,ubuntu9.

25、04很大概率系統(tǒng)會(huì)先輸出bca是因?yàn)閡buntu 9.04在fork()運(yùn)行之后很大概率先運(yùn)行子進(jìn)程,再運(yùn)行父進(jìn)程。當(dāng)然也有可能先運(yùn)行父進(jìn)程后子進(jìn)程,再加上進(jìn)程間的并發(fā)性;導(dǎo)致了輸出的多樣性。輸出次序帶有隨機(jī)性。(2)【進(jìn)程的控制】 修改已編寫的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話,在觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析原因?!驹创a】:#includeint main() int p1, p2; while (p1 = fork() = -1); if (p1 = 0) ;第一個(gè)子進(jìn)程 printf(Child1 is running!n); else while (p2 =

26、 fork() = -1); if (p2 = 0) ;第二子進(jìn)程 printf(Child2 is running!n); else ;父進(jìn)程 printf(Father is running!n); return 0;運(yùn)行多次,大部分運(yùn)行后輸出:Child1 is running!Child2 is running!Father is running!少數(shù)輸出:Child2 is running!Child1 is running!Father is running!Father is running!Child1 is running!Child2 is running!理論上是有6種不

27、同的結(jié)果,還是由于系統(tǒng)的調(diào)度算法,程序的并發(fā)性影響;但由于函數(shù)printf( )在輸出字符串時(shí)不會(huì)被中斷,因此,字符串內(nèi)部字符順序輸出不變。所以與打印單字符的結(jié)果相同。創(chuàng)建進(jìn)程,使用 exec 函數(shù)族使子進(jìn)程執(zhí)行新的目標(biāo)程序,觀察并分析出現(xiàn)的現(xiàn)象?!驹创a】:#include #include int main()printf(=system call execl testing =n);execlp(date,date,0);printf(exec error !n);return 0;輸出:=system call execl testing =2009年 12月 04日 星期五 21:3

28、5:18 CST輸出結(jié)果分析: execlp是一種exec函數(shù),當(dāng)進(jìn)程調(diào)用一種exec函數(shù)時(shí),用指定的目標(biāo)進(jìn)程更好進(jìn)程的執(zhí)行映像。Exec調(diào)用成功后,調(diào)用進(jìn)程的正文段被指定的文件的正文段所覆蓋。調(diào)用成功時(shí),exec不返回,從而不執(zhí)行exec以后的所有語句,所以本例就只有輸出“2009年 12月 04日 星期五 21:35:18 CST”的情況。如果調(diào)用失敗,返回-1,執(zhí)行剩余指令。(3)【進(jìn)程信號(hào)處理】 編寫程序使用系統(tǒng)調(diào)用 fork()創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用 singal()讓父進(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 Process11 is Killed by Parent!Child Process12 is Killed by Parent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止:Parent Process is Killed!【源代碼】:#include#includeint wait_mark;void waiting() while (wait

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論