搜档网
当前位置:搜档网 › 基于管道的进程通信--操作系统实验报告2

基于管道的进程通信--操作系统实验报告2

基于管道的进程通信--操作系统实验报告2
基于管道的进程通信--操作系统实验报告2

内蒙古师大计算机与信息工程学院《操作系统》课程实验报告

实验二

实习题目

基于管道的进程通信

指导教师职称

学生姓名

学号

日期

结果分析(含实现中出错原因分析)思考问题:

(1)为什么要在父进程与子进程之间通过管道同步传递数据?不同步而任意写入或读取数据结果如何?

答:因为子进程将字符串写入管道向父进程发出信号,然后父进程从管道中读取字符串。不同步有可能不能读到字符串。

(2)若两个子进程通过管道分别向父进进程传递数据,则如何实现,同时注意查看执行结果,父进程读取各子进程传来的数据顺序如何?(注意各子进程间利用lockf()加锁互斥向管道写入数据)

答:两个子进程互斥的将信息写入管道。,子进程与父进程仍是同步

评分:

指导教师:

年月日

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参数决定了以什么方式来确定连接的地址,函数的返回值即是该进程数据段所连接的实际地

北邮 通信网实验报告

北京邮电大学实验报告通信网理论基础实验报告 学院:信息与通信工程学院 班级:2013211124 学号: 姓名:

实验一 ErlangB公式计算器 一实验内容 编写Erlang B公式的图形界面计算器,实现给定任意两个变量求解第三个变量的功能: 1)给定到达的呼叫量a和中继线的数目s,求解系统的时间阻塞率B; 2)给定系统的时间阻塞率的要求B和到达的呼叫量a,求解中继线的数目s,以实现网络规划; 3)给定系统的时间阻塞率要求B以及中继线的数目s,判断该系统能支持的最大的呼叫量a。 二实验描述 1 实验思路 使用MA TLAB GUITOOL设计图形界面,通过单选按钮确定计算的变量,同时通过可编辑文本框输入其他两个已知变量的值,对于不同的变量,通过调用相应的函数进行求解并显示最终的结果。 2程序界面 3流程图 4主要的函数 符号规定如下: b(Blocking):阻塞率; a(BHT):到达呼叫量;

s(Lines):中继线数量。 1)已知到达呼叫量a及中继线数量s求阻塞率b 使用迭代算法提高程序效率 B s,a= a?B s?1,a s+a?B(s?1,a) 代码如下: function b = ErlangB_b(a,s) b =1; for i =1:s b = a * b /(i + a * b); end end 2)已知到达呼叫量a及阻塞率b求中继线数量s 考虑到s为正整数,因此采用数值逼近的方法。采用循环的方式,在每次循环中增加s的值,同时调用B s,a函数计算阻塞率并与已知阻塞率比较,当本次误差小于上次误差时,结束循环,得到s值。 代码如下: function s = ErlangB_s(a,b) s =1; Bs = ErlangB_b(a,s); err = abs(b-Bs); err_s = err; while(err_s <= err) err = err_s; s = s +1; Bs = ErlangB_b(a,s); err_s = abs(b - Bs); end s = s -1; end 3)已知阻塞率b及中继线数量s求到达呼叫量a 考虑到a为有理数,因此采用变步长逼近的方法。采用循环的方式,在每次循环中增加a的值(步长为s/2),同时调用B s,a函数计算阻塞率并与已知阻塞率比较,当本次误差小于预设阈值时,结束循环,得到a值。 代码如下: function a = ErlangB_a(b,s)

线程实现邮箱通信-实验报告

