操作系统进程创建父子进程实验报告

2009-2010学年第一学期

计算机操作系统实验报告

专 业:网络工程

班 级:071022

学 号:07102210 姓 名:刘辰龙 提交日期:2009.12.04

实验一、Linux进程创建与进程通信

【实验目的】

1. 熟悉有关Linux系统调用;

2. 学习有关Linux的进程创建,理解进程创建后两个并发进程的执行; 3. 通过系统调用wait()和exit(),实现父子进程同步;

4. 掌握管道、消息缓冲等进程通信方法并了解其特点和使用限制。 【实验程序及分析】 1. 父进程创建子进程

实现父进程创建一个子进程,返回后父子进程分别循环输出字符串“The parent process.”及“The child process.”5次,每次输出后使用sleep(1)延时一秒,然后再进入下一次循环。给出源程序代码和运行结果。

程序代码:

#include main() { int p,i; while((p=fork())==-1); //创建子进程直至成功 if(p==0) //子进程返回 { for(i=0;i

运行结果:

2. 父子进程同步

修改上题程序,使用exit()和wait()实现父子进程同步,其同步方式为父进程等待子进程的同步,即:子进程循环输出5次,然后父进程再循环输出5次。给出源程序代码和运行结果。

程序代码:

#include main() { int p,i; while((p=fork())==-1); if(p>0) { wait(0); for(i=0;i

运行结果:

//创建子进程直至成功 //返回父进程

//父进程等待子进程终止

//延时1秒

//返回子进程

//子进程向父进程发终止信号0

3. Linux管道通信

编写一个程序,实现以下功能。给出源程序代码和运行结果。 (1)父进程使用系统调用pipe()创建一个无名管道;

(2)创建两个子进程,分别向管道发送一条信息后结束;

子进程1发送:Child 1 is sending a message to parent! 子进程2发送:Child 1 is sending a message to parent!

(3)父进程从管道中分别接收两个子进程发来的消息并显示在屏幕上,父进程结束。两个子进程发送信息没有先后顺序要求。 程序代码:

#include #include main() {

int p1,p2,fd[2]; char outpipe[50]; //定义读缓冲区

char inpipe1[50]=

char inpipe2[50]=

pipe(fd); //创建无名管道 while((p1=fork())==-1); //创建子进程1 if(p1==0) //子进程1返回 {

write(fd[1],inpipe1,50); //写信息到管道 exit(0); }

