您好,欢迎来到品趣旅游知识分享网。
搜索
您的当前位置:首页西工大操作系统实验报告五

西工大操作系统实验报告五

来源:品趣旅游知识分享网
1、进程:是具有功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的单位。

2、程序与进程之间的区别:

1)、进程更能真实地描述并发,而程序不能 2)、进程是由程序和数据两部分组成的 3)、程序是静态的,进程是动态的

4)、进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的 5)、一个程序可对应多个进程,反之亦然

6)、进程具有创建其他进程的功能,而程序没有

3、并发执行:在一定时间内物理机器上有两个或两个以上的进程同处于运行状态。 4、进程通信的基本原理

程序:1、

(输出一个字符的,多次运行)

#include main() {

Int p1,p2; p1=fork();

if(p1==0 )

{ /*子进程创建成功*/

sleep(1); /*延长子进程运行时间*/

} else {

if(p2==0) /*子进程创建成功*/ {

sleep(1); /*延长子进程运行时间*/ putchar('c'); }

else {

sleep(1); /*延长进程运行时间*/ putchar('a'); /*父进程执行*/ }

}

}

P2=fork();

putchar('b');

输出结果无序;

原因:在程序中调用函数sleep(),使其无需输出。

程序:2、(输出为一句话,多次运行)

#include #include main() {

{ }

else { if(p2==0 )

{

printf(\"son %d\\n\for(i=0;i<5;i++)

for(i=0;i<5;i++)

printf(\"parent%d\\n\

wait(0); /* 保证在子进程终止前,父进程不会终止*/ int p1,p2,i; p1=fork(); if(p1==0 )

exit(0);

P2=fork();

wait(0); /* 保证在子进程终止前,父进程不会终止*/

exit(0); /*向父进程信号0且该进程推出*/

} else {

for(i=0;i<5;i++) } }

printf(“grandchild %d\\n\ exit(0);

}

第一次运行:

第二次运行:

运行结果:每次结果相同且有序;

原因:程序中调用函数wait()和exit(), 而没有调用sleep()。

程序 3、

#include #include main() {

int p1,p2,i; p1=fork(); if(p1==0 ) { lockf(1,1,0); for(i=0;i<5;i++)

printf(\"parent %d\\n\

lockf(1,0,0);

wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); } else

{

P2=fork(); if(p2==0 ) {

lockf(1,1,0);

printf(\"son %d\\n\

else {

lockf(1,1,0);

for(i=0;i<5;i++) printf(\"daughter %d\\n\ lockf(1,0,0);

} }

第一次运行结果:

}

exit(0); lockf(1,0,0);

exit(0); }

wait(0); /* 保证在子进程终止前,父进程不会终止*/

for(i=0;i<5;i++)

第二次运行结果:

多次运行结果相同:

原因:i的值较小,使得每个循环时间较短,导致lockf()不能干扰运行结果。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- pqdy.cn 版权所有 赣ICP备2024042791号-6

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务