进程通信实验报告 一、实验名称:进程通信 二、实验目的:掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。 三、实验原理:邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用send ()向对方邮箱发邮件 receive ()从自己邮箱取邮件, send ()和 receive ()的内部操作用户无需关心。因为邮箱在内存中实现,其空间有大小限制。其实send ()和 receive ()的内部实现主要还是要解决生产者与消费者问题。 四、实验内容:进程通信的邮箱方式由操作系统提供形如send ()和receive ()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式,然后使用该系统调用编写程序进行进程间的通信,要求程序运行结果可以直观地体现在界面上。在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式,运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息,比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同。 五、背景知识介绍: 1、sembuf 数据结构 struct sembuf { unsigned short int sem_num; //semaphore number short int sem_op; //semaphore operation short int sem_flg; //operation flag }; sem_num :操作信号在信号集中的编号,第一个信号的编号是0。 进程A 进程B 信箱A 信箱B Send() Send() receive() receive()

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;

北邮通信原理实验 基于SYSTEMVIEW通信原理实验报告

北京邮电大学实验报告 题目:基于SYSTEMVIEW通信原理实验报告 班级:2013211124 专业:信息工程 姓名:曹爽 成绩:

目录 实验一:抽样定理 (3) 一、实验目的 (3) 二、实验要求 (3) 三、实验原理 (3) 四、实验步骤和结果 (3) 五、实验总结和讨论 (9) 实验二:验证奈奎斯特第一准则 (10) 一、实验目的 (10) 二、实验要求 (10) 三、实验原理 (10) 四、实验步骤和结果 (10) 五、实验总结和讨论 (19) 实验三:16QAM的调制与解调 (20) 一、实验目的 (20) 二、实验要求 (20) 三、实验原理 (20) 四、实验步骤和结果 (21) 五、实验总结和讨论 (33) 心得体会和实验建议 (34)

实验一:抽样定理 一、 实验目的 1. 掌握抽样定理。 2. 通过时域频域波形分析系统性能。 二、 实验要求 改变抽样速率观察信号波形的变化。 三、 实验原理 一个频率限制在0f 的时间连续信号()m t ,如果以0 12S T f 的间隔进行等间隔均匀抽样,则()m t 将被所得到的抽样值完全还原确定。 四、 实验步骤和结果 1. 按照图1.4.1所示连接电路,其中三个信号源设置频率值分别为10Hz 、15Hz 、20Hz ,如图1.4.2所示。 图1.4.1 连接框图

图1.4.2 信号源设置,其余两个频率值设置分别为15和20 2.由于三个信号源最高频率为20Hz,根据奈奎斯特抽样定理,最低抽样频率应 为40Hz,才能恢复出原信号,所以设置抽样脉冲为40Hz,如图1.4.3。 图1.4.3 抽样脉冲设置 3.之后设置低通滤波器,设置数字低通滤波器为巴特沃斯滤波器(其他类型的 低通滤波器也可以,影响不大),截止频率设置为信号源最高频率值20Hz,如图1.4.4。

进程管理实验报告文档

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码: #include <> #include <> #include #include <> main() {

int p1,p2; p1=fork(); ockf()函数是将文件区域用作信号量(监视锁),或控制对锁定进程的访问(强制模式记录锁定)。试图访问已锁定资源的其他进程将返回错误或进入休态,直到资源解除锁定为止。而上面三个进程,不存在要同时进入同一组共享变量的临界区域的现象,因此输出和原来相同。 (3) a) 编写一段程序,使其实现进程的软中断通信。 要求:使用系统调用fork() 创建两个子进程,再用系统调用signal() 让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill() 向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Process 1 is killed by Parent! Child Process 2 is killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent Process is killed!

北邮微波实验报告整理版

北京邮电大学信息与通信工程学院 微波实验报告 班级:20112111xx 姓名:xxx 学号:20112103xx 指导老师:徐林娟 2014年6月

目录 实验二分支线匹配器 (1) 实验目的 (1) 实验原理 (1) 实验内容 (1) 实验步骤 (1) 单支节 (2) 双支节 (7) 实验三四分之一波长阻抗变换器 (12) 实验目的 (12) 实验原理 (12) 实验内容 (13) 实验步骤 (13) 纯电阻负载 (14) 复数负载 (19) 实验四功分器 (23) 实验目的 (23) 实验原理 (23) 实验内容 (24) 实验步骤 (24) 公分比为1.5 (25) 公分比为1(等功分器) (29) 心得体会 (32)

