搜档网
当前位置:搜档网 › 进程控制与进程间通信操作系统实验报告

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

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

工程大学实验报告

专业班级:姓名:学号:

课程名称:操作系统

实验成绩:指导教师:蔡敦波

实验名称:进程控制与进程间通信

一、实验目的:

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次。

3、编写程序创建进程树如图1和图2所示,在每个进程中显示当前进程识别码和父进程识别码。(选做题)

实验一代码及结果

图一 进程树实验结果及相关代码

a

父进程

子进程 图1 进程树

b c

d

a

d

b c

e

图2 进程树

图二进程树实验结果及相关代码

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

Child process 1 is killed by parent!

Child process 2 is killed by parent!

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

Parent process is killed!

<参考程序>

#include

#include

#include

#include

#include

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( );

wait( );

printf("parent process is killed!\n");

exit(0);

}

else /*在子进程2中*/

{

wait_mark=1;

signal(12,stop);

waiting();

lockf(1,1,0);

printf("child process 2 is killed by parent!\n");

lockf(1,0,0);

exit(0);

}

}

else /*在子进程1中*/

{

wait_mark=1;

signal(10,stop);

waiting();

lockf(1,1,0);

printf("child process 1 is killed by parent!\n");

lockf(1,0,0);

exit(0);

}

}

void waiting()

{

while(wait_mark!=0);

}

void stop()

{

wait_mark=0;

}

实验要求:

⑴、运行程序并分析结果。

中断后,父进程收到子进程退出状态,依次杀死子进程2子进程1,等待子进程完全退出后,杀死父进程

⑵、如果把signal(SIGINT,stop)放在①号和②号位置,结果会怎样并分析原因。

改变signal(SIGINT,stop)的位置后发现,只是杀死了子进程2和父进程,而子进程1没有被杀死。是因为子进程1没有设置对信号的处理操作,则键盘中断时,仍然无法将其杀死。

⑶、该程序段前面部分用了两个wait(0),为什么?

wait(0)是为了让前面的子进程完全执行完,才可以进行下面的操作。

⑷、该程序段中每个进程退出时都用了语句exit(0),为什么?

首先是为了让进程退出,其次是向父进程返回退出时的状态;

5、修改上面的程序,增加语句signal(SIGINT,SIG_IGN)和语句signal(SIGQUIT,SIG_IGN),再观察程序执行时屏幕上出现的现象,并分析其原因。

<参考程序>

# include

# include

# include

main()

