进程通信(hhh,那一节我的教材还标注了,了解一下,,,)
进程通信指的是进程之间的信息交换。由于进程之间的互斥和同步,需要在进程间交换一定的信息。
低级通信方式:信号量机制。
缺点:效率低,每次只能向缓冲池发送和接收一个消息;通信对用户不透明,需要程序员去实现。
进程通信的类型
1、共享存储器系统
在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
(1)基于共享数据结构的通信方式,各个进程公用某些数据结构,实现进程间的信息交换。
(2)基于共享存储区的通信方式,在内存中划出了一块共享存储区域,进程可以通过对该共享区的读或写交换信息。
2、管道通信系统
管道,就是连接一个读进程和一个写进程实现他们之间通信的一个共享文件。向管道提供输入的发送进程将大量数据送人管道。从管道接收数据的接收进程从管道接收数据。
3、消息传递系统
以格式化的消息为单位,将数据封装到消息中,借助操作系统提供的通信命令,在进程间消息传递。
4、客户服务器系统
不同计算机进程之间的通信。三种实现方法:套接字,远程过程调用,远程方法调用。
用户级线程VS内核支持线程
1、内核支持线程
在内核支持下运行的,创建、阻塞、撤销和切换都是在内核空间实现的。在内核空间设置一个线程控制块,根据控制块感知线程的存在,并加以控制。
优点:
(1)内核可以调度同一个进程的多个线程并行执行。
(2)如果进程中的一个线程被阻塞了,内核可以调度该进程中的其它线程占有处理器运行。
(3)内核支持线程有很小的数据结构和堆栈,线程切换较快,开销小。
(4)内核本身也可以多线程技术,提高系统的执行速度和效率
缺点:
对于用户级线程而言,模式切换的开销较大。需要从用户态切换到核心态。用户进程在用户态执行,而调度和管理在内核态。
2、用户级线程
在用户空间实现的,对线程的创建、撤销、同步和通信等功能,无需内核的支持。内核完全感知不到用户级线程的存在,因为线程控制块在用户空间。
优点:
(1)线程切换不需要转换到内核空间。管理数据结构均在用户的用户空间。
(2)调度算法可以是进程专用的,在每一个进程中的实现自己的线程管理和调度。
(3)用户级线程的实现与OS无关。
缺点:
(1)系统调用的阻塞问题:基于进程机制的OS中,大多数系统调用使得进程阻塞。
(2)多线程不能利用多处理机实现,内核分配给每个进程只有一个CPU。
3、组合方式
根据用户级线程和内核支持线程的连接方式的不同。
多对一模型,一对一模型,多对多模型
系统调用
为了使进程可以有条不紊地使用I/O设备,且能保护设备的安全性,不允许用户态地进程直接调用核心态地OS进程。但是另一方面,应用进程运行必须取得核心态地服务。因此在用户态引入中介过程——系统调用。
需要I/O操作时,应用程序调用系统调用,OS在捕获到系统调用后,可以将CPU状态从用户态转换到核心态,然后执行操作系统的过程,完成I/O操作。执行完成后,系统又将CPU状态从核心态转换到用户态 。