文章目录
Tips
一、进程的控制
进程的控制主要是指对进程状态转换的控制,状态转换一旦启动就不允许被打断,所以状态转换是一个原语操作,不可细分,不可打断。
二、进程通信(IPC)
进程通信是指两个进程间的数交互,比如:各应用程序的分享功能,具体点,你在抖音看到有趣的视频可以直接点分享按钮发给你的小伙伴,这个过程就是抖音进程和微信进程的数据交互。
需要特别指出的是:进程通信是需要操作系统的支持
Q2: 为什么进程通信是需要操作系统的支持??
A2: 进程是分配系统资源的单位(包括内存地址空间),因此每个进程的内存地址空间都是相互独立的,并且为了保证数据安全,一个进程不能直接访问另一个进程的地址空间。
以下提供了三种进程通信的方式:
1、共享存储
(1)基于存储区的共享(高级通信)
这种共享方式是高度*的,操作系统只负责将一片存储区划分出来,具体在哪存储,存储什么都是由进程间决定的。
Q: 进程间是如何决定的?
(2)基于数据结构的共享(低级通信)
在这种共享方式下,操作系统不仅负责划分存储区,而且还规定了存储区是什么类型(指定数据类型),进程只能按照规定读或写相应数据结构的数据。
2、消息传递
这种通信方式需要对待传输数据进行格式化(即对数据进行一定形式下封装):
(1)直接通信方式
操作系统内核的地址空间中管理着各个进程的PCB,PCB里外加包含了一个特殊的队列——消息队列。
发送原语: send(发给谁,发什么内容)
接收原语: receive(来自谁的,传来的内容)
进程p通过发送原语将待发送的msg复制到操作系统统一管理的进程Q的PCB中,而进程Q的接收原语会从PCB中检查由进程p发来的内容,并将其复制回进程Q的地址空间中。
(2)间接通信方式
待发送消息的进程可通过系统调用在操作系统的地址空间中申请一个“信箱”,这个信箱就称为了两进程间通信的媒介,中转站。
直接和间接两种方式的区别:
直接通信方式是需要指明由谁接收,由谁发送的,而间接通信方式都是指明发送到哪个信箱、到哪个信箱获取。
本质上讲,
直接通信方式是直接将内容发送给对方的,但是因为处于安全考虑,只能发送到对方留存在操作系统地址空间的PCB中。
比如:网购,店家发货到快递点由买家来取,这是间接通信,若这时候买家在快递点有朋友,让买家的朋友代他签收了,买家再找朋友取,这就是直接通信。
需要注意的是,无论是直接通信还是间接通信,消息都不能直接到达接收方的手中,在直接通信方式中无论是PCB还是亲戚,其实都可以看做是接收方了,因为它和真正的接收方式对应关系的。