資源描述:
《2010龔瀅峰實驗二.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、集美大學(xué)計算機(jī)工程學(xué)院實驗報告課程名稱:操作系統(tǒng)班級:計算1013指導(dǎo)教師:李傳目姓名:龔瀅峰實驗項目編號:實驗二學(xué)號:實驗項目名稱:進(jìn)程與線程——Linux進(jìn)程與線程通訊實驗成績:一、目的深刻理解線程和進(jìn)程的概念,掌握線程與進(jìn)程在組成成分上的差別,以及與其相適應(yīng)的通訊方式和應(yīng)用目標(biāo)。二、實驗內(nèi)容與設(shè)計思想1、以Linux系統(tǒng)進(jìn)程和線程機(jī)制為背景,掌握fork()和clone()系統(tǒng)調(diào)用的形式和功能,以及與其相適應(yīng)的高級通訊方式。由fork派生的子進(jìn)程之間通過pipe通訊,由clone創(chuàng)建的線程之間通過共享內(nèi)存通訊,對于后者需要考慮互斥問題。2
2、、以生產(chǎn)者/消費者問題為例,通過實驗理解fork()和clone()兩個系統(tǒng)調(diào)用的區(qū)別。程序要求能夠創(chuàng)建4個進(jìn)程或線程,其中包括兩個生產(chǎn)者和兩個消費者,生產(chǎn)者和消費者之間能夠傳遞數(shù)據(jù)。三、實驗使用環(huán)境RedHatEnterpriselinux5四、實驗結(jié)果1.用pipe()創(chuàng)建一個管道文件,然后用fork()創(chuàng)建兩個生產(chǎn)進(jìn)程和兩個消費進(jìn)程,它們之間通過pipe()傳遞信息。#include"sys/types.h"#include"sys/file.h"#include"unistd.h"charr_buf[4];//讀緩沖charw_buf[
3、4];//寫緩沖intpipe_fd[2];pid_tpid1,pid2,pid3,pid4;intproducer(intid);intconsumer(intid);intmain(intargc,char**argv){if(pipe(pipe_fd)<0){printf("pipecreateerror");exit(-1);}else{printf("pipeiscreatedsuccessfully!");if((pid1=fork())==0)producer(1);if((pid2=fork())==0)producer
4、(2);if((pid3=fork())==0)consumer(1);if((pid4=fork())==0)consumer(2);}close(pipe_fd[0]);//需要加上這兩句close(pipe_fd[1]);//否這會有讀者或者寫者永遠(yuǎn)等待inti,pid,status;for(i=0;i<4;i++)pid=wait(&status);exit(0);}intproducer(intid){printf("producer%disrunning!",id);close(pipe_fd[0]);inti=0;for(i=
5、1;i<10;i++){sleep(3);if(id==1)//生產(chǎn)者1strcpy(w_buf,"aaa