201121111x 班-xx 号-xx ——电磁场与微波技术实验报告 实验二 分支线匹配器 实验目的 1.熟悉支节匹配器的匹配原理 2.了解微带线的工作原理和实际应用 3.掌握Smith 图解法设计微带线匹配网络 实验原理 支节匹配器是在主传输线上并联适当的电纳(或者串联适当的电抗),用附加的反射来抵消主传输线上原来的反射波,以达到匹配的目的。 单支节匹配器,调谐时主要有两个可调参量:距离d 和由并联开路或短路短截线提供的电纳。匹配的基本思想是选择d ,使其在距离负载d 处向主线看去的导纳Y 是Y0+jB 形式。然后,此短截线的电纳选择为-jB ,根据该电纳值确定分支短截线的长度,这样就达到匹配条件。 双支节匹配器,通过增加一个支节,改进了单支节匹配器需要调节支节位置的不足,只需调节两个分支线长度,就能够达到匹配(但是双支节匹配不是对任意负载阻抗都能匹配的,即存在一个不能得到匹配的禁区)。 微带线是有介质εr (εr >1)和空气混合填充,基片上方是空气,导体带条和接地板之间是介质εr ,可以近似等效为均匀介质填充的传输线,等效介质电常数为 εe ,介于1和εr 之间,依赖于基片厚度H 和导体宽度W 。而微带线的特性阻抗与其等效介质电常数为εe 、基片厚度H 和导体宽度W 有关。 实验内容 已知:输入阻抗Z 75in ,负载阻抗Z (6435)l j ,特性阻抗0Z 75 ,介质基片 2.55r ,1H mm 。 假定负载在2GHz 时实现匹配,利用图解法设计微带线单支节和双支节匹配网络,假设双支节网络分支线与负载的距离114d ,两分支线之间的距离为21 8 d 。画出几种可能的电路图并且比较输入端反射系数幅度从1.8GHz 至2.2GHz 的变化。 实验步骤 1.根据已知计算出各参量,确定项目频率。 2.将归一化阻抗和负载阻抗所在位置分别标在Smith 圆上。 3.设计单枝节匹配网络,在图上确定分支线与负载的距离以及分支线的长度,根据给定的介质基片、特性阻抗和频率用TXLINE 计算微带线物理长度和宽度。此处应该注意电长度和实际长度的联系。 4.画出原理图,在用微带线画出基本的原理图时,注意还要把衬底添加到图中,将各部分的参数填入。注意微带 分支线处的不均匀性所引起的影响,选择适当的模型。 5.负载阻抗选择电阻和电感串联的形式,连接各端口,完成原理图,并且将项目的频率改为1.8—2.2GHz 。 6.添加矩形图,添加测量,点击分析,测量输入端的反射系数幅值。 7.同理设计双枝节匹配网络,重复上面的步骤。

进程间通信实验报告

进程间通信实验报告 班级: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.这一点有助于理解消息转送的实现机理。

北邮《现代通信技术》实验报告一

现代通信技术实验报告 班级: 2012211110 学号: 2012210299 姓名:未可知

在学习现代通信技术实验课上,老师提到的一个词“通信人”警醒了我,尽管当初填报志愿时选择了通信工程最终也如愿以偿,进入大三,身边的同学忙着保研、考研、出国、找工作,似乎大家都为了分数在不懈奋斗。作为一个北邮通信工程的大三学生,我也不断地问自己想要学习的是什么,找寻真正感兴趣的是什么,通信这个行业如此之大,我到底适合什么。本学期,现代通信技术这本书让我了解到各种通信技术的发展和规划,也让我对“通信人”的工作有了更深刻的认识。 一、通信知识的储备 《现代通信技术》第一页指出,人与人之间通过听觉、视觉、嗅觉、触觉等感官,感知现实世界而获取信息,并通过通信来传递信息。所谓信息,是客观事物状态和运动特征的一种普遍形式,客观世界中大量地存在、产生和传递着以这些方式表示出来的各种各样的信息。信息的目的是用来“消除不可靠的因素”,它是物质运动规律总和。因此,我们通信人的任务就是利用有线、无线等形式来将信息从信源传递到信宿,在传输过程中保证通信的有效性和可靠性。 而具体来讲,要实现信息传递,通信网是必需的通信体系,其中通信网分层的结构形式需要不同的支撑技术,包括业务网技术,向用户提供电话、电报、数据、图像等各种电信业务的网络;介入与传送网技术,实现信息由一个点传递到另一个点或一些点的功能。对此,我们通信工程专业学习课程的安排让我们一步步打下基础,建立起知识储备。 知识树如下: 如知识树所述,通信工程课程体系可以大致分为一下6类基础:

