《通信嵌入式系统技术与应用》 课件 第4讲 进程控制与进程间通信_第1页
《通信嵌入式系统技术与应用》 课件 第4讲 进程控制与进程间通信_第2页
《通信嵌入式系统技术与应用》 课件 第4讲 进程控制与进程间通信_第3页
《通信嵌入式系统技术与应用》 课件 第4讲 进程控制与进程间通信_第4页
《通信嵌入式系统技术与应用》 课件 第4讲 进程控制与进程间通信_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4讲

进程控制与进程间通信3.3进程控制

1、Linux下进程概述

2、Linux进程控制编程1、Linux下进程概述(1)进程相关基本概念(2)Linux下的进程结构(3)Linux下进程的模式和类型(4)Linux下的进程管理1、Linux下进程概述(1)进程相关基本概念进程的概念首先是在60年代初期由MIT的Multics系统和IBM的TSS/360系统引入的。经过了40多年的发展,人们对进程有过各种各样的定义。现列举较为著名的几种。进程是一个独立的可调度的活动(E.Cohen,D.Jofferson)进程是一个抽象实体,当它执行某个任务时,将要分配和释放各种资源(P.Denning)进程是可以并行执行的计算部分。(S.E.Madnick,J.T.Donovan)以上进程的概念都不相同,但其本质是一样的。它指出了进程是一个程序的一次执行的过程。它和程序是有本质区别的:程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程。它是程序执行和资源管理的最小单位。因此,对系统而言,当用户在系统中键入命令执行一个程序的时候,它将启动一个进程。1、Linux下进程概述(2)Linux下的进程结构Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。其中,每一个进程都运行在各自独立的虚拟地址空间,因此,即使一个进程发生异常,它也不会影响到系统中的其他进程。Linux中的进程包含3个段,分别为“数据段”、“代码段”和“堆栈段”。“数据段”存放的是全局变量、常数以及动态数据分配的数据空间(如malloc函数取得的空间)等。“代码段”存放的是程序代码的数据。“堆栈段”存放的是子程序的返回地址、子程序的参数以及程序的局部变量。1、Linux下进程概述(3)Linux下进程的模式和类型在Linux系统中,进程的执行模式划分为用户模式和内核模式。如果当前运行的是用户程序、应用程序或者内核之外的系统程序,那么对应进程就在用户模式下运行;如果在用户程序执行过程中出现系统调用或者发生中断事件,那么就要运行操作系统(即核心)程序,进程模式就变成内核模式。在内核模式下运行的进程可以执行机器的特权指令,而且此时该进程的运行不受用户的干扰,即使是root用户也不能干扰内核模式下进程的运行。用户进程既可以在用户模式下运行,也可以在内核模式下运行。1、Linux下进程概述(3)Linux下进程的模式和类型用户进程内核进程中断或系统调用用户态1、Linux下进程概述(4)Linux下的进程管理<1>启动进程Linux下启动一个进程有两种主要途径:手工启动和调度启动。手工启动是由用户输入命令直接启动进程,而调度启动是指系统根据用户的设置自行启动进程。<2>调度进程调度进程包括对进程的中断操作、改变优先级、查看进程状态等,在Linux下可以使用相关的系统命令实现其操作。2、Linux进程控制编程(1)进程创建<1>fork()<2>exec函数族<3>exit和_exit<4>wait和waitpid(2)Linux守护进程<1>守护进程概述<2>编写守护进程<3>守护进程的出错处理2、Linux进程控制编程(2)Linux守护进程<1>守护进程概述守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的。同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。2、Linux进程控制编程(2)Linux守护进程<2>编写守护进程下面就分4个步骤来讲解怎样创建一个简单的守护进程:创建子进程,父进程退出、在子进程中创建新会话、改变当前目录为根目录、重设文件权限掩码、关闭文件描述符。2、Linux进程控制编程(2)Linux守护进程<3>守护进程的出错处理Syslog是Linux中的系统日志管理服务,通过守护进程syslogd来维护。该守护进程在启动时会读一个配置文件“/etc/syslog.conf”。该文件决定了不同种类的消息会发送向何处。例如,紧急消息可被送向系统管理员并在控制台上显示,而警告消息则可记录到一个文件中。该机制提供了3个syslog函数,分别为openlog、syslog和closelog。通常,openlog函数用于打开系统日志服务的一个连接;syslog函数是用于向日志文件中写入消息,在这里可以规定消息的优先级、消息输出格式等;closelog函数是用于关闭系统日志服务的连接。3.4

