进程控制实验报告

进程控制实验报告

1. 目的和要求

通过本实验掌握Linux操作系统的进程创建fork(),进程终止exit(),等待进程终止wait(),执行用户可执行程序exec()等进程控制的操作,利用Linux操作系统提供的进程通信的工具实现进程间的同步。 2. 实验内容

问题:求100000个浮点数(精确小数点右4位)的平均值(和、最大值、最小值) 流程图:

s 随机生成10万个浮点数 求2.5万个数部分和 求2.5万个数部分和 求2.5万个数部分和 求2.5万个数部分和 求10万个数之和 步骤:

1、随机生成100000个浮点数(父进程);

2、创建4个子进程,分别求25000个浮点数之和; 3、父进程完成100000个浮点数之和并打印结果。

4、统计顺序计算的时间和多个进程采用多道程序设计完成计算的时间。

3. 参考文献

f word文档可自由复制编辑

Keith Haviland等著/《UNIX 系统编程》/第二版/电子工业出版社/03年1月出版 4. 实验内容

1、 求解问题的顺序程序及运行时间 #include #include #include #include

int main(void) {

int i, j;

double array[4][25000] double allsum=0.0; time_t start, end; struct timeval js; for (i = 0; i < 4; i++)

for (j = 0; j < 25000; j++)

array[i][j]=(double)rand() / (double)RAND_MAX; gettimeofday(&js, NULL) ; start = js.tv_usec; for (i = 0; i < 4; i++) {

for (j = 0; j < 25000; j++) sum[i] += array[i][j]; }

for ( i=0; , i< 4; i++) {

allsum= sum[i] ;

printf(\ }

gettimeofday(&tv, NULL) ; end = js.tv_usec;

printf(\– start); return 0; }

运行结果为:

sum=49951.056669 time=1456

2、 求解问题的多道程序设计的程序及运行时间

#include #include #include #include

word文档可自由复制编辑

#include

double array[4][25000]; double sum[4] = {0.0} double allsum[4]; double sum = 0.0; int fpipe[4][2]; int main(void) {

int i, j;

struct timeval tv; time_t start, end; for (i = 0; i < 4; i++)

for (j = 0; j < 25000; j++)

a[i][j]=(double)rand() / (double)RAND_MAX gettimeofday(&tv, NULL);

start = js.tv_usec; for (i = 0; i < 4; i++) {

if (pipe(fpipe[i]) < 0) {

printf(\ exit(1); }

if (fork() == 0) { for (j = 0; j < 25000; ++j) {

sum1[i] += a[i][j]; }

write(fpipe[i][1], &sum1[i],sizeof(double)); exit(0); } else

{

if ( !read(fpipe[i][0], &sum[i], sizeof(double))) {

exit(1); }

printf(\ } }

for (i = 0; i< 4; i++) sum += sum[i];

printf(\ gettimeofday(&tv, NULL);

word文档可自由复制编辑

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4