数学基础:工科数学分析,线性代数,复变函数,概率论基础,随机过程; 电路基础:电路分析,模拟电子技术,数字逻辑电路,通信电子电路; 场与波基础:电磁场与电磁波,微波技术,射频与天线; 计算机应用能力:C 语言程序设计,微机原理与接口技术,计算机网络,数据结构,面向对象程序设计,实时嵌入式系统 信号处理类课程:信号与系统,信号处理,图像处理,DSP 原理及应用; 通信类课程:通信原理,现代通信技术,信息论基础,移动通信,光纤通信等。 从大一开始学习的工科数学分析,大学物理,大学计算机基础等课程为基础类课程,旨在培养我们的语言能力,数学基础,物理基础,计算机能力,然后逐步加大难度,细化课程,方向逐渐明朗详细。同时,课程中加入了各种实验,锻炼了我们的动手能力。 二、通信知识的小小应用 实验课上老师说过,以我们所学的知识已经可以制作简单通信的手机的草图了,我对此跃跃欲试。经过思考和调研,以下是我对于简单手机设计的原理框图和思考结果。 一部手机的结构包括接收机、发射机、中央控制模块、电源和人机界面部分,如下图 手机结构设计图 电路部分包括射频和逻辑音频电路部分,射频电路包括从天线到接收机的解调输出,与发射的I/O 调制到功率放大器输出的电路。其中,射频接收电路完成接收信号的滤波、信号放大、解调等功能;射频发射电路完成语音基带信号的调制、变频、功率放大等功能。要用到的超外差接收机、混频器、鉴相器等在《通信电子电路》书本中的知识。逻辑音频包括从接收解调到接收音频输出、送话器电路到发射I/O 调制器及逻辑电路部分的中央处理单元、数字语音处理及各种存储器电路。由核心控制模块CPU 、EEPROM 、 FLASH 、SRAM 等部分组成,一个基本 天线 接收机 发射机 频率合成 电源 逻 辑 音 频 人 机 交 互

实验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写入

进程同步实验报告

实验三进程的同步 一、实验目的 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)创建两个子进程:

北邮通信原理实验报告

北京邮电大学通信原理实验报告 学院:信息与通信工程学院班级: 姓名: 姓名:

实验一:双边带抑制载波调幅(DSB-SC AM ) 一、实验目的 1、了解DSB-SC AM 信号的产生以及相干解调的原理和实现方法。 2、了解DSB-SC AM 信号波形以及振幅频谱特点,并掌握其测量方法。 3、了解在发送DSB-SC AM 信号加导频分量的条件下,收端用锁相环提取载波的原理及其实现方法。 4、掌握锁相环的同步带和捕捉带的测量方法,掌握锁相环提取载波的调试方法。 二、实验原理 DSB 信号的时域表达式为 ()()cos DSB c s t m t t ω= 频域表达式为 1 ()[()()]2 DSB c c S M M ωωωωω=-++ 其波形和频谱如下图所示 DSB-SC AM 信号的产生及相干解调原理框图如下图所示

将均值为零的模拟基带信号m(t)与正弦载波c(t)相乘得到DSB—SC AM信号,其频谱不包含离散的载波分量。 DSB—SC AM信号的解调只能采用相干解调。为了能在接收端获取载波,一种方法是在发送端加导频,如上图所示。收端可用锁相环来提取导频信号作为恢复载波。此锁相环必须是窄带锁相,仅用来跟踪导频信号。 在锁相环锁定时,VCO输出信号sin2πf c t+φ与输入的导频信号cos2πf c t 的频率相同,但二者的相位差为φ+90°,其中很小。锁相环中乘法器的两个 输入信号分别为发来的信号s(t)(已调信号加导频)与锁相环中VCO的输出信号,二者相乘得到 A C m t cos2πf c t+A p cos2πf c t?sin2πf c t+φ =A c 2 m t sinφ+sin4πf c t+φ+ A p 2 sinφ+sin4πf c t+φ 在锁相环中的LPF带宽窄,能通过A p 2 sinφ分量,滤除m(t)的频率分量及四倍频载频分量,因为很小,所以约等于。LPF的输出以负反馈的方式控制VCO,使其保持在锁相状态。锁定后的VCO输出信号sin2πf c t+φ经90度移相后,以cos2πf c t+φ作为相干解调的恢复载波,它与输入的导频信号cos2πf c t 同频,几乎同相。 相干解调是将发来的信号s(t)与恢复载波相乘,再经过低通滤波后输出模拟基带信号 A C m t cos2πf c t+A p cos2πf c t?cos2πf c t+φ =A c 2 m t cosφ+cos4πf c t+φ+ A p 2 cosφ+cos4πf c t+φ 经过低通滤波可以滤除四倍载频分量,而A p 2 cosφ是直流分量,可以通过隔直

进程的管道通信

计算机操作系统实验第六次实验报告 学院:计算机科学与信息学院专业:通信工程班级: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( ) 系统调用格式

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

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

一、实验目的 创建进程,实现进程消息通信和共享内存通信,了解进程的创建、退出和获取进程信。了解什么是映像文件、管道通信及其作用,掌握通过内存映像文件和管道技术实现进程通信。 二、实验内容 本例用三种方法实现进程通信,仅用于示例目的,没有进行功能优化。 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);

