搜档网
当前位置:搜档网 › 实验4 进程的管道通信

实验4 进程的管道通信

实验4   进程的管道通信
实验4   进程的管道通信

实验4 进程的管道通信

1. 目的

1)加深对进程概念的理解,明确进程和程序的区别。

2)进一步认识并发执行的实质。

3)分析进程争用资源的现象,学习解决进程互斥的方法。

4)学习解决进程同步的方法。

5)了解Linux系统中进程通信的基本原理。

进程是操作系统中最重要的概念,贯穿始终,也是学习现代操作系统的关键。通过本次实验,要求理解进程的实质和进程管理的机制。在Linux系统下实现进程从创建到终止的全过程,从中体会进程的创建过程、父进程和子进程之间的关系、进程状态的变化、进程之间的互斥、同步机制、进程调度的原理和以管道为代表的进程间的通信方式的实现。

2. 内容及要求

这是一个设计型实验,要求自行编制程序。

使用系统调用pipe()建立一条管道,两个子进程分别向管道写一句话:

Child process1 is sending a message!

Child process2 is sending a message!

父进程从管道读出来自两个子进程的信息,显示在屏幕上。

要求:

1)父进程先接收子进程1发来的消息,然后再接收子进程2发来的消息。

2)实现管道的互斥使用,当一个子进程正在对管道进行写操作时,另一子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对

管道的锁定。

3)实现父子进程的同步,当子进程把数据写入管道后,便去睡眠等待;当父进程试图从一空管道中读取数据时,也应等待,直到子进程将数据写入管道后,才将其唤醒。

3.相关的系统调用

1)fork() 用于创建一个子进程。

格式:int fork();

返回值:在子进程中返回0;在父进程中返回所创建的子进程的ID值;当返回-1时,创建失败。

2)wait() 常用来控制父进程与子进程的同步。

在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,父进程从wait()返回继续执行原来的程序。

返回值:大于0时,为子进程的ID值;等于-1时,调用失败。

3)exit() 是进程结束时最常调用的。

格式:void exit( int status); 其中,status为进程结束状态。

4)pipe() 用于创建一个管道

格式:pipe(int fd);

其中fd是一个由两个数组元素fd[0]和fd[1]组成的整型数组,fd[0]是管道的读端口,用

于从管道读出数据,fd[1] 是管道的写端口,用于向管道写入数据。

返回值:0 调用成功;-1 调用失败。

5)sleep() 调用进程睡眠若干时间,之后唤醒。

格式:sleep(int t); 其中t为睡眠时间。

6)lockf() 用于对互斥资源加锁和解锁。在本实验中,该调用的格式为:

