内容发布更新时间 : 2025/2/13 1:13:00星期一 下面是文章的全部内容请认真阅读。
进程控制实验报告
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
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
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文档可自由复制编辑