一、进程的组成:
进程由程序、数据和进程控制块三部分组成,其中程序是进程执行的可执行代码,数据是进程所处理的对象,进程控制块记录进程的所有信息。它们存在于内存,其内容会随着执行过程的进展不断变化,在某个时刻的进程内容被称为进程映像。
二、进程控制块:
Process Control Block,PCB是系统管理进程设置的一个数据结构,用于记录进程的相关信息。PCB是系统感知和控制进程的一个数据实体。当创建一个进程时,系统为他生成PCB;进程完成后,撤销它的PCB。PCB是进程的代表,PCB存在进程存在,PCB消失进程结束。进程的生存周期中,系统通过PCB来了解进程的活动情况,对进程实施控制和调度,因此PCB是操作系统中的最重要数据结构之一。
进程控制块的内容,PCB记录了有关进程的系统所关心的所有信息,主要包括以下4方面:
(1)进程描述信息
进程描述信息用于记录一个进程的特征和基本情况,通过这些信息可以识别该进程,了解该进程的归属信息,确定这个进程和其他进程之间的关系。
系统为每个进程分配了一个唯一的整数作为进程标识号PID,通过这个PID来标识这个进程。操作系统、用户及其他进程都是通过PID来识别进程的。此外,还要描述进的家族关系,即父进程和子进程的信息。
(2)进程控制和调度信息
进程是系统运行调度的基本单位,进程控制块记录进程的当前状态、调度信息、计时信息等。系统根据这些信息确定进程的状态,实施进程调度和控制。
(3)资源信息
系统以进程为单位分配资源,并将资源信息记录在进程的PCB文件中。资源包括该进程使用的存储空间,打开的文件及设备等。通过这些信息,进程可以的到运行需要的相关程序段、数据段、使用文件、设备等资源。
(4)现场信息
现场信息一般包括CPU的内部寄存器和系统堆栈等,它们的值描述了该进程的运行状态。退出CPu的进程必须保存好这些现场状态,以便在下一次被调度时继续运行。当一个进程被重新调度运行时,要用PCB中的现场信息来恢复CPU的运行现场。现场一旦切换,下一个指令周期CPU将精准地接着上一次运行的断点处继续执行下去。
三、进程间通信的方法
1、基于Qt
(1)、共享内存
Qt提供的基于共享内存的IPC有QSharedMemory类和QSystemSemaphore类,QSharedMemory可以访问共享内存区域,以及多线程和进程的共享内存区域。而QSystemSemaphore类用于访问系统共享资源,以实现独立进程间的通信。
(2)、QProcess
跨平台类QProcess可以用于启动外部程序作为子进程,并与它们进行通信。它提供了用于监测和控制该子进程状态的API。另外,QProcess为从QIODevice继承的子进程提供了输入/输出通道。
(3)、TCP/IP
跨平台的Qt Network模块提供的类可以让网络编程更加便携和方便。它提供了高级类(例如:QNetworkAccessManager、QFtp)通信,使用特定的应用程序级协议,和较底层的类(例如:QTcpSocket、QTcpServer、QSslSocket)用于实现协议。
2、基于Linux
(1)、管道(pipe)
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
(2)、共享内存(shared memory)
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
(3)、套接字(socket)
套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
四、QT 线程之间通信
1、使用共享内存。即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的。
2、使用singal/slot机制,把数据从一个线程传递到另外一个线程。
五、进程的互斥与同步
并发进程彼此间会产生相互制约的关系。进程之间的制约关系有两种方式:
1、进程的互斥(mutex)就是禁止多个进程同时进入各自的访问同一临界资源的临界区,以保证对临界资源的排它性使用。
因共享临界资源而发生错误,其原因在于多个进程访问该资源的操作穿插进行。要避免这种错误,关键是要用某种方式来阻止多个进程同时访问临界资源,这就是互斥。以停车场车位计数器为例,当进程A运行在它的(A的)临界区内时,进程B不能进入它的(B的)临界区执行,进程B必须等待,直到A离开A的临界区后,B才可进入B的临界区运行。
2、进程的同步(synchronization)是指进程间为合作完成一个任务而互相等待、协调运行步调。
例如:两个进程合作处理一批数据,进程A先对一部分数据进行某种预处理,然后通过缓冲区传给进程B做进一步的处理。这个过程要循环多次直至全部数据处理完毕
六、线程与进程
进程是操作系统分配资源的单位,线程是调度的基本单位,线程之间共享进程资源
几乎所有现代操作系统都允许一个进程包含多个线程。每个线程是CPU使用的一个基本单元,它包括线程ID、程序计数器、寄存器组和堆栈。
进程与同一进程的其他线程共享代码段、数据段和其他操作系统资源,如打开文件和信号。每个传统或重量级进程只有单个控制线程。如果一个进程具有多个控制线程,那么它能同时执行多个任务。