进程间通信

1、Linux下进程间通信概述

2、管道通信

3、信号通信

4、共享内存

5、消息队列1、Linux下进程间通信概述Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的。而对UNIX发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间的通信方面的侧重点有所不同。前者是对UNIX早期的进程间通信手段进行了系统的改进和扩充,形成了“systemVIPC”,其通信进程主要局限在单个计算机内;后者则跳过了该限制,形成了基于套接字(socket)的进程间通信机制。Linux则把两者的优势都继承了下来。2、管道通信(1)管道概述这里“ps–ef|grepntp”为例,描述管道的通信过程,如图所示管道是Linux中进程间通信的一种方式。这里所说的管道主要指无名管道,它具有如下特点:1、只能用于具有亲缘关系的进程之间的通信。2、半双工的通信模式,具有固定的读端和写端。3、管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数,但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。2、管道通信(2)管道创建与关闭<1>管道创建与关闭说明管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fds[0]和fds[1],其中fds[0]固定用于读管道,而fd[1]固定用于写管道,这样就构成了一个半双工的通道。<2>管道创建函数创建管道可以通过调用pipe来实现。<3>管道创建实例创建管道非常简单,只需调用函数pipe即可。2、管道通信(3)管道读写<1>管道读写说明用pipe函数创建的管道两端处于一个进程中,由于管道是主要用于在不同进程间通信的,因此这在实际应用中没有太大意义。<2>管道读写实例在本例中,首先创建管道,之后父进程使用fork函数创建子进程,之后通过关闭父进程的读描述符和子进程的写描述符,建立起它们之间的管道通信。<3>管道创建实例创建管道非常简单,只需调用函数pipe即可。2、管道通信(4)标准流管道<1>标准流管道函数说明与Linux中文件操作有基于文件流的标准I/O操作一样,管道的操作也支持基于文件流的模式。<2>函数格式<3>函数使用实例在该实例中,使用popen来执行“ps-ef”命令。可以看出,popen函数的使用能够使程序变得短小精悍。2、管道通信(5)

FIFO<1>有名管道说明前面介绍的管道是无名管道,它只能用于具有亲缘关系的进程之间,这就大大地限制了管道的使用。有名管道的出现突破了这种限制,它可以使互不相关的两个进程实现彼此通信。<2>mkfifo函数格式<3>使用实例在写管道的程序里创建管道,并且作为main函数里的参数由用户输入要写入的内容。读管道读出了用户写入管道的内容,这两个函数用的是非阻塞读写管道。3、信号通信(1)信号概述信号是UNIX中所使用的进程通信的一种最古老的方法。它是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。(2)信号发送与捕捉发送信号的函数主要有kill()、raise()、alarm()以及pause()(3)信号的处理信号处理的主要方法有两种,一种是使用简单的signal函数,另一种是使用信号集函数组。4、共享内存(1)共享内存概述共享内存是一种最为高效的进程间通信方式。因为进程可以直接读写内存,不需要任何数据的拷贝。为了在多个进程间交换信息,内核专门留出了一块内存区。这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。(2)共享内存实现共享内存的实现分为两个步骤,第一步是创建共享内存,这里用到的函数是shmget,也就是从内存中获得一段共享内存区域。第二步映射共享内存,也就是把这段创建的共享内存映射到具体的进程空间去,这里使用的函数是shmat。到这里,就可以使用这段共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作。除此之外,当然还有撤销映射的操作,其函数为shmdt。5、消息队列(1)消息队列概述顾名思义,消息队列就是一个消息的列表。用户可以从消息队列种添加消息、读取消息等。从这点上看,消息队列具有一定的FIFO的特性,但是它可以实现消息的随机查询,比FIFO具有更大的优势。同时,这些消息又是存在于内核中的,由“队列ID”来标识。(2)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论