{ int pid1, pid2;

int EndFlag=0;

Pf1=0;

Pf2=0;

void IntDelete()

{

kill(pid1,10);

kill(pid2,12);

EndFlag=1;

void Int1()

{

printf(“child process 1 is killed by parent !\n”);

exit(0);

}

void Int2()

{

printf(“child process 2 is killed by parent !\n”);

exit(0);

}

main()

{

int exitcode;

signal(SIGINT,SIG_IGN);

signal(SIGQUIT,SIG_IGN);

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

if(pid==0)

{

signal(SIGUSER1,Int1);

signal(SIGQUIT,SIG_IGN);

pause();

exit(0);

}

else

{

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

if(pid2==0)

{

signal(SIGUSER1,Int1);

signal(SIGQUIT,SIG_IGN);

pause();

exit(0);

}

else

{

signal(SIGINT,IntDelete);

waitpid(-1,&exitcode,0);

printf(“parent process is killed \n”);

exit(0);

}

}

}

实验要求:

运行程序并分析结果。

【思考题】

1、系统是怎样创建进程的?

系统通过调用fork()函数创建子进程

2、当首次调用新创建进程时,其入口在哪里?

入口应该是创建进程的PID

3、当前运行的程序(主进程)的父进程是什么?

当前运行程序的父进程是应该是该进程的上一个进程

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

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

进程通信实验报告 一、实验名称:进程通信 二、实验目的:掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。 三、实验原理:邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用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()

过程控制系统实验报告材料(最新版)

实验一、单容水箱特性的测试 一、实验目的 1. 掌握单容水箱的阶跃响应的测试方法,并记录相应液位的响应曲线。 2. 根据实验得到的液位阶跃响应曲线,用相关的方法确定被测对象的特征参数T和传递函数。 二、实验设备 1. THJ-2型高级过程控制系统实验装置 2. 计算机及相关软件 3. 万用电表一只 三、实验原理 图2-1单容水箱特性测试结构图由图2-1可知,对象的被控制量为水箱的液位H,控制量(输入量)是流入水箱中的流量Q1,手动阀V1和V2的开度都为定值,Q2为水箱中流出的流量。根据物料平衡关系,在平衡状态时 Q1-Q2=0 (1)

动态时,则有 Q1-Q2=dv/dt (2) 式中 V 为水箱的贮水容积,dV/dt为水贮存量的变化率,它与 H 的关系为 dV=Adh ,即dV/dt=Adh/dt (3) A 为水箱的底面积。把式(3)代入式(2)得 Q1-Q2=Adh/dt (4) 基于Q2=h/RS,RS为阀V2的液阻,则上式可改写为 Q1-h/RS=Adh/dt 即 ARsdh/dt+h=KQ1 或写作 H(s)K/Q1(s)=K/(TS+1) (5) 式中T=ARs,它与水箱的底积A和V2的Rs有关:K=Rs。 式(5)就是单容水箱的传递函数。 对上式取拉氏反变换得 (6) 当t—>∞时,h(∞)=KR0 ,因而有K=h(∞)/R0=输出稳态值/阶跃输入当 t=T 时,则有 h(T)=KR0(1-e-1)=0.632KR0=0.632h(∞)

式(6)表示一阶惯性环节的响应曲线是一单调上升的指数函数,如图 2-2 所示。当由实验求得图2-2所示的阶跃响应曲线后,该曲线上升到稳态值的63%所对应的时间,就是水箱的时间常数T。该时间常数 T也可以通过坐标原点对响应曲线作切线,切线与稳态值交点所对应的时间就是时间常数T,由响应曲线求得K和T后,就能求得单容水箱的传递函数。如果对象的阶跃响应曲线为图2-3,则在此曲线的拐点D处作一切线,它与时间轴交于B点,与响应稳态值的渐近线交于A点。图中OB即为对象的滞后时间τ,BC为对象的时间常数T,所得 的传递函数为: 四、实验内容与步骤 1.按图2-1接好实验线路,并把阀V1和V2开至某一开度,且使V1的开度大于V2的开度。 2.接通总电源和相关的仪表电源,并启动磁力驱动泵。

linux进程控制 实验报告

长安大学 操作系统实验报告 实验课程:操作系统 实验名称:linux进程控制 学院:信息学院 专业:软件工程 学号:2406090106 姓名:刘建 日期:2012-5-09

一、实验目的 熟悉进程的创建过程,了解系统调用函数fork() 和execl()。 二、实验内容 1、阅读实例代码fork1,并编辑、编译、运行,记录程序的运行结果,尝试给出合理的解释,查阅有关资料,掌握系统调用fork( )的用法,返回值的意义。 2、阅读实例代码fork2,并编辑、编译、运行,记录程序的运行结果,尝试给出合理的解释,查阅有关资料,掌握在程序中运行一个操作系统命令和运行一个程序的方法。 3、修改fork2,使之能把运行的命令和程序作为参数传给fork2。 三、设计思想 1、程序框架

pid = -1 pid = 0pid> 0 2、用到的文件系统调用函数 fork() 和execl() 四、调试过程 1、测试数据设计 (1)fork1 命名程序1: 编写程序1:

编译程序1: 运行程序1: (2)fork2

编写程序2: 运行程序2:

(3)修改fork2 编写修改程序2: 修改后的运行结果: 2、测试结果分析 (1)对于程序1:因为系统调用fork()函数是一次调用两次返回值,而且先生成子进程还是父进程是不确定的,所以第一次执行生成子进程的时候返回的pid = 0,判断pid!=-1,所以输出了I’m the child. I’m the parent. 第二次,执行父进程的时候,返回的是子进程的进程号pid> 0,即pid的值仍然不为-1,所以又输出了一次I’m the child. I’m the parent。 (2)对于程序2:第一次调用fork()函数时,由于执行的是子进程还是父进程是随机的,所以第一次对父进程返回的是子进程的进程号(大于0),即pid> 0,所以输出I’m the parent. Program end.当第二次执行子进程时返回值是0,即pid = 0,所以输出I’m the child. 并调用了execl()函数,查看了指定路径中的文件。

进程管理实验报告文档

实验一进程管理 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!

过程控制实验报告

过程控制实验 实验报告 班级:自动化1202 姓名:杨益伟 学号:120900321 2015年10月 信息科学与技术学院 实验一过程控制系统建模 作业题目一: 常见得工业过程动态特性得类型有哪几种?通常得模型都有哪些?在Simulink中建立相应模型,并求单位阶跃响应曲线、 答:常见得工业过程动态特性得类型有:无自平衡能力得单容对象特性、有自平衡能力得单容对象特性、有相互影响得多容对象得动态特性、无相互影响得多容对象得动态特性等。通常得模型有一阶惯性模型,二阶模型等、 单容过程模型 1、无自衡单容过程得阶跃响应实例 已知两个无自衡单容过程得模型分别为与,试在Simulink中建立模型,并求单位阶跃响应曲线。 Simulink中建立模型如图所示: 得到得单位阶跃响应曲线如图所示:

2、自衡单容过程得阶跃响应实例 已知两个自衡单容过程得模型分别为与,试在Simulink中建立模型,并求单位阶跃响应曲线。 Simulink中建立模型如图所示: 得到得单位阶跃响应曲线如图所示:

多容过程模型 3、有相互影响得多容过程得阶跃响应实例 已知有相互影响得多容过程得模型为,当参数, 时,试在Simulink中建立模型,并求单位阶跃响应曲线在Simulink中建立模型如图所示:得到得单位阶跃响应曲线如图所示:

4、无相互影响得多容过程得阶跃响应实例 已知两个无相互影响得多容过程得模型为(多容有自衡能力得对象)与(多容无自衡能力得对象),试在Simulink中建立模型,并求单位阶跃响应曲线。 在Simulink中建立模型如图所示: 得到得单位阶跃响应曲线如图所示:

进程管理实验报告

实验2过程管理实验报告学生号姓名班级电气工程系过程、过程控制块等基本原理过程的含义:过程是程序运行过程中对数据集的处理,以及由独立单元对系统资源的分配和调度。在不同的数据集上运行程序,甚至在同一数据集上运行多个程序,是一个不同的过程。(2)程序状态:一般来说,一个程序必须有三种基本状态:就绪、执行和阻塞。然而,在许多系统中,过程的状态变化可以更好地描述,并且增加了两种状态:新状态和终端状态。1)就绪状态,当一个进程被分配了除处理器(CPU)以外的所有必要资源时,只要获得了处理器,进程就可以立即执行。此时,进程状态称为就绪状态。在系统中,多个进程可以同时处于就绪状态。通常,这些就绪进程被安排在一个或多个队列中,这些队列称为就绪队列。2)一旦处于就绪状态的进程得到处理器,它就可以运行了。进程的状态称为执行状态。在单处理器系统中,只有一个进程在执行。在多处理器系统中,可能有多个进程在执行中。3)阻塞状态由于某些事件(如请求输入和输出、额外空间等),执行进程被挂起。这称为阻塞状态,也称为等待状态。通常,处于阻塞状态的进程被调度为-?这个队列称为阻塞队列。4)新状态当一个新进程刚刚建立并且还没有放入就绪队列中时,它被称为新状态。5)终止状态是