lockf(fd[1],1,0);/* 表示对管道的写入端口加锁。

lockf(fd[1],0,0);/* 表示对管道的写入端口解锁。

7)write(fd[1],String,Length) 将字符串String的内容写入管道的写入口。

8)read(fd[0],String,Length) 从管道的读入口读出信息放入字符串String中。

4.程序流程

父进程:

1)创建管道;

2)创建子进程1;

3)创建子进程2;

4)等待从管道中读出子进程1写入的数据,并显示在屏幕上;

5)等待从管道中读出子进程2写入的数据,并显示在屏幕上;

6)退出。

子进程:

1)将管道的写入口加锁;

2)将信息“Child process n is sending message!”输入到变量OutPipe中,n=1,2;

3)将OutPipe中信息写入管道;

4)睡眠等待父进程从管道读出数据;

5)将管道的写入口解锁;

6)退出。

5.程序流程图

开始

创建管道

创建子进程

创建成功?N

Y

父进程返回?

N

锁定管道写端写信息入管道睡眠等待父进程

开锁

撤销子进程P1Y

创建子进程P2

创建成功?

N

Y

父进程返回?

Y

管道中是否有

消息

Y

读取管道消息

N

放弃处理机

锁定管道写端

向管道写入消息

睡眠等待父进程

锁定管道写端

撤销子进程P2

结束

N

6.程序源代码

#include

#include #include

#include #include

#include

#include

#include

int main()

{

int i,r,P1,P2,fd[2];//fd[1]写入端,fd[0]读取端

char buf[50],s[50];

pipe(fd);

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

if(P1==0)

{

lockf(fd[1],1,0);

sprintf(buf,"child process P1 is sending messages! \n");

printf("child process P1! \n");

write(fd[1],buf,50);

sleep(5);

lockf(fd[1],0,0);

exit(0);

}

else

{

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

if(P2==0)

{

lockf(fd[1],1,0);

sprintf(buf,"child process P2 is sending messages! \n");

printf("child process P2! \n");

write(fd[1],buf,50);

sleep(5);

lockf(fd[1],0,0);

exit(0);

}

int pid;

pid=wait(0);

printf("%d\n",pid);

if(r=read(fd[0],s,50)==-1)

printf("can't read pipe! \n");

else

printf("%s\n",s);

pid=wait(0);

printf("%d\n",pid);

if(r=read(fd[0],s,50)==-1)

printf("can't read pipe! \n");

else

printf("%s\n",s);

exit(0);

}

}

7.运行结果及其说明

运行结果如下图所示。

8.回答以下问题

①指出父进程与两个子进程并发执行的顺序,并说明原因。

答:父进程先创建子进程P1,然后子进程P1执行,P1执行完以后父进程执行并创建子进程P2,接着P2执行,P2执行完以后返回父进程,程序结束。这是由进

程的同步机制决定的,因为只有子进程向管道写入信息后,父进程才能从管道

中读取消息;否则父进程调用wait()阻塞自己,将处理机交由子进程

②若不对管道加以互斥控制,会有什么后果?

答:对管道进行互斥控制,是为防止两个子进程对管道资源进行争夺而产生信息丢失或覆盖。如果不加控制,那么可能一个子进程写入的信息还没来得及被父

进程读出,另一个子进程又向管道写入信息,那么之前的进程写入的信息将被

覆盖,父进程也就读不到之前进程传递来的信息了。

③说明你是如何实现父子进程之间的同步的。

答:父进程读出之前确定管道中有数据,若管道中没有数据,则父进程调用wait()

函数阻塞自身。当子进程结束时,管道中已经有数据,父进程才执行。

子进程在写入之前要确定管道中的数据已经被父进程读出,否则不能写

入或者阻塞自己。可以通过进程间的互斥来间接的办到。因为子进程间的互斥,所以每个子进程在执行开始都对管道pipe 加锁,那么这样同时就只能有一个子进程向管道写入数据,并且子进程在向管道中写入数据后还要调用sleep()系统调用睡眠若干时间,那么这样就可以保证父进程能够从管道中读出数据。然后下一子进程才能写入。那么这样就保证了开头所说的子进程在写入之前要确定管道中的数据已经被父进程读出,否则不能写入或者阻塞自己。

移动通信实验报告

邮电大学 移动通信实验报告 班级: 专业: : 学号:

班序号: 一、实验目的 (2) 1、移动通信设备观察实验 (2) 2、网管操作实验 (3) 二、实验设备 (3) 三、实验容 (3) 1、TD_SCDMA系统认识 (3) 2、硬件认知 (3) 2.1移动通信设备 (3) 2.2 RNC设备认知 (4) 2.3 Node B设备(基站设备) (6) 2.4 LMT-B软件 (7) 2.5通过OMT创建基站 (8) 四、实验总结 (20) 一、实验目的 1、移动通信设备观察实验 1.1 RNC设备观察实验 a) 了解机柜结构 b) 了解RNC机框结构及单板布局 c) 了解RNC各种类型以及连接方式 1.2 基站设备硬件观察实验 a) 初步了解嵌入式通信设备组成 b) 认知大唐移动基站设备EMB5116的基本结构 c) 初步分析硬件功能设计

2、网管操作实验 a) 了解OMC系统的基本功能和操作 b) 掌握OMT如何创建基站 二、实验设备 TD‐SCDMA 移动通信设备一套(EMB5116基站+TDR3000+展示用板卡)电脑 三、实验容 1、TD_SCDMA系统认识 全称是时分同步的码分多址技术(英文对应Time Division-Synchronous Code Division Multiple Access)。 TD_SCDMA系统是时分双工的同步CDMA系统,它的设计参照了TDD(时分双工)在不成对的频带上的时域模式。运用TDSCDMA这一技术,通过灵活地改变上/下行链路的转换点就可以实现所有3G对称和非对称业务。合适的TDSCDMA时域操作模式可自行解决所有对称和非对称业务以及任何混合业务的上/下行链路资源分配的问题。 TD_SCDMA系统网络结构中的三个重要接口(Iu接口、Iub接口、Uu接口),认识了TD_SCDMA系统的物理层结构,熟悉了TD_SCDMA系统的六大关键技术以及其后续演进LTE。

Linux进程间通信(2)实验报告

实验六:Linux进程间通信(2)(4课时) 实验目的: 理解进程通信原理;掌握进程中信号量、共享内存、消息队列相关的函数的使用。实验原理: Linux下进程通信相关函数除上次实验所用的几个还有: 信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是前一节的共享内存方式的进程间通信。要调用的第一个函数是semget,用以获得一个信号量ID。 int semget(key_t key, int nsems, int flag); key是IPC结构的关键字,flag将来决定是创建新的信号量集合,还是引用一个现有的信号量集合。nsems是该集合中的信号量数。如果是创建新集合(一般在服务器中),则必须指定nsems;如果是引用一个现有的信号量集合(一般在客户机中)则将nsems指定为0。 semctl函数用来对信号量进行操作。 int semctl(int semid, int semnum, int cmd, union semun arg); 不同的操作是通过cmd参数来实现的,在头文件sem.h中定义了7种不同的操作,实际编程时可以参照使用。 semop函数自动执行信号量集合上的操作数组。 int semop(int semid, struct sembuf semoparray[], size_t nops); semoparray是一个指针,它指向一个信号量操作数组。nops规定该数组中操作的数量。 ftok原型如下: key_t ftok( char * fname, int id ) fname就是指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255)。 当成功执行的时候,一个key_t值将会被返回,否则-1 被返回。 共享内存 共享内存是运行在同一台机器上的进程间通信最快的方式,因为数据不需要在不同的进程间复制。通常由一个进程创建一块共享内存区,其余进程对这块内存区进行读写。首先要用的函数是shmget,它获得一个共享存储标识符。 #include #include #include int shmget(key_t key, int size, int flag); 当共享内存创建后,其余进程可以调用shmat()将其连接到自身的地址空间中。 void *shmat(int shmid, void *addr, int flag); shmid为shmget函数返回的共享存储标识符,addr和flag参数决定了以什么方式来确定连接的地址,函数的返回值即是该进程数据段所连接的实际地

数据通信原理实验报告

DONGFANG COLLEGE,FUJIAN AGRICULTURE AND FORESTRY UNIVERSITY 课程名称:数据通信原理 系别:计算机系 年级专业: 2010级电子信息工程 学号: 1050302103 姓名:廖少兵 任课教师:詹仕华成绩: 2012 年12 月25 日

实验项目列表 序号课程名称成绩指导教师 1 模拟信号源实验詹仕华 2 接收滤波器与功放实验詹仕华 3 基带信号的常见码型变换实验詹仕华 4 AMI/HDB3编译码实验詹仕华 5 FSK(ASK)调制解调实验詹仕华6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

实验一模拟信号源实验 实验室名称:_______ 实验设备号:实验时间: 成绩: 模拟信号源实验 1、实验目的和要求 1.了解本模块中函数信号产生芯片的技术参数; 2.了解本模块在后续实验系统中的作用; 3.熟悉本模块产生的几种模拟信号的波形和参数调节方法。 2、实验原理 本模块主要功能是产生频率、幅度连续可调的正弦波、三角波、方波等函数信号(非同步函数信号),另外还提供与系统主时钟同源的2KHZ正弦波信号(同步正弦波信号)和模拟电话接口。在实验系统中,可利用它定性地观察通信话路的频率特性,同时用做PAM、PCM、ADPCM、CVSD( M)等实验的音频信号源。本模块位于底板的左边。 3、主要仪器设备 1.非同步函数信号、同步正弦波信号、模拟电话输入电路 2.时钟与基带数据发生模块,位号:G 3.频率计1台 4.20M双踪示波器1台 5.小电话单机1部 1.非同步函数信号(实物图片如下)

Linux进程通信实验报告

Linux进程通信实验报告 一、实验目的和要求 1.进一步了解对进程控制的系统调用方法。 2.通过进程通信设计达到了解UNIX或Linux系统中进程通信的基本原理。 二、实验内容和原理 1.实验编程,编写程序实现进程的管道通信(设定程序名为pipe.c)。使 用系统调用pipe()建立一条管道线。而父进程从则从管道中读出来自 于两个子进程的信息,显示在屏幕上。要求父进程先接受子进程P1 发来的消息,然后再接受子进程P2发来的消息。 2.可选实验,编制一段程序,使其实现进程的软中断通信(设定程序名为 softint.c)。使用系统调用fork()创建两个子进程,再用系统调用 signal()让父进程捕捉键盘上来的中断信号(即按Del键),当父进程 接受这两个软中断的其中一个后,父进程用系统调用kill()向两个子 进程分别发送整数值为16和17的软中断信号,子进程获得对应软中 断信号后分别输出相应信息后终止。 三、实验环境 一台安装了Red Hat Linux 9操作系统的计算机。 四、实验操作方法和步骤 进入Linux操作系统,利用vi编辑器将程序源代码输入并保存好,然后 打开终端对程序进行编译运行。 五、实验中遇到的问题及解决 六、实验结果及分析 基本实验 可选实验

七、源代码 Pipe.c #include"stdio.h" #include"unistd.h" main(){ int i,j,fd[2]; char S[100]; pipe(fd); if(i=fork==0){ sprintf(S,"child process 1 is sending a message \n"); write(fd[1],S,50); sleep(3); return; } if(j=fork()==0){ sprintf(S,"child process 2 is sending a message \n"); write(fd[1],S,50); sleep(3); return;

移动应用开发-实验报告

实验一Android开发基础 实验时间:2018.3.16 实验地点:X501 一、实验目的 1. 掌握Android开发环境的搭建; 2. 了解Android SDK的安装、配置、使用; 3. 熟悉开发工具Android Studio的使用; 4. 了解创建项目并熟悉文件目录结构; 二、实验学时 2学时/次,共2学时 三、实验环境 Android Studio;JDK1.7;PC机 四、实验容和要求 1.Android Studio安装 (1) Android Studio的下载与安装 前提准备工作:安装JDK 并配置JDK 环境变量。 请使用传统的JAVA_HOME 环境变量名称。很多人会被提醒JVM 或者JDK 查找失败,几乎都是因为JDK 版本或者没有使用JAVA_HOME 这个环境变量名称的原因。 ①Android Studio可以从中文社区进行下载,网址为https://www.sodocs.net/doc/384081248.html,/。在浏览器中打开该网址,如图1-1所示。 图1-1 Android Studio官方 ②选择合适的平台,进行下载,如图1-2所示。

图1-2 Java platform(JDK) ③安装之前,要确定JDK版本必须是1.7或以上,否则安装之后会报错。双击Android Studio的安装文件,按照提示一步步安装,具体参考教材。不出意外的话,看到图1-3所示的界面,说明Android Studio已经安装成功了。 图1-3 Android Studio已经安装成功 2. 配置Android Studio 安装Android Studio完成之后,运行Android Studio。每一次安装,都会显示图1-4所示的这个界面,用以选择导入Android Studio的配置文件。 第一个选项:使用以前版本的配置文件夹。 第二个选项:导入某一个目录下的配置文件夹。 第三个选项:不导入配置文件夹。 如果你以前使用过Android Studio,可以选择到以前的版本。如果你是第一次使用,可以选择第三项。 图1-4 导入Android Studio配置文件

杭电通信系统课程设计报告实验报告

通信系统课程设计实验报告 XX:田昕煜 学号:13081405 班级:通信四班 班级号:13083414 基于FSK调制的PC机通信电路设计

一、目的、容与要求 目的: 掌握用FSK调制和解调实现数据通信的方法,掌握FSK调制和解调电路中相关模块的设计方法。初步体验从事通信产品研发的过程. 课程设计任务:设计并制作能实现全双工FSK调制解调器电路,掌握用Orcad Pspice、Protel99se进行系统设计及电路仿真。 要求:合理设计各个电路,尽量使仿真时的频率响应和其他参数达到设计要求。尽量选择符合标称值的元器件构成电路,正确完成电路调试。 二、总体方案设计 信号调制过程如下: 调制数据由信号发生器产生(电平为TTL,波特率不超过9600Baud),送入电平/幅度调整电路完成电平的变换,再经过锁相环(CD4046),产生两个频率信号分别为30kHz和40kHz(发“1”时产生30kHz方波,发“0”时产生40kHz方波),再经过低通滤波器2,变成平滑的正弦波,最后通过线圈实现单端到差分信号的转换。

信号的解调过程如下: 首先经过带通滤波器1,滤除带外噪声,实现信号的提取。在本设计中FSK 信号的解调方式是过零检测法。所以还要经过比较器使正弦信号变成方波,再经过微分、整流电路和低通滤波器1实现信号的解调,最后经过比较器使解调信号成为TTL电平。在示波器上会看到接收数据和发送数据是一致的。 各主要电路模块作用: 电平/幅度调整电路:完成TTL电平到VCO控制电压的调整; VCO电路:在控制电压作用下,产生30KHz和40KHz方波; 低通2:把30KHz、40KHz方波滤成正弦波; 线圈:完成单端信号和差分信号的相互转换; 带通1:对带外信号抑制,完成带信号的提取; 限放电路:正弦波整形成方波,同时保留了过零点的信息; 微分、整流、脉冲形成电路:完成信号过零点的提取; 低通1:提取基带信号,实现初步解调; 比较器:把初步解调后的信号转换成TTL电平 三、单元电路设计原理与仿真分析 (1)带通1(4阶带通)-- 接收滤波器(对带外信号抑制,完成带信号的提取) 要求通带:26KHz—46KHz,通带波动3dB; 阻带截止频率:fc=75KHz时,要求衰减大于10dB。经分析,二级四阶巴特沃斯带通滤波器来提取信号。 具体数值和电路见图1仿真结果见图2。

移动通信实验报告

实验一 m序列产生及特性分析实验 一、实验目得 1.了解m序列得性质与特点; 2。熟悉m序列得产生方法; 3.了解m序列得DSP或CPLD实现方法。 二、实验内容 1。熟悉m序列得产生方法; 2.测试m序列得波形; 三、实验原理 m序列就是最长线性反馈移存器序列得简称,就是伪随机序列得一种。它就是由带线性反馈得移存器产生得周期最长得一种序列。 m序列在一定得周期内具有自相关特性.它得自相关特性与白噪声得自相关特性相似。虽然它就是预先可知得,但性质上与随机序列具有相同得性质.比如:序列中“0”码与“1”码等抵及具有单峰自相关函数特性等。 五、实验步骤 1.观测现有得m序列。 打开移动实验箱电源,等待实验箱初始化完成.先按下“菜单”键,再按下数字键“1”,选择“一、伪随机序列”,出现得界面如下所示: ?再按下数字键“1"选择“1m序列产生”,则产生一个周期为15得m序列。 2。在测试点TP201测试输出得时钟,在测试点TP202测试输出得m序列。 1)在TP201观测时钟输出,在TP202观测产生得m序列波形。

图1-1 数据波形图

实验二 WALSH序列产生及特性分析实验 一.实验目得 1。了解Walsh序列得性质与特点; 2。熟悉Walsh序列得产生方法; 3.了解Walsh序列得DSP实现方法。 二.实验内容 1.熟悉Walsh序列得产生方法; 2.测试Walsh序列得波形; 三。实验原理 Walsh序列得基本概念 Walsh序列就是正交得扩频序列,就是根据Walsh函数集而产生.Walsh函数得取值为+1或者—1。图1-3—1展示了一个典型得8阶Walsh函数得波形W1。n阶Walsh函数表明在Walsh函数得周期T内,由n段Walsh函数组成.n阶得Walsh函数集有n个不同得Walsh函数,根据过零得次数,记为W0、W1、W2等等。 t 图2-1 Walsh函数 Walsh函数集得特点就是正交与归一化,正交就是同阶不同得Walsh函数相乘,在指定得区间积分,其结果为0;归一化就是两个相同得Walsh函数相乘,在指定得区间上积分,其平均值为1。 五、实验步骤 1。观测现有得Walsh序列波形 打开移动实验箱电源,等待实验箱初始化完成. 先按下“菜单"键,再按下数字键“1”,选择“一、伪随机序列”,出现得界面如下所示:

网络与数据通信实验报告

网络与数据通信实验报告 指导老师:李艳 姓名:胡嘉懿(1110200302) 周敏(1110200311)

实验1 网络协议分析Ethereal 1.ARP帧解析 ·帧1(线路上传输60字节,俘获60字节) 到达时间:2004年5月7日00:35:13.802398000 与上一帧的时间差:0.000000000秒 与第一帧的时间差:0.000000000秒 帧序号:1 数据包长度:60字节 俘获长度:60字节 ·以太网Ⅱ,源地址:00:0d:87:f8:4c:f9,目的地址:ff:ff:ff:ff:ff:ff(MAC地址) 目的地址:ff:ff:ff:ff:ff:ff(广播) 源地址:00:0d:87:f8:4c:f9(192.168.0.44) 类型:地址转换协议ARP(Ox0806) 尾部:000000000

·地址转换协议 ·硬件类型(Hardware type):16位,定义ARP实现在何种类型的网络上,以太网的硬件类型值为Ox0001,图中为以太网Ox0001 ·协议类型(Protocol type):16位,定义使用ARP/RARP的协议类型,IPv4类型值为Ox0800,图中为IP Ox0800 ·硬件地址长度(Hardware size):1字节,以字节为单位定义物理地址的长度,图中为6 ·协议地址长度(Protocol size):1字节,以字节为单位定义协议地址的长度,图中为4 ·操作类型(Opcode):16位,定义报文类型,1为ARP请求,2为ARP应答,3为RARP 请求,4为RARP应答,图中为请求(Ox0001) ·发送方MAC地址(Sender MAC address):6字节,发送方的MAC地址,图中为00:0d:87:f8:4c:f9 ·发送方IP地址(Sender IP address):4字节,发送方的IP地址,RARP请求中不填此字段图中为192.168.0.44 ·目的MAC地址(Target MAC address):6字节,ARP请求中不填此字段(待解析),图中为00:00:00:00:00:00 ·目的协议地址(Target IP address):4字节,长度取决于协议地址长度,长度一共28字节,图中为192.168.80.1

进程间通信实验报告

进程间通信实验报告 班级:10网工三班学生姓名:谢昊天学号:1215134046 实验目的和要求: Linux系统的进程通信机构 (IPC) 允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的消息通讯机制及信息量机制。 实验内容与分析设计: (1)消息的创建,发送和接收。 ①使用系统调用msgget (), msgsnd (), msgrev (), 及msgctl () 编制一长度为1k 的消息的发送和接收程序。 ②观察上面的程序,说明控制消息队列系统调用msgctl () 在此起什么作用? (2)共享存储区的创建、附接和段接。 使用系统调用shmget(),shmat(),sgmdt(),shmctl(),编制一个与上述功能相同的程序。(3)比较上述(1),(2)两种消息通信机制中数据传输的时间。 实验步骤与调试过程: 1.消息的创建,发送和接收: (1)先后通过fork( )两个子进程,SERVER和CLIENT进行通信。 (2)在SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束信号,取消该队列,并退出SERVER 。SERVER每接收到一个消息后显示一句“(server)received”。 (3)CLIENT端使用Key为75的消息队列,先后发送类型从10到1的消息,然后退出。最后的一个消息,既是 SERVER端需要的结束信号。CLIENT每发送一条消息后显示一句“(client)sent”。 (4)父进程在 SERVER和 CLIENT均退出后结束。 2.共享存储区的创建,附接和断接: (1)先后通过fork( )两个子进程,SERVER和CLIENT进行通信。 (2)SERVER端建立一个KEY为75的共享区,并将第一个字节置为-1。作为数据空的标志.等待其他进程发来的消息.当该字节的值发生变化时,表示收到了该消息,进行处理.然后再次把它的值设为-1.如果遇到的值为0,则视为结束信号,取消该队列,并退出SERVER.SERVER 每接收到一次数据后显示”(server)received”. (3)CLIENT端建立一个为75的共享区,当共享取得第一个字节为-1时, Server端空闲,可发送请求. CLIENT 随即填入9到0.期间等待Server端再次空闲.进行完这些操作后, CLIENT退出. CLIENT每发送一次数据后显示”(client)sent”. (4)父进程在SERVER和CLIENT均退出后结束。 实验结果: 1.消息的创建,发送和接收: 由 Client 发送两条消息,然后Server接收一条消息。此后Client Server交替发送和接收消息。最后一次接收两条消息。Client 和Server 分别发送和接收了10条消息。message 的传送和控制并不保证完全同步,当一个程序不再激活状态的时候,它完全可能继续睡眠,造成上面现象。在多次send message 后才 receive message.这一点有助于理解消息转送的实现机理。

通信综合实训系统实验报告

. 通信综合实训系统实验 (程控交换系统实验) 学生姓名 学号 专业班级通信工程班 指导老师 年月日

实验1 局内呼叫处理实验 一、实验目的 1.通过对模拟用户的呼叫追踪,加深对程控交换机呼叫处理过程的理解; 2.掌握程控交换机配置数据的意义及原理; 3.根据设计要求,完成对程控交换机本局数据的配置。 二、实验内容 1.学习ZXJ10程控交换机本局数据配置方法; 2.模拟用户动态跟踪,深入分析交换机呼叫流程; 3.按照实验指导书的步骤配置本局数据,电话号码7000000~7000023分配到ASLC板 卡的0~23端口,并用7000000拨打7000001电话,按照实验指导书方法创建模拟用户呼叫跟踪,观察呼叫动态迁移,理解单模块呼叫流程。 4.本局数据配置需要配置如下: 局信息配置 局容量数据配置 交换局配置 物理配置 号码管理、号码分析 三、实验仪器 程控交换机1套 维护终端若干 电话机若干 四、实验步骤 (一)、启动后台维护控制中心 启动程控交换机网管终端计算机,点击桌面快捷方式的,启动后的维护控制中心如下图2-1(利用众友开发软件CCTS可省略该步骤): (二)、启动操作维护台 选中后台维护系统控制中心,单击右键,选中【启动操作维护平台】,出现如下的对话框,输入操作员名【SYSTEM】,口令为空,单击【确定】后,将会登陆操作维护系统。

(三)、告警局配置 打开“系统维护(C)”----“告警局配置(B)”,点击“局信息配置(B)”后,弹出如下界面。 输入该局的区号532,局号1,然后点击【写库】。 (四)、局容量数据配置 打开【基本数据管理】-【局容量数据配置】,点击后弹出如下操作界面(分别进行全局容量、各模块容量进行规划设置),点击【全局规划】,出现如下的对话框. 点击【全部使用建议值】,当前值自动填上系统默认的数值,点击【确定】后返回容量规划界面,点击【增加】, 模块号2,MP内存128,普通外围、远端交换模块,填写完,点击【全部使用建议值】。 (五)、交换局配置 在后台维护系统打开[数据管理→基本数据管理→交换局配置]弹出如下的对话框,按照图示,只填写【本交换局】-【交换局配置数据】,点击设置。 (六)、物理配置 在后台维护系统打开[数据管理→基本数据管理→物理配置]:

实验3.2无名管道通信

计算机操作系统实训教程实验报告 姓名王学杰专业计算机应用技术班级1362班 课程操作系统实验项目无名管道通信 【实验目的】 1了解管道通信机制的基本原理 2 掌握父子进程使用无名管道通信的方法 【实验要求】 编写程序实现多个进程基于无名管道进行通讯。用系统调用pipe()建立一个无名管道,两个进程p1和p2分别向管道输出一句话 【实验内容】 #include #include #include #include #include #include #include main() { int fd[2],p1,p2,i; char receive[50]; char send1[50]="My name is wangxuejie"; char send2[50]="My id is 1308610203";

pipe(fd); //建立一个无名管道 p1=fork(); if(p1==0) { lockf(fd[1],1,0); write(fd[1],send1,strlen(send1)); //子进程1写入 lockf(fd[1],0,0); sleep(1); } else { wait(0); read(fd[0],receive,50); printf("parent read from child1:%s\n",receive); p2=fork(); if(p2==0) { lockf(fd[1],1,0); write(fd[1],send2,strlen(send2)); //子进程2写入

移动通信 GSM实验报告

深圳大学实验报告 课程名称:移动通信 实验项目名称GSM模块配置/设备呼叫/设备短信收发学院:信息工程 专业:通信工程 指导教师: 报告人:学号:班级: 1 实验时间: 实验报告提交时间: 教务处制

实验目的与要求: GSM模块配置1. 了解GSM模块的特点; 2. 了解配置GSM模块的AT命令。GSM 设备短信收发1.了解GSM网络中短消息业务的组成结构;2. 了解GSM网络中短消息收发的过程; 3. 熟悉短消息的数据格式; 4. 熟悉GSM模块进行短信收发的AT命令。 GSM 设备呼叫1.了解GSM网络中话音呼叫的过程; 2. 熟悉用本移动实验箱作为主叫和被叫用户进行语音呼叫;3.熟悉GSM模块进行语音呼叫的AT命令 实验原理:

实验过程及内容: GSM模块配置:1、GSM模块测试(无需插入SIM卡)2、GSM通信速率设置(例:修改GSM模块速率为9600bps)3、GSM模块命令返回结果码数字或字符模式4、GSM模块命令结果码控制5、GSM模块命令回显模式6、保存设置7、版本信息GSM设备短信收发:1.收发短信的准备(1)在PC机上收发短信(2)设置GSM 模块命令返回结果码为字符模式;(3)设置短消息中心(4)设置短信存储区域2.用AT命令控制GSM接收短信过程如下(1)GSM模块接收短消息(2)用TEXT模式读取短消息(3)用PDU模式读取短消息(4)删除短消息3.用AT命令控制GSM 发送短信过程如下(1)用TEXT模式发送英文短消息(2)用PDU模式发送中文短消息4.用配套软件发送短信(中文,英文,中英文混合) GSM设备呼叫:(一)在移动实验箱上进行呼叫(二)在PC机上进行呼叫(1)主叫呼叫和挂机实验:(2)被叫接续实验:(3)GSM模块作为被叫,可以进行摘机和挂机

进程同步实验报告

实验三进程的同步 一、实验目的 1、了解进程同步和互斥的概念及实现方法; 2、更深一步的了解fork()的系统调用方式。 二、实验内容 1、预习操作系统进程同步的概念及实现方法。 2、编写一段源程序,用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。程序的输出是什么?分析原因。 3、阅读模拟火车站售票系统和实现进程的管道通信源代码,查阅有关进程创建、进程互斥、进程同步的系统功能调用或API,简要解释例程中用到的系统功能或API的用法,并编辑、编译、运行程序,记录程序的运行结果,尝试给出合理的解释。 4、(选做)修改问题2的代码,使得父子按顺序显示字符“a”;“b”、“c”编辑、编译、运行。记录程序运行结果。 三、设计思想 1、程序框架 (1)创建两个子进程:(2)售票系统:

(3)管道通信: 先创建子进程,然后对内容加锁,将输出语句存入缓存,并让子进程自己进入睡眠,等待别的进程将其唤醒,最后解锁;第二个子进程也执行这样的过程。父进程等待子进程后读内容并输出。 (4)修改程序(1):在子进程的输出语句前加上sleep()语句,即等待父进程执行完以后再输出。 2、用到的文件系统调用函数 (1)创建两个子进程:fork() (2)售票系统:DWORD WINAPI Fun1Proc(LPVOID lpPartameter); CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); CloseHandle(hThread1); (HANDLE)CreateMutex(NULL,FALSE,NULL); Sleep(4000)(sleep调用进程进入睡眠状态(封锁), 直到被唤醒); WaitForSingleObject(hMutex,INFINITE); ReleaseMutex(hMutex); (3)管道通信:pipe(fd),fd: int fd[2],其中: fd[0] 、fd[1]文件描述符(读、写); lockf( fd,function,byte)(fd: 文件描述符;function: 1: 锁定 0:解锁;byte: 锁定的字节数,0: 从当前位置到文件尾); write(fd,buf,byte)、read(fd,buf,byte) (fd: 文件描述符;buf : 信息传送的源(目标)地址;byte: 传送的字节数); sleep(5); exit(0); read(fd[0],s,50) (4)修改程序(1):fork(); sleep(); 四、调试过程 1、测试数据设计 (1)创建两个子进程:

数据通信实验报告

电子科技大学 实验报告 实验一 NS2的基础使用 NS2是一种提供虚拟环境进行网络模拟仿真,能验证网络性能的正确性和进行相关性能测试的软件。 一、实验环境: Ubuntu 12.04/kernel 3.5 GCC 4.6.3 NS-2.33 二、网络拓扑: 实验共有6个节点,每个节点的连接情况如图所示。其中节点N0、N2和节点N1、N2连接,N3、N4和N4、N5连接,N2和N3连接。从0号节点到2号节点,带宽为2Mb,延时为10ms。 三、实践步骤: 切换到用户根目录下cd ~ 建立自己的文件夹mkdir your_document_name 进入刚刚新建的文件夹cd your_document_name 新建一个TCL 脚本文件gedit your_TCL_file_name.tcl #Here is the beginning of this code file set val(stop) 5.0 ;# 模拟器结束时间 #新建一个NS 模拟对象 set ns [new Simulator] #打开NS 追踪文件 set tracefile [open out.tr w] $ns trace-all $tracefile

#打开NAM 追踪文件 set namfile [open out.nam w] $ns namtrace-all $namfile #新建6 个节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] #建立节点之间的链路,格式解释如下 #duplex-link 双向链路可选选项(duplex-link,simple-link 单向链路) #$n0 $n2 表明从0 号节点到2 号节点 #2.0Mb 申明链路传输速率,可使用Mb,Kb,b #10ms 申明链路传输延迟 #DropTail 队列类型 $ns duplex-link $n0 $n2 2.0Mb 10ms DropTail #申明链路队列长度 $ns queue-limit $n0 $n2 10 $ns duplex-link $n1 $n2 2.0Mb 10ms DropTail $ns queue-limit $n1 $n2 10 $ns duplex-link $n4 $n3 2.0Mb 10ms DropTail $ns queue-limit $n4 $n3 10 $ns duplex-link $n3 $n2 1.0Mb 20ms DropTail $ns queue-limit $n3 $n2 10 $ns duplex-link $n3 $n5 2.0Mb 10ms DropTail $ns queue-limit $n3 $n5 10 #为NAM 创建节点位置描述,以第一个为例,2 号节点在0 号节点的右下方 $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n4 $n3 orient left-down $ns duplex-link-op $n3 $n2 orient left $ns duplex-link-op $n3 $n5 orient right-down #新建一个UDP 连接 set udp0 [new Agent/UDP] #将0 号节点Agent/UDP 绑定,以下类似 $ns attach-agent $n0 $udp0 set null2 [new Agent/Null] $ns attach-agent $n4 $null2 #将Agent/UDP 及Agent/Null 节点进行连接 $ns connect $udp0 $null2 #设置Agent/UDP 包大小

进程的管道通信

计算机操作系统实验第六次实验报告 学院:计算机科学与信息学院专业:通信工程班级:081姓名学号 实验 组 实验时间2010年11月17日指导教师成绩 实验项目名称进程的管道通信实 验目的 1、了解什么是管道; 2、熟悉UNIX/LINUX支持的管道通信方式。 实 验要求 1、了解管道的概念和管道的类型; 2、熟悉UNIX/LINUX支持的管道通信方式。 实 验 原 理 在管道通信时系统会调用:pipe( )建立一无名管道;read( );write( ) 。 实 验 仪 器 PC机或工作站一台; RedHat9.0操作系统;

实验步骤一、什么是管道 UNIX系统在OS的发展上,最重要的贡献之一便是该系统首创了管道(pipe)。这也是UNIX系统的一大特色。 所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。 句柄fd[0] 句柄fd[1] 读出端 写入端 二、管道的类型: 1、有名管道 一个可以在文件系统中长期存在的、具有路径名的文件。用系统调用mknod( )建立。它克服无名管道使用上的局限性,可让更多的进程也能利用管道进行通信。因而其它进程可以知道它的存在,并能利用路径名来访问该文件。对有名管道的访问方式与访问其他文件一样,需先用open( )打开。 2、无名管道 一个临时文件。利用pipe( )建立起来的无名文件(无路径名)。只用该系统调用所返回的文件描述符来标识该文件,故只有调用pipe( )的进程及其子孙进程才能识别此文件描述符,才能利用该文件(管道)进行通信。当这些进程不再使用此管道时,核心收回其索引结点。 二种管道的读写方式是相同的,本文只讲无名管道。 3、pipe文件的建立 分配磁盘和内存索引结点、为读进程分配文件表项、为写进程分配文件表项、分配用户文件描述符 4、读/写进程互斥 内核为地址设置一个读指针和一个写指针,按先进先出顺序读、写。 为使读、写进程互斥地访问pipe文件,需使各进程互斥地访问pipe文件索引结点中的直接地址项。因此,每次进程在访问pipe文件前,都需检查该索引文件是否已被上锁。若是,进程便睡眠等待,否则,将其上锁,进行读/写。操作结束后解锁,并唤醒因该索引结点上锁而睡眠的进程。 三、所涉及的系统调用 1、pipe( ) 建立一无名管道。 系统调用格式 pipe(filedes) 参数定义 int pipe(filedes); int filedes[2]; 其中,filedes[1]是写入端,filedes[0]是读出端。 该函数使用头文件如下: #include #inlcude #include 2、read( ) 系统调用格式

移动通信实验报告

实验一GSM通信系统实验(全球数字移动通信系统) 一、实验目的 通过本实验将正交调制及解调的单元实验串起来,让学生建立起GSM通信系统的概念,了解GSM通信系统的组成及特性。 二、实验内容 1、搭建GSM数据通信系统。 2、观察GSM通信系统各部分信号。 三、基本原理 由于GSM是一个全数字系统,话音和不同速率数据的传输都要进行数字化处理。为了将源数据转换为最终信号并通过无线电波发射出去,需要经过几个连续的过程。相反,在接收端需要经过一系列的反过程来重现原始数据。下面我们主要针对数据的传输过程进行描述。 信源端的主要工作有 1、信道编码 信道编码用于改善传输质量,克服各种干扰因素对信号产生的不良影响,但它是以增加比特降低信息量为代价的。 信道编码的基本原理是在原始数据上附加一些冗余比特信息,增加的这些比特是通过某种约定从圆熟数据中经计算产生的,接收端的解码过程利用这些冗余的比特来检测误码并尽可能的纠正误码。如果收到的数据经过同样的计算所得的冗余比特同收到的不一样时,我们就可以确定传输有误。根据传输模式不同,在无线传输中使用了不同的码型。 GSM使用的编码方式主要有块卷积码、纠错循环码、奇偶码。块卷积码主要用于纠错,当解调器采用最大似然估计方法时,可以产生十分有效的纠错结果,纠错循环码主要用于检测和纠正成组出现的误码,通常和块卷积码混合使用,用于捕捉和纠正遗漏的组误差。奇偶码是一种普遍使用的最简单的检测误码的方法。 2、交织 在移动通信中这种变参的信道上,比特差错通常是成串发生的。这是由于持续较长的深衰落谷点会影响到相继一串的比特。但是,信道编码仅在检测和校正单个差错和不太长差错

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

武汉工程大学计算机科学与工程学院 《操作系统》实验报告[Ⅰ]

一、实验目的 创建进程,实现进程消息通信和共享内存通信,了解进程的创建、退出和获取进程信。了解什么是映像文件、管道通信及其作用,掌握通过内存映像文件和管道技术实现进程通信。 二、实验内容 本例用三种方法实现进程通信,仅用于示例目的,没有进行功能优化。 1、创建进程A和B后,在进程A中输入一些字符,点“利用 SendMessage发送消息”按钮可将消息发到进程B。 2、在进程A中输入一些字符,点“写数据到内存映像文件”按钮, 然后在进程B中点“从内存映像文件读数据”按钮可收到消息。其中在点“写数据到内存映像文件”时,要求创建映像文件,B进程在印象文件中读取数据。 3、先在进程B中点“创建管道并接收数据”按钮,然后在进程A 中输入一些字符,点“写数据到管道文件”按钮可将消息发到进程B。管道是连接读/写进程使他们进行通信的一个共享文件,目的是更好地实现进程间的通信。 三、实验思想 这次试验最主要的内容和核心思想就是学会创建进程并实现进程间的简单通信、创建映像文件和创建管道文件来通信,后两者是实现进程通信的高级通信机制中的两种。. 创建一个程序A和程序B,其中程序A和B各有一个主窗体,A主窗体上要求可以实现创建进程B(即调用函数B)、结束进程B、关闭进程A、向进程B发送数据、创建映像文件、创建管道文件等功能,进程B要求有从映像文件读取数据、创建管道并接收数据、结束进程B功能。最终让A、B进程相互通信。

四、设计分析: 首先设得设计A、B两个程序的操作界面,然后编写各个功能模块。对于A 程序窗体,在“利用SendMessage发送消息”按钮的消息响应函数中,主要是利用Windows API函数CWnd::FindWindow来找到接收消息的窗体,即进程B,找到进程B后,利用这个函数返回的窗体指针的SendMessage函数来发送消息。在“写数据到内存印象文件”按钮的消息响应函数中,主要是利用函数CreateFileMapping来创建一个印象文件,这个函数返回的是这个印象文件的句柄,然后将这个句柄和要发送的消息字符串传递到函数sprintf中,就可以所要发送的消息写入印象文件,在B程序窗体中有个“从内存印象文件读数据”按钮,在这个按钮的消息响应函数中读取父进程所创建的印象文件中的数据就可以实现通信了。在B程序窗体按钮“写数据到管道文件”的消息响应函数中,不能直接将要发送的消息发送到管道文件,因为管道必须先由子进程通过函数CreateNamedPipe创建,只有待子进程创建好管道后父进程才能根据管道创建管道文件,将消息写入管道文件并及时发送给子进程。而且这个管道只能使用一次,即每次发送完消息后那个管道不能在使用了,必须再由子进程创建一个管道,A 进程才能再次创建管道文件并向其中写入消息。这个程序也不一定要MFC实现,还可以用其他的技术和语言实现,比如说Java、VB等,外表构架可以不一样,但核心技术都是一样的,只是不同的调用形式和调用方法,比如说在VB中,实现进程间的一般通信就是使用动态数据交换DDE,实现起来就比较简单,但是要创建映像文件和管道文件就比较繁琐,可以根据不同的需求采用不同的语言。 五、程序部分源代码: 1.“利用SendMessage发送消息”按钮中的主要代码 //找到接收消息的窗口(窗口名为Receiver) CString str="进程B"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) { COPYDATASTRUCT buf; char * s=new char[m_Msg1.GetLength()]; //m_Msg1为CString类型的变量 s=m_Msg1.GetBuffer(0);

无线传感器数据通信实验报告

实验二:无线传感器数据通信实验 一、实验目的: 在无线传感器节点的单片机驱动代码的基础上,编写无线通信程序,实现多个传感器节点之间的双向数据传输。 二、实验原理: 温湿度传感器和单片机采用的是类似IIC的串行通信,和单片机相连如图1-8所示 VDD和GND是传感器供电引脚。 SCK是时钟引脚,在通信这个过程中,SCK信号都是有单片机控制的。 DATA是数据线,和单片机IO口相连。用于向传感器发送指令和从单片机读走数据。数据在时钟的上升沿生效在时钟是高电平时保持不变。在时钟是低电平时准备数据。接口如图所示。 图1-8 温湿度接口 单片机先向传感器发送开始命令,然后开始通信,开始命令时序图如图所示。在SCK高电平时,将数据线拉低,在下一个时钟高电平期间,将数据线拉高。开始信号发送完毕。 图1-9 开始信号

再开始信号后是命令信号,命令信号包含3位地址位(只支持000)和5位命令位组成。传感器在接收到1byte数据时(即第八个时钟下降沿)将数据线拉低,表示数据正确接收。在九个下降沿被释放。命令如下表。 单片机在发送完命令信号后,等待温湿度传感器测量完成。传感器在转换完成后将数据线拉低。单片机产生时钟信号,从温湿度传感器读数据。数据包含2bytes的测量结果和1bytes的校验。单片机在收到每字节数据都要将数据线拉低给出应答信号。数据高位在前,低位在后。传感器在测量结束和通信完毕后自动进入休眠。具体操作见数据手册。时序图如图1-10所示。 图1-10 传感器工作时序图 8、 计算公式 温度计算公式:

湿度计算公式: 三、实验设备: ZIGBEE无线空气温湿度传感器一个、装有实验软件的计算机。 四、实验内容: 1、建立开发工程; 用MDK打开工程模板。 2、把similar_i2C.c和similar_i2C.h加入到工程。 将similar_i2c文件夹拷贝到工程模板目录中。 调用similar_i2C.c中函数,编写温度采集和湿度采集代码 在工程模板根目录下建立sht1xx_sensor,在里面新建sht1xx.c和sht1xx.h空文件,将c加入到工程,将h文件加入到工程设置中编写main()调用温度采集和湿度采集函数,并对原始数据进行处理。 在原有的程序的基础上,添加代码使程序能够根据数据计算出湿度,并显示出来。

相关主题