通信系统仿真实验报告(DOC)

通信系统实验报告——基于SystemView的仿真实验 班级: 学号: 姓名: 时间:

目录 实验一、模拟调制系统设计分析 -------------------------3 一、实验内容-------------------------------------------3 二、实验要求-------------------------------------------3 三、实验原理-------------------------------------------3 四、实验步骤与结果-------------------------------------4 五、实验心得------------------------------------------10 实验二、模拟信号的数字传输系统设计分析------------11 一、实验内容------------------------------------------11 二、实验要求------------------------------------------11 三、实验原理------------------------------------------11 四、实验步骤与结果------------------------------------12 五、实验心得------------------------------------------16 实验三、数字载波通信系统设计分析------------------17 一、实验内容------------------------------------------17 二、实验要求------------------------------------------17 三、实验原理------------------------------------------17 四、实验步骤与结果------------------------------------18 五、实验心得------------------------------------------27

进程控制与进程间通信操作系统实验报告

工程大学实验报告 专业班级:姓名:学号: 课程名称:操作系统 实验成绩:指导教师:蔡敦波 实验名称:进程控制与进程间通信 一、实验目的: 1、掌握进程的概念,明确进程和程序的区别。 2、认识和了解并发执行的实质。 3、了解什么是信号。 4、熟悉LINUX系统中进程之间软中断通信的基本原理。 二、实验内容: 1、进程的创建(必做题) 编写一段程序,使用系统调用fork( )创建两个子进程,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 <参考程序>

运行的结果是bca. 首先创建进程p1,向子进程返回0,输出b.又创建进程p2,向子进程返回0,输出c,同时向父进程返回子进程的pid,输出a 2、修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。(必做题) <参考程序> # include int main() { int p1, p2, i; while((p1=fork())= = -1); if(p1= =0) for(i=0;i<500;i++) printf(“child%d\n”,i); else { while((p2=fork())= =-1); If(p2= =0) for(i=0;i<500;i++) printf(“son%d\n”,i); else for(i=0;i<500;i++) printf(“daughter%d\n”,i); } }

运行的结果是如上图所示. 首先创建进程p1,向子进程返回0,并for语句循环输出child +i字符串.又创建进程p2,向子进程返回0,输出字符串son+i,同时向父进程返回子进程的pid,输出字符串duaghter +i ,各打印5次。

通信实训心得体会

通信实训心得体会 篇一:通信实训总结 通信实训总结 这次学校组织的实训学习虽然只有短短的一周时间,但是我以100%的学习心态来对待。在这次的实训过程中,我们感性上学到了很多东西,也对我将来的学习和研究方向的确定产生了深远的影响。通过这次实训丰富了理论知识,增强了操作能力,开阔了视野,并使我对以后的工作有了定性的认识,真是让我收获颇多。现将本次实训就实训内容和实训收获进行简单的阐述。 一、通信工作概述 通信行业产业链分类: 设备商、设计院、施工队、优公司、代维公司、软、硬件提供商、增值业务公司、终端厂商。运营商之所以是通信业的龙头老大,最重要的原因是国家给了它络经营权。用户之所以是运营商的上帝,不仅仅是用户本身使用,还有用户可以自由选择运营商。 二、通信工程设计基础 1、通信络构成及专业划分 通信指人们通过听觉、视觉、触觉等感观,感知世界而

获 得信息,并通过通信来传递信息。通信的基本形式是在信源(始端)与信宿(末端)之间建立一个传输(转移)信息的通道(信道)。通信是通信系统的一种形式。通信系统特指使用光信号或电信号传递信息的通信系统。通信是由一定数量的节点(包括 终端节点、交换节点)和连接这些节点的传输系统有机地组织在一起,按约定的信令或协议完成任意用户间的信息交换的通信体制。在通信上,信息的交换可以在用户间进行,在两个计算机之间进行,还可以在一个用户和设备间进行。 现代通信的功能结构:(1)业务:负责向用户提供各种通信业务。(2)传送:负责向各节点之间提供信息的透明传输通道。(3)支撑:负责为业务和传送提供运行所必须的信令、同步、络管理等功能。 通信工程设计专业划分:动力(通信电源)设计专业、交换通信设计专业、传输通信设计专业、数据通信设计专业、无线通信设计专业、线路及管道工程设计专业、小区接入设计专业、无线室分系统设计专业、络规划与研究专业、建筑设计专业。 2、通信工程设计项目管理

相关主题