操作系統實驗一實驗報告_第1頁
操作系統實驗一實驗報告_第2頁
操作系統實驗一實驗報告_第3頁
操作系統實驗一實驗報告_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上 操作系統實驗一實驗報告基本信息l 1.1 實驗題目 進程控制實驗 1.2完成人 王召德l 1.3報告日期 2015-4-8 實驗內容簡要描述 2.1實驗目標 l 加深對于進程并發(fā)執(zhí)行概念的理解。實踐并發(fā)進程的創(chuàng)建和控制方法。觀察和體驗進程的動態(tài)特性。進一步理解進程生命期期間創(chuàng)建、變換、撤銷狀態(tài)變換的過程。掌握進程控制的方法,了解父子進程間的控制和協作關系。練習 Linux 系統中進程創(chuàng)建與控制有關的系統調用的編程和調試技術。2.2實驗要求 l參考以上示例程序中建立并發(fā)進程的方法,編寫一個多進程并發(fā)執(zhí)行程序。父進 程首先創(chuàng)建一個執(zhí)行l(wèi)s命令的子進程然后再創(chuàng)建一個執(zhí)行p

2、s命令的子進程,并控制 ps 命令總在 ls 命令之前執(zhí)行。2.3實驗的軟硬件環(huán)境Ubuntu14.04 intelPC報告的主要內容 l 3.1實驗的思路 按照上面的實例,先生成一個子進程讓其等待,然后生成第二個子進程,父進程等待其執(zhí)行ps命令后喚醒第一個子進程執(zhí)行l(wèi)s即可。l 3.2實驗模型的描述 無l 3.3主要數據結構的分析說明 l無 3.4主要算法代碼的分析說明 無l 3.5項目管理文件的說明 無實驗過程和結果 l 4.1實驗投入的實際學時數 1學時l 4.2調試排錯過程的記錄 曾嘗試讓第二個子進程激活第一個子進程,結果發(fā)現當運行 ps后,后面的代碼將不再執(zhí)行,所以不可行。l 4.3

3、多種方式測試結果的記錄實驗結果: l 父進程啟動. 12239ls子進程啟動. 12240ps子進程啟動. 12241 PID TTY TIME CMD12239 pts/27 00:00:00 born12240 pts/27 00:00:00 born12241 pts/27 00:00:00 psps子進程結束.12241喚醒ls子進程.12240鍵盤中斷信號產生.ls子進程被喚醒. 12240. born born.c hello.c pctl pctl.c pctl.o. born.c helelo.h hello.c pctl.c pctl.hls子進程結束.12240父進程結束.

4、122394.4實驗結果的分析綜合無實驗的總結 父進程可以通過fork()函數生成子進程,子進程會從fork()函數開始執(zhí)行原來的代碼,當子進程打開一個其他進程時,新進程便會代替此子進程,子進程后面的代碼不會被執(zhí)行。 進程的概念就是運行起來的程序,在實驗中可以看出,同一段代碼也可以變成幾個不同的進程,但是歸根結底他們也都是這一個程序運行得到的。進程并發(fā)其實就是分時的占用cpu得到執(zhí)行。 子進程執(zhí)行execve()函數可以執(zhí)行新程序,新程序的進程號不變,替代原來的子進程運行,原來的子進程execve()函數后的代碼便不再執(zhí)行。 信號的產生就是一個中斷,中斷使cpu停止當前狀態(tài)而去處理這個中斷。可

5、以通過給特定進程發(fā)送信號,使其從掛起狀態(tài)重新啟動,以達到控制目的。附錄程序源代碼#include <sys/types.h>#include <wait.h>#include <unistd.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>typedef void (*sighandler_t) (int);void sigcat()printf("鍵盤中斷信號產生.n");int main(int argc, char *argv)

6、signal(SIGINT,(sighandler_t)sigcat); /注冊一個本進程處理鍵盤中斷的函數 int status_1,status_2; char *args_1 = "/bin/ls","-a",NULL; char *args_2 = "/bin/ps","-a",NULL; int pid_1=fork() ; /建立子進程 if(pid_1<0) / 建立子進程1失敗? printf("Create 1th Process fail!n"); exit(0); i

7、f(pid_1 = 0) / 子進程1執(zhí)行代碼段 printf("ls子進程啟動. %dn",getpid(); pause(); /暫停,等待鍵盤中斷信號喚醒 printf("ls子進程被喚醒. %dn",getpid(); status_1 = execve(args_10,args_1,NULL); exit(0); else printf("n父進程啟動. %dn",getpid(); /報告父進程進程號 int pid_2 = fork(); waitpid(pid_2,&status_2,0); /等待ps子進程結

8、束 if(status_2=0) printf("ps子進程結束.%dn",pid_2); printf("喚醒ls子進程.%dn",pid_1); kill(pid_1,SIGINT); waitpid(pid_1,&status_1,0); /等待ps子進程結束 printf("ls子進程結束.%dn",pid_1); printf("父進程結束.%dn",getpid(); exit(0); if(pid_2<0) / 建立子進程2失敗? printf("Create 2th Process fail!n"); exit(0)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論