什么时候-?进程已正常或异常终止,操作系统已将其从系统队列中删除,但尚未取消。这就是所谓的终结状态。(3)过程控制块是过程实体的重要组成部分,是操作系统中最重要的记录数据。控制块PCB记录操作系统描述过程和控制过程操作所需的所有信息。通过PCB,一个不能独立运行的程序可以成为一个可以独立运行的基本单元,并且可以同时执行一个进程。换句话说,在进程的整个生命周期中,操作系统通过进程PCB管理和控制并发进程。过程控制块是系统用于过程控制的数据结构。系统根据进程的PCB来检测进程是否存在。因此,进程控制块是进程存在的唯一标志。当系统创建一个进程时,它需要为它创建一个PCB;当进程结束时,系统回收其PCB,进程结束。过程控制块的内容过程控制块主要包括以下四个方面的信息。过程标识信息过程标识用于对过程进行标识,通常有外部标识和内部标识。外部标识符由流程的创建者命名。通常是一串字母和数字。当用户访问进程时使用。外部标识符很容易记住。内部标识符是为了方便系统而设置的。操作系统为每个进程分配一个唯一的整数作为内部标识符。通常是进程的序列号。描述性信息(process scheduling message)描述性信息是与流程调度相关的一些有关流程状态的信息,包括以下几个方面。流程状态:表

