篇一 :操作系统实验报告2-进程间通信

实 验 报 告

( 20## / 20##学年 第1学期)


…… …… 余下全文

篇二 :进程间通信实验报告

软件学院计算机课程

实  验  报  告  册

课程名称     计算机操作系统                           

实验学期 20## 年至 20## 年 第  2 学期

学生所在院(系)       软件学院       

年级 11软件  专业班级   软工(1)  

学生姓名   朱水云     学号  1115114034  

指导教师       陈自刚       

实验最终成绩                        

软件学院实验室制

2012 年 4 月

实验报告( 二 )

实验名称:进程间通信 

实验时间:20##年4月18号    

…… …… 余下全文

篇三 :操作系统程序进程通信实验报告

进 程 通 信

                      

              指导老师: 夏 建

一、实验题目

进程通信上机实验(消息缓冲通信)

二、算法思想

1、在进程管理(调度)实验基础上,加入进程通信的功能,采用消息缓冲通信机制进行通信。

2、P1发送数据给P2,P2排序后发送给P3,P3接收数据并输出。

3、      要发送的数据内容由操作者实时输入。

三、小组分工:

四、算法程序

1、     缓冲区结构

typedef struct node

{int id;

 int size;

 char text[100];

 struct node *next;

}buftype;

2、     进程控制块PCB

struct {int id;

   char status;

int waiter1;

   int priority;

   char stack[5];

   int sm;

   buftype *front;

   buftype *rear;

}pcb[4];

3 .发送、接收、排序程序算法流程

…… …… 余下全文

篇四 :实验三 进程通讯实验报告

实验三 进程通讯实验报告

【姓名】…

【学号】…

【实验题目】进程通讯——消息队列与共享存储区

【实验目的】

(1) 掌握进程间通讯的编程方法;

(2) 加深对进程并发执行的理解;

(3) 学习利用消息队列和共享存储区实现进程通信的方法。

【实验内容】

设计一个多进程并发运行的程序,它由不同的进程完成下列工作:

(1)接收键盘输入进程

负责接收用户的键盘输入,并以适当的方式将由键盘获得的数据交给其它进程处理。

(2)显示进程

负责全部数据显示任务,包括键盘输入数据的显示和提示信息的显示。

(3)分发数据进程

将键盘输入的数据分为3类,即字母、数字和其它,并分别将字母写入文件letter.txt中,数字写入文件number.txt中,除字母和数字外其它数据丢弃。

【实验要求】

1、 程序能以适当的方式提示用户输入数据;

2、 提示用户有数据被丢弃;

3、 全部的显示任务必须由显示进程完成;

4、 整个程序能够连续处理多组输入数据,直到用户输入“quit”字符串,整个程序结

束;

5、 进一步要求:同时采用共享存储区和消息2种方法实现进程之间的通信,并比较

这2种通信方法的利弊。

【实验方法】

1、 利用fork()函数创建2个子进程,用一个父进程和两个子进程完成上面的三个实验

任务,用子进程1实现分发数据任务,子进程2实现接受键盘输入任务,父进程实现全部的显示任务。

2、 同时通过共享存储区和消息队列两种进程通讯方式实现上面三个进程之间的同步

和互斥。

3、 利用while()循环、kill()函数和signal()函数实现连续多组数据输入。

【程序结构】

·数据结构:消息队列、字符数组;

·程序结构:顺序结构、if-else分支结构和while循环结构;

·主要算法:无特别算法

【实验结果】

1、有代表性的执行结果:

…… …… 余下全文

篇五 :实验三 进程通信 实验报告

北京联合大学 信息学院

“操作系统”课程

实验报告

称:      实验三  进程间通信        

姓名(学号):        

       业:        计算机科学与技术        

间:         201052        

师:                       

北京联合大学-信息学院编制


(一)信号机制实验

1信号机制实验

1.1 题目描述

   1、编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:

Child process1 is killed by parent!

Child process2 is killed by parent!

…… …… 余下全文

篇六 :操作系统实验报告进程的管道及消息通信

篇七 :操作系统进程创建及通信实验报告

武 汉 工 程 大 学

计算机科学与工程学院

《操作系统》实验报告[]

一、实验目的

创建进程,实现消息通信和共享内存通信。了解进程的创建、退出和获取进程信息。掌握通过内存印象文件和管道技术实现进程通信。

二、实验内容

本例用三种方法实现进程通信,仅用于示例目的,没有进行功能优化。

1、  在进程A中输入一些字符,点“利用SendMessage发送消息”按钮可将消息发到进程B。

2、  在进程A中输入一些字符,点“写数据到内存映像文件”按钮,然后在进程B中点“从内存映像文件读数据” 按钮可收到消息。

3、  先在进程B中点“创建管道并接收数据” 按钮,然后在进程A中输入一些字符,点“写数据到管道文件”按钮可将消息发到进程B。(重复第3步每次可发一条消息)

三、实验思想

这次试验基本思想是通过创建进程,实现进程间通信。主要通过将数据写到内存印象文件中和创建管道来实现进程通信。

用MFC创建一个父窗体程序A和一个子窗体程序B。在主窗体程序中添加一个创建子窗体的进程B按钮和一个结束这个子窗体的按钮。然后添加3个按钮,分别叫做“利用SendMessage发送消息”、“写数据到内存印象文件”、“写数据到管道文件”,通过这3种方式来实现进程A和进程B之间的通信。

四、设计分析:

首先设计好父窗体和子窗体的整体面貌。然后编写各个功能模块。对于父窗体,在“利用SendMessage发送消息”按钮的消息响应函数中,主要是利用Windows API函数CWnd::FindWindow来找到接收消息的窗体,即进程B,找到进程B后,利用这个函数返回的窗体指针的SendMessage函数来发送消息。在“写数据到内存印象文件”按钮的消息响应函数中,主要是利用函数CreateFileMapping来创建一个印象文件,这个函数返回的是这个印象文件的句柄,然后将这个句柄和要发送的消息字符串传递到函数sprintf中,就可以所要发送的消息写入印象文件,在子窗体中有个“从内存印象文件读数据”按钮,在这个按钮的消息响应函数中读取父进程所创建的印象文件中的数据就可以实现通信了。在父窗体按钮“写数据到管道文件”的消息响应函数中,不能直接将要发送的消息发送到管道文件,因为管道必须先由子进程通过函数CreateNamedPipe创建,只有待子进程创建好管道后父进程才能根据管道创建管道文件,将消息写入管道文件并及时发送给子进程。而且这个管道只能使用一次,即每次发送完消息后那个管道不能在使用了,必须再由子进程创建一个管道,父进程才能再次创建管道文件并向其中写入消息。

…… …… 余下全文

篇八 :实验五 进程间通信

实验五 进程间通信

UNIX/LINUX系统的进程间通信机构(IPC)允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉LINUX支持的信号机制、管道机制、消息队列通信机制及共享存储区机制。

5.1信号机制实验(一)

【实验目的】

1.了解什么是信号。

2.熟悉LINUX系统中进程之间软中断通信的基本原理。

【实验原理】

利用signal来实现发送信号和接受信号的原理

【实验内容】

1.编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到父进程发来的信号后,分别输出下列信息后终止: Child process 1 is killed by parent!

Child process 2 is killed by parent!

父进程等待两个子进程终止后,输出以下信息后终止:

Parent process is killed!

<参考程序>

# include<stdio.h>

# include<signal.h>

# include<unistd.h>

int wait_mark;

void waiting(),stop();

void main()

{ int p1, p2;

signal(SIGINT,stop);

while((p1=fork())==-1);

if(p1>0)

{ ①

while((p2=fork())= =-1);

If(p2>0) { ②

wait_mark=1; waiting(0); kill(p1,10); kill(p2,12); wait( ); /*在父进程中*/ /*在父进程中*/

…… …… 余下全文