else{

while((p2=fork())==-1); //创建子进程2 if(p2==0) //子进程2返回 {

write(fd[1],inpipe2,50);//写信息到管道

exit(0);

} else {

wait(0); //等待子进程结束

read(fd[0],outpipe,50); //从管道读信息到读缓冲区 printf(

read(fd[0],outpipe,50); printf(

运行结果:

4. Linux消息缓冲通信

编写一个程序,实现以下功能。给出源程序代码和运行结果。

(1)父进程创建一个消息队列和一个子进程,由子进程发送消息,父进程等待子进程结束后接收子进程发来的消息,并显示消息内容。以“end”作为结束消息。

程序代码:

#include #include #include #include #include #include

#define MAXMSG 512 //定义消息长度 struct my_msg //定义消息缓冲区数据结构 { long int my_msg_type; char some_text[MAXMSG]; }msg; main() { int p; int msgid; //定义消息缓冲区内部标识 char buffer[BUFSIZ]; //定义用户缓冲区 msgid=msgget(1234,0666|IPC_CREAT); //创建消息队列,key为1234 long int

msg_to_receive=0;

while((p=fork())==-1); if(p==0){ while(1) { puts(

运行结果:

2)分别编写发送进程和接收进程,由发送进程发送消息,接收进程接收消息。采用先执行发送进程后执行接收进程的方式同步。以“end”作为结束消息。 程序代码:

① 发送进程: #include #include #include #include #include #include

#define MAXMSG 512 //定义消息长度

struct my_msg //定义消息缓冲区数据结构 {

long int my_msg_type; char some_text[MAXMSG]; }msg; main( ) {

int msgid; //定义消息缓冲区内部标识 char buffer[BUFSIZ]; //定义用户缓冲区

msgid=msgget(1234,0666|IPC_CREAT); //创建消息队列,key为1234 while(1) {

puts(

strcpy(msg.some_text,buffer); //buffer送消息缓冲 msgsnd (msgid,&msg,MAXMSG,0); //发送消息到消息队列 if(strncmp(msg.some_text,

exit(0); }

运行结果:

接收进程:

#include #include

#include

#include #include #include

#define MAXMSG 512 //定义消息长度

struct my_msg //定义消息f缓冲区数据结构 {

long int my_msg_type; char some_text[MAXMSG]; }msg; main() {

int msgid; //定义消息缓冲区内部标识 long int msg_to_receive=0;

msgid=msgget(1234, 0666|IPC_CREAT); //获取消息队列,key为1234 while (1) {

msgrcv (msgid, &msg, BUFSIZ, msg_to_receive, 0); //接收消息 printf (

break; }

msgctl (msgid, IPC_RMID,0); //撤消消息队列 exit (0); }

运行结果:

2009-2010学年第一学期

计算机操作系统实验报告

专 业:网络工程

班 级:071022

学 号:07102210 姓 名:刘辰龙 提交日期:2009.12.04

实验一、Linux进程创建与进程通信

【实验目的】

1. 熟悉有关Linux系统调用;

2. 学习有关Linux的进程创建,理解进程创建后两个并发进程的执行; 3. 通过系统调用wait()和exit(),实现父子进程同步;

4. 掌握管道、消息缓冲等进程通信方法并了解其特点和使用限制。 【实验程序及分析】 1. 父进程创建子进程

实现父进程创建一个子进程,返回后父子进程分别循环输出字符串“The parent process.”及“The child process.”5次,每次输出后使用sleep(1)延时一秒,然后再进入下一次循环。给出源程序代码和运行结果。

程序代码:

#include main() { int p,i; while((p=fork())==-1); //创建子进程直至成功 if(p==0) //子进程返回 { for(i=0;i

运行结果:

2. 父子进程同步

修改上题程序,使用exit()和wait()实现父子进程同步,其同步方式为父进程等待子进程的同步,即:子进程循环输出5次,然后父进程再循环输出5次。给出源程序代码和运行结果。

程序代码:

#include main() { int p,i; while((p=fork())==-1); if(p>0) { wait(0); for(i=0;i

运行结果:

//创建子进程直至成功 //返回父进程

//父进程等待子进程终止

//延时1秒

//返回子进程

//子进程向父进程发终止信号0

3. Linux管道通信

编写一个程序,实现以下功能。给出源程序代码和运行结果。 (1)父进程使用系统调用pipe()创建一个无名管道;

(2)创建两个子进程,分别向管道发送一条信息后结束;

子进程1发送:Child 1 is sending a message to parent! 子进程2发送:Child 1 is sending a message to parent!

(3)父进程从管道中分别接收两个子进程发来的消息并显示在屏幕上,父进程结束。两个子进程发送信息没有先后顺序要求。 程序代码:

#include #include main() {

int p1,p2,fd[2]; char outpipe[50]; //定义读缓冲区

char inpipe1[50]=

char inpipe2[50]=

pipe(fd); //创建无名管道 while((p1=fork())==-1); //创建子进程1 if(p1==0) //子进程1返回 {

write(fd[1],inpipe1,50); //写信息到管道 exit(0); }

else{

while((p2=fork())==-1); //创建子进程2 if(p2==0) //子进程2返回 {

write(fd[1],inpipe2,50);//写信息到管道

exit(0);

} else {

wait(0); //等待子进程结束

read(fd[0],outpipe,50); //从管道读信息到读缓冲区 printf(

read(fd[0],outpipe,50); printf(

运行结果:

4. Linux消息缓冲通信

编写一个程序,实现以下功能。给出源程序代码和运行结果。

(1)父进程创建一个消息队列和一个子进程,由子进程发送消息,父进程等待子进程结束后接收子进程发来的消息,并显示消息内容。以“end”作为结束消息。

程序代码:

#include #include #include #include #include #include

#define MAXMSG 512 //定义消息长度 struct my_msg //定义消息缓冲区数据结构 { long int my_msg_type; char some_text[MAXMSG]; }msg; main() { int p; int msgid; //定义消息缓冲区内部标识 char buffer[BUFSIZ]; //定义用户缓冲区 msgid=msgget(1234,0666|IPC_CREAT); //创建消息队列,key为1234 long int

msg_to_receive=0;

while((p=fork())==-1); if(p==0){ while(1) { puts(

运行结果:

2)分别编写发送进程和接收进程,由发送进程发送消息,接收进程接收消息。采用先执行发送进程后执行接收进程的方式同步。以“end”作为结束消息。 程序代码:

① 发送进程: #include #include #include #include #include #include

#define MAXMSG 512 //定义消息长度

struct my_msg //定义消息缓冲区数据结构 {

long int my_msg_type; char some_text[MAXMSG]; }msg; main( ) {

int msgid; //定义消息缓冲区内部标识 char buffer[BUFSIZ]; //定义用户缓冲区

msgid=msgget(1234,0666|IPC_CREAT); //创建消息队列,key为1234 while(1) {

puts(

strcpy(msg.some_text,buffer); //buffer送消息缓冲 msgsnd (msgid,&msg,MAXMSG,0); //发送消息到消息队列 if(strncmp(msg.some_text,

exit(0); }

运行结果:

接收进程:

#include #include

#include

#include #include #include

#define MAXMSG 512 //定义消息长度

struct my_msg //定义消息f缓冲区数据结构 {

long int my_msg_type; char some_text[MAXMSG]; }msg; main() {

int msgid; //定义消息缓冲区内部标识 long int msg_to_receive=0;

msgid=msgget(1234, 0666|IPC_CREAT); //获取消息队列,key为1234 while (1) {

msgrcv (msgid, &msg, BUFSIZ, msg_to_receive, 0); //接收消息 printf (

break; }

msgctl (msgid, IPC_RMID,0); //撤消消息队列 exit (0); }

运行结果:


相关文章

  • 大连理工大学操作系统实验报告
  • 大连理工大学 本科实验报告 课程名称:操作系统实验 学院(系):计算机科学与技术学院 专 班 学业:计算机科学与技术级:号:电计 学生姓名: 年月日 实验项目列表序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...查看


  • Linux 进程创建实验报告
  • 深 圳 大 学 实 验 报 告 课程名称: 学院: 计算机与软件学院 班级:班 实验时间: 实验报告提交时间: 教务处制 一. 实验目标: 1. 2. 3. 4. 5. 掌握fork()系统调用及进程的相关概念 掌握wait()和waitp ...查看


  • 各种实验报告电子版模版
  • 实验项目四 进程通信 一. 实验类型 本实验为综合性实验. 二. 实验目的 1. 了解什么是消息,熟悉消息传送原理. 2. 了解和熟悉共享存储机制. 3. 掌握消息的发送与接收的实现方法. 三. 实验预备知识 任务一 消息的发送和接收 1. ...查看


  • 合肥工业大学操作系统实验报告
  • 合肥工业大学 计算机与信息学院 实验报告 课 程: 计算机操作系统 专业班级: 计算机科学与技术2班 学 号: 姓 名: 实验1 实验环境的使用 一. 实验目的 1. 熟悉操作系统集成实验环境OS Lab的基本使用方法. 2. 练习编译.调 ...查看


  • 课程设计进程实验报告
  • 学年论文(课程设计) 操作系统课程设计 学 院 数学与计算机学院 学科门类 工 学 专 业 网络工程 学 号 姓 名 指导教师 年 月 日 题目: 河北大学2010届本科生毕业论文(设计) 河北大学学年论文(课程设计)任务书 (指导教师用表 ...查看


  • 进程同步与互斥
  • 实验二 进程同步与互斥 一. 实验属性 实验性质: 验证性 实验学时: 4学时 实验要求: 必做 二.实验目的 1. 掌握基本的同步与互斥算法,理解生产者消费者模型. 2. 学习使用Linux中基本的同步对象,掌握相关使用方法. 3. 了解 ...查看


  • 进程调度的设计与实现
  • 院 系:计 算 机 学 院 实验课程:计算机操作系统实验 实验名称:进程调度的设计与实现 指导老师:陈红英 开课时间:2011 - 2012年度第 2学期 专 业:网络工程 班 级:10 级5班 学 生:袁沛权 学 号:[1******** ...查看


  • 实验一-进程控制实验
  • 实验一 进程控制 一.实验目的: 加深对进程概念的理解,明确进程和程序的区别:掌握Linux 操作系统的进程创建和终止操作,体会父进程和子进程的关系及进程状态的变化:进一步认识并发执行的实质,编写并发程序. 二.实验平台: 虚拟机:VMWa ...查看


  • 遥感影像分类实验报告
  • 面向对象分类实验报告 姓名: 学号: 指导老师: 地球科学与环境工程学院 一.实验目的 面向对象法模拟人类大脑认知过程,将图像分割为不同均质的对象,充分利用对象所包含的信息,将知识库转换为规则特征,从而提取影像信息.因为分析的是对象而不是像 ...查看


热门内容