计算机过程控制实验报告

计算机过程控制实验报告

实验1 单容水箱液位数学模型的测定实验 1、试验方案: 水流入量Qi 由调节阀u 控制,流出量Qo 则由用户通过负载阀R 来改变。被调量为水位H 。分析水位在调节阀开度扰动下的动态特性。 直接在调节阀上加定值电流,从而使得调节阀具有固定的开度。(可以通过智能调节仪手动给定,或者AO 模块直接输出电流。) 调整水箱出口到一定的开度。 突然加大调节阀上所加的定值电流观察液位随时间的变化,从而可以获得液位数学模型。 通过物料平衡推导出的公式: μμk Q H k Q i O ==, 那么 )(1 H k k F dt dH -=μμ, 其中,F 是水槽横截面积。在一定液位下,考虑稳态起算点,公式可以转换成 μμR k H dt dH RC =+。 公式等价于一个RC 电路的响应函数,C=F 就是水容,k H R 0 2= 就是水阻。 如果通过对纯延迟惯性系统进行分析,则单容水箱液位数学模型可以使用以下S 函数表示: ) 1()(0 += TS S KR S G 。 相关理论计算可以参考清华大学出版社1993年出版的《过程控制》,金以慧编著。 2、实验步骤: 1) 在现场系统A3000-FS 上,将手动调节阀JV201、JV206完全打开,使下水箱闸板具有 一定开度,其余阀门关闭。 2) 在控制系统A3000-CS 上,将下水箱液位(LT103)连到内给定调节仪输入端,调节仪 输出端连到电动调节阀(FV101)控制信号端。 3) 打开A3000-CS 电源,调节阀通电。打开A3000-FS 电源。 4) 在A3000-FS 上,启动右边水泵(即P102),给下水箱(V104)注水。 给定值 图1 单容水箱液位数学模型的测定实验

进程管理实验报告

进程的控制 1 .实验目的 通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。 【答:进程概念和程序概念最大的不同之处在于: (1)进程是动态的,而程序是静态的。 (2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。 (3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。 (4)进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。】2 .实验内容 (1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。 (2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。 (3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new

program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。 3 .实验步骤 (1)gedit创建进程1.c (2)使用gcc 1.c -o 1编译并./1运行程序1.c #include #include #include #include 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()); }

进程间通信实验报告

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

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;

过程控制实验报告

东南大学自动化学院 实验报告 课程名称:过程控制实验 实验名称:水箱液位控制系统 院(系):自动化专业:自动化姓名:学号: 实验室:实验组别: 同组人员: 实验时间: 评定成绩:审阅教师:

目录 一、系统概论 (3) 二、对象的认识 (4) 三、执行机构 (14) 四、单回路调节系统 (15) 五、串级调节系统Ⅰ (18) 六、串级调节系统Ⅱ (19) 七、前馈控制 (21) 八、软件平台的开发 (21)

一、系统概论 1.1实验设备 图1.1 实验设备正面图图1.2 实验设备背面图 本实验设备包含水箱、加热器、变频器、泵、电动阀、电磁阀、进水阀、出水阀、增压器、流量计、压力传感器、温度传感器、操作面板等。 1.1.2 铭牌 ·加热控制器: 功率1500w,电源220V(单相输入) ·泵: Q40-150L/min,H2.5-7m,Hmax2.5m,380V,VL450V, IP44,50Hz,2550rpm,1.1kw,HP1.5,In2.8A,ICL B ·全自动微型家用增压器: 型号15WZ-10,单相电容运转马达 最高扬程10m,最大流量20L/min,级数2,转速2800rmp,电压220V, 电流0.36A,频率50Hz,电容3.5μF,功率80w,绝缘等级 E ·LWY-C型涡轮流量计: 口径4-200mm,介质温度-20—+100℃,环境温度-20—+45℃,供电电源+24V, 标准信号输出4-20mA,负载0-750Ω,精确度±0.5%Fs ±1.0%Fs,外壳防护等级 IP65 ·压力传感器 YMC303P-1-A-3 RANGE 0-6kPa,OUT 4-20mADC,SUPPLY 24VDC,IP67,RED SUP+,BLUE OUT+/V- ·SBWZ温度传感器 PT100 量程0-100℃,精度0.5%Fs,输出4-20mADC,电源24VDC

浙工大过程控制实验报告

浙工大过程控制实验报告 202103120423徐天宇过程控制系统实验报告 实验一:系统认识及对象特性测试 一实验目的 1了解实验装置结构和组成及组态软件的组成使用。 2 熟悉智能仪表的使用及实验装置和软件的操作。 3熟悉单容液位过程的数学模型及阶跃响应曲线的实验方法。 4学会有实际测的得单容液位过程的阶跃响应曲线,用相关的方法分别确定它们的参数,辨识过程的数学模型。二实验内容 1 熟悉用MCGS组态的智能仪表过程控制系统。 2 用阶跃响应曲线测定单容液位过程的数学模型。三实验设备 1 AE2000B型过程控制实验装置。 2 计算机,万用表各一台。 3 RS232-485转换器1只,串口线1根,实验连接线若干。四实验原理 如图1-1所示,设水箱的进水量为Q1,出水量为Q2,水箱的液面高度为h,出水阀V2固定于某一开度值。根据物料动态平衡的关系,求得: 在零初始条件下,对上式求拉氏变换,得:

式中,T为水箱的时间常数(注意:阀V2的开度大小会影响到水箱的时间常数),T=R2*C,K=R2为单容对象的放大倍数, R1、R2分别为V1、V2阀的液阻,C 为水箱的容量系数。 阶跃响应曲线法是指通过调节过程的调节阀,使过程的控制输入产生一个阶跃变化,将被控量随时间变化的阶跃响应曲线记录下来,再根据测试记录的响应曲线求取输入输出之间的数学模型。本实验中输入为电动调节阀的开度给定值OP,通过改变电动调节阀的开度给定单容过程以阶跃变化的信号,输出为上水箱的液位高度h。电动调节阀的开度op通过组态软件界面有计算机传给智能仪表,有智能仪表输出范围为:0~100%。水箱液位高度有由传感变送器检测转换为4~20mA的标准信号,在经过智能仪表将该信号上传到计算机的组态中,由组态直接换算成高度值,在计算机窗口中显示。因此,单容液位被控对象的传递函数,是包含了由执行结构到检测装置的所有液位单回路物理关系模型有上述机理建模可知,单容液位过程是带有时滞性的一阶惯性环节,电动调节阀的开度op,近似看成与流量Q1成正比,当电动调节阀的开度op为一常量作为阶跃信号时,该单容液位过程的阶跃响应为 需要说明的是表达式(2-3)是初始量为零的情况,如果是在一个稳定的过程下进行的阶跃响应,即输入量是在原来的基础上叠加上op的变化,则输出表达式是对应原来输出值得基础上的增

进程同步实验报告

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

过程控制系统实验报告

《过程控制系统实验报告》 院-系: 专业: 年级: 学生姓名: 学号: 指导教师: 2015 年6 月

过程控制系统实验报告 部门:工学院电气工程实验教学中心实验日期:年月日 姓名学号班级成绩 实验名称实验一单容水箱液位定值控制实验学时 课程名称过程控制系统实验及课程设计教材过程控制系统 一、实验仪器与设备 A3000现场系统,任何一个控制系统,万用表 二、实验要求 1、使用比例控制进行单溶液位进行控制,要求能够得到稳定曲线,以及震荡曲线。 2、使用比例积分控制进行流量控制,能够得到稳定曲线。设定不同的积分参数,进行 比较。 3、使用比例积分微分控制进行流量控制,要求能够得到稳定曲线。设定不同的积分参数,进行比较。 三、实验原理 (1)控制系统结构 单容水箱液位定值(随动)控制实验,定性分析P, PI,PD控制器特性。 水流入量Qi由调节阀u控制,流出量Qo则由用户通过负载阀R来改变。被调量为水位H。使用P,PI , PID控制,看控制效果,进行比较。 控制策略使用PI、PD、PID调节。 (2)控制系统接线表 使用ADAM端口测量或控制量测量或控制量标号使用PLC端 口 锅炉液位LT101 AI0 AI0 调节阀FV101 AO0 AO0 四、实验内容与步骤 1、编写控制器算法程序,下装调试;编写测试组态工程,连接控制器,进行联合调试。这些步骤不详细介绍。

2、在现场系统上,打开手阀QV-115、QV-106,电磁阀XV101(直接加24V到DOCOM,GND到XV102控制端),调节QV-116闸板开度(可以稍微大一些),其余阀门关闭。 3、在控制系统上,将液位变送器LT-103输出连接到AI0,AO0输出连到变频器U-101控制端上。 注意:具体哪个通道连接指定的传感器和执行器依赖于控制器编程。对于全连好线的系统,例如DCS,则必须安装已经接线的通道来编程。 4、打开设备电源。包括变频器电源,设置变频器4-20mA的工作模式,变频器直接驱动水泵P101。 5、连接好控制系统和监控计算机之间的通讯电缆,启动控制系统。 6、启动计算机,启动组态软件,进入测试项目界面。启动调节器,设置各项参数,将调节器的手动控制切换到自动控制。 7、设置PID控制器参数,可以使用各种经验法来整定参数。这里不限制使用的方法。 五、实验结果记录及处理 六、实验心得体会: 比例控制特性:能较快克服扰动的影响,使系统稳定下来,但有余差。 比例积分特性:能消除余差,它能适用于控制通道时滞较小、负荷变化不大、被控量不允许由余差的场合。 比例微分特性:对于改善系统的动态性能指标,有显著的效果。

过程控制实验报告

《过程控制实验》 实验报告

第一章、过程控制实验装置的认识 一、过程控制实验的基本内容及概述 本次过程控制实验主要是对实验室的水箱水位进行控制。水箱液位控制系统是一个简单控制系统,所谓简单液位控制系统通常是指由一个被控对象、一个检测变送单元(检测元件及变送器)、以个控制器和一个执行器(控制阀)所组成的单闭环负反馈控制系统,也称为单回路控制系统。 简单控制系统有着共同的特征,它们均有四个基本环节组成,即被控对象、测量变送装置、控制器和执行器。 图1-1 水箱液位控制系统的原理框图 这是单回路水箱液位控制系统,单回路调节系统一般指在一个调节对象上用一个调节器来保持一个参数的恒定,而调节器只接受一个测量信号,其输出也只控制一个执行机构。本系统所要保持的恒定参数是液位的给定高度,即控制的任务是控制水箱液位等于给定值所要求的高度。 二、主要设备 1)水路装置的认识 过程控制实验用的水路装置图如下

图1-2 水路图 由水路装置图我们看到,装置主要有水箱,交流电动泵,热炉,管道,电动阀,电磁阀,流量计,液位传感器,温度传感器组成,可以构成一个完整的过程控制实验平台。从上图我们可以看出,装置主要分为两大部分,第一水路,管道,热炉,水箱等等物理对象,第二是传感器,执行机构等等的控制部分的装置。 实验装置具体介绍如下:

b)电气连接图 由电气装置的图我们可以看到,所有的电器连接都在这里,主要是一些传感器信号,电动驱动信号,用于电动装置的驱动。 见附件 c)操作面板图: 从操作面板上我们可以看到主要是由四个表,由P909构成,用于测量控制压力、流量、液位、温度的测量以及控制,PV代表反馈测量,外给定可以用于串级控制,OUT用于输出信号,以上接口均使用4-20mA标准 见附件 第二、三章、实验系统的认知(包括力控软件,P909,实验装置) a)力控软件的安装 首先使用光盘里的Setup.exe安装力控软件的主题部分,然后将IO Servers文件夹拷到力控软件的安装目录下,安装IO Servers驱动 然后打开力控软件,寻找到力控软件的目录,点击开发模式,然后找到COM设置的部分,如图

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

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

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

《过程控制系统》实验报告

《过程控制系统》实验报告 学院:电气学院 专业:自动化 班级:1505 姓名及学号:任杰311508070822 日期:2018.6.3

实验一、单容水箱特性测试 一、 实验目的 1. 掌握单容水箱阶跃响应测试方法,并记录相应液位的响应曲线。 2. 根据实验得到的液位阶跃响应曲线,用相关的方法确定被测对象的特征参数T 和传递函数。 二、 实验设备 1. THJ-FCS 型高级过程控制系统实验装置。 2. 计算机及相关软件。 3. 万用电表一只。 三、 实验原理 图1 单容水箱特性测试结构图 由图 2-1 可知,对象的被控制量为水箱的液位 h ,控制量(输入量)是流入水箱中的流量 Q 1,手动阀 V 1 和 V 2 的开度都为定值,Q 2 为水箱中流出的流量。根据物料平衡关系,在平衡状态时02010=-Q Q (式2-1),动态时,则有dt dV Q Q = -21,(式2-2)式中 V 为水箱的贮水容积,dt dV 为水贮存量的变化率,它与 h 的关

系为Adh dV =,即dt dh A dt dV =(式2-3),A 为水箱的底面积。把式(2-3)代入式(2-2)得dt dh A Q Q =-21(式2-4)基于S R h Q =2,S R 为阀2V 的液阻,(式2-4)可改写为dt dh A R h Q S =-1,1KQ h dt dh AR S =+或()()1s 1+=Ts K s Q H (式2-5)式中s AR T =它与水箱的底面积A 和2V 的S R 有关,(式2-5)为单容水箱的传递函数。若令()S R S Q 01=,常数=0R ,则式2-5可表示为()T S KR S R K S R T S T K S H 11/000+-=?+= 对上式取拉氏反变换得()()T t e KR t h /01--=(式2-6),当∞→t 时()0KR h =∞,因而有()0/R h K ∞==输出稳态值/阶跃输入,当T t =时,()() ()∞==-=-h KR e KR T h 632.0632.01010,式2-6表示一阶惯性响应曲线是一单调上升的指数函数如下图2-2所示 当由实验求得图 2-2 所示的阶跃响应曲线后,该曲线上升到稳态值的 63%所对应的时间,就是水箱的时间常数 T 。该时间常数 T 也可以通过 坐标原点对响应曲线作切线,切线与稳态值交点所对应的时间就是 时间常数 T ,由响应曲线求得 K 和 T 后,就能求得单容水箱的传递函 数如式(2-5)所示。 如果对象的阶跃响应曲线为图 2-3,则在此曲线的拐点 D 处作一切线,它与时间轴交于 B 点,与响应稳态值的渐近线交于 A 点。图中OB 即为对象的滞后时间

相关主题