进程的控制

实验二:进程的控制
1 .实验目的
通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。
2 .实验内容
(1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。
(2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。
(3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。

3.实验步骤
进程:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
(1)编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
void mian(){
int id;
if(fork()==0)
{printf(“child id is %d\n”,getpid());
}
else if(fork()==0)
{printf(“child2 id %d\n”,getpid());   
}
else
{id=wait();
printf(“parent id is %d\n”,getpid());
}
}
使用fork创建两个子进程

观察进程号
运行该程序后,输出结果如下
parent’s pid=1955
child’s pid=3312
child’s pid=3312
两个子进程的pid是一样的
(2)编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
int main()
{
pid_t pid;
char *a[]={“ls”,"-l","/etc/passwd",0};
int result;
pid=fork();
if(pid<0){
printf(“frok error!”);}
else if(pid==0){
printf(“new program !\n”);
execvp(“ls”,a);
exit(0);
}
else{
int e=waitpid(pid,&result,0);
printf(“child peocess PID:%d\n”,e);
exit(0);
}
}
运行该程序后,输出结果如下
parent=3331
new program.
child=3331
父子进程的pid是一样的
进程创建是操作系统执行程序的需要或者用户或进程要求创建一个新的进程。进程创建首先是在进程表中为进程建立一个进程控制块PCB,采用fork()系统调用将复制执行进程的PCB块,U区和内存图像到新的进程。
进程撤销,也叫终止进程,释放进程占有的资源只是撤销进程过程的一部分。
进程的并发执行,是指若干个进程在执行时间上是重叠的。
进程与程序的区别:
(1)程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在是暂时的;
(2)程序是静态的观念,进程是动态的观念;
(3)进程具有并发性,而程序没有;
(4)进程是竞争计算机资源的基本单位,程序不是。
(5)进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个进程可以执行一个或几个程序。

进程是程序的一次执行,进程是可以并行执行的,进程是一个程序与其使用的数据在处理机上顺序执行时发生的活动,进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进程的特征:动态性:是程序的一次执行;独立性:是系统进行资源分配和调度的一个独立单位;异步性:进程间的相互制约,使进程执行具有间隙;
结构性:进程是具有结构的。
思考
(1)系统调用fork()是如何创建进程的?
答:对于主进程 fork()返回新建的子进程ID, 子进程fork()返回0。
进程配置有唯一的进程控制块PCB,由proc结构和usr结构组成。
(2)当首次将CPU 调度给子进程时,其入口在哪里?
答:进程的进程控制块(PCB)结构中有指向其TTS(任务状态段)的指针,TTS里面存放着进程的入口。
(3)系统调用execvp()是如何更换进程的可执行代码的?
答:执行execvp函数,原来的进程不关闭就,执行execvp函数的代码段,结束后返回。
(4)对一个应用,如果用多个进程的并发执行来实现,与单个进程来实现有什么不同?
答:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值