2.6 进程通信
- 进程通信:指进程之间的信息交换
- 低级通信:进程间仅交换一些状态和少量数据。如:进程之间的互斥与同步
信号量机制作为通信工具的缺点:
- 1、效率低
- 2、通信对用户不透明
高级通信:进程间可交换大量数据
- 用户可直接利用操作系统提供的一组通信命令,高效地传送大量数据的一组通信方式。
- 操作系统隐藏了进程通信的细节,对用户透明,减少了通信程序编制上的复杂性。
进程通信(高级通信)
- 一、进程通信的类型
- 二、消息传递通信的实现方法
- 三、消息传递系统实现中的若干问题
- 四、消息缓冲队列通信机制
一、进程通信的类型
高级通信机制可归结为三大类:
- 共享存储器系统
- 消息传递系统
- 管道通信系统
1、共享存储器系统
相互通信的进程间共享某些数据结构或共享存储区,通过这些空间进行通信。
-
基于共享数据结构的通信方式(低级通信)
进程公用某些数据结构,借以实现诸进程间的信息交换
实现:
公用数据结构的设置及对进程间同步的处理,都是程序员的职责。
操作系统–提供共享存储器
特点:低效。只适合传递相对少量的数据。 -
基于共享存储区的通信方式
在存储区中划出一块共享存储区,诸进程可通过对共享存储区中数据的读或者写来实现通信。
2、消息传递系统
- 进程间的数据交换,以格式化的消息为单位。
- 程序员直接利用系统提供的一组通信命令(原语)进行通信。
- 例:计算机网络:网络报文
3、管道通信
二、消息传递通信的实现方法
1、利用直接通信原语解决生产者-消费者问题
当生产者生产处一个商品(消息)后,便用send原语将消息发送给消费者进程;而消费者进程则利用receive原语来得到一个消息。若消息尚未产生出来,消费者必须等待,直至生产者进程将消息发送过来。
2、间接通信------通过信箱通信
- 信箱用来暂存发送进程发送给目标进程的消息,接收进程则从信箱中取出发送给自己的消息。
- 消息在信箱中可安全保存,只允许核准的目标用户随时读取
- 利用信箱方式,既可实时通信,又可非实时通信。
- 信箱可由操作系统创建,也可由用户进程创建,创建者是信箱的拥有者。
信箱分类:
私用信箱 用户进程自己创建 单向
公用信箱 操作系统创建 双向
共享信箱 某个进程创建
公用信箱与共享信箱的区别:创建者不同。
三、消息传递系统实现中的若干问题
1、通信链路
分类:
(1)根据通信链路的建立方式:
- 显式连接:先用“建立连接”命令(原语)建立一条通信链路;进行通信;然后用显式方式拆除链路。用于计算机网络。
- 隐式连接:发送进程无须明确提出建立链路的要求,直接利用系统提供的发送命令(原语),系统会自动地为之建立一条链路。用于单机系统。
2、消息的格式
- 单机系统环境:环境相同,消息格式简单
- 计算机网络环境:环境不同,消息的传输距离很远消息格式也比较复杂。
3、进程同步方式
在进程之间进行通信时,辅以进程同步机制,使诸进程间能协调通信。
发送进程或接收进程在完成消息的发送或接收后,都存在两种可能性:进程或者继续发送(接收)或者阻塞。
发送进程阻塞、接收进程阻塞 (紧密同步 没有缓冲区,发送进程发送的数据由接收进程直接接收)
发送进程不阻塞、接收进程阻塞 (发送速度<接收速度)
发送进程和接收进程均不阻塞 (发送速度和接收速度差不多,基本同步)
四、消息缓冲队列通信机制
原理:
(2)PCB中有关通信的数据项
2、发送原语
3、接收原语
2.7 线程的基本概念
线程的引入
1、进程的两个基本属性
(1)进程是一个可以拥有资源的独立单位
(2)进程是一个可以独立调度和分派的基本单位
由此使进程成为了能独立运行的基本单位,构成了进程并发执行的基础。
2、程序并发执行所需付出的时空开销
- 进程拥有资源,使进程的创建、撤销和调度要付出较大的时空开销。
- 这就限制了系统中所设置进程的数目,而且进程切换也不宜过于频繁,从而限制了并发程度的进一步提高。
- 因此,将进程的两个属性由系统分开处理,其中第二个属性由线程来实现。
3、线程——作为调度和分配的基本单位
- 轻型实体
- 独立调度和分派的基本单位
- 可并发执行
- 共享进程资源
线程与进程的比较
- 调度的基本单位
在引入线程的OS中,已把线程作为调度和分派的基本单位,因而线程是能独立运行的基本单位。当线程切换时,仅需保存和设置少量寄存器内容,切换代价远低于进程。在同一进程中,线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,必然会引起进程的切换。 - 并发性
在引入线程的OS中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,甚至还允许在一个进程中的所有线程都能并发执行。同样,不同进程中的线程也能并发执行。 - 拥有资源
进程可以拥有资源,并作为系统中拥有资源的一个基本单位。然而线程本身并不拥有系统资源,而是仅有一点必不可少的、能保证独立运行的资源。 - 独立性
在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。因为要防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其他资源,除了共享全局变量外,不允许其他进程的访问。但是同一进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,它们共享进程的内存地址空间和资源,如每个线程都可以访问他们所属进程地址空间中的所有地址,如一个线程的堆栈可以被其他线程读写,甚至完全清除。由一个线程打开的文件可以供其他线程读、写。 - 系统开销
线程创建和撤销所付出的开销要远低于进程,在线程切换时,其代价也远低于进程。 - 支持多处理机系统
关于线程的基本状态,就绪、执行与阻塞与进程类似
关于线程的控制块TCB,与PCB类似。
- 线程标识符,为每个线程赋予一个唯一的线程标识符
- 一组寄存器,包括程序寄存器PC,状态寄存器和通用寄存器的内容
- 线程运行状态,用于描述线程正处于何种运行状态
- 优先级,描述线程执行的优先程度
- 线程专有存储区,用于线程切换时存放现场保护信息,和与该线程相关的统计信息等
- 信号屏蔽,对某些信号加以屏蔽
- 堆栈指针,在线程运行时,经常会进行过程调用
线程控制块TCB,用于记录所有用于控制和管理线程的信息。
多线程OS的进程有以下属性
- 进程是一个可拥有资源的基本单位
- 多个线程可并发执行
- 进程已不是可执行的实体