操作系统 协作进程
在本文中,您将了解操作系统中的协作进程及其各种方法。
什么是协作进程
计算机系统中有各种进程,可以是独立的或协作的进程在操作系统中运行。当系统上的任何其他进程不会影响一个进程时,它被认为是独立的。独立进程不与其他进程共享任何数据。另一方面,协作进程可能会受到系统上任何其他正在执行的进程的影响。协作进程与另一个进程共享数据。
操作系统中协作进程的优势
合作进程在操作系统中有各种优点。合作系统的一些优点如下:
1. 信息共享
合作进程可用于在各个进程之间共享信息。这可能涉及对相同文件的访问。需要一种技术,使得进程可以同时访问文件。
2. 模块化
模块化是将复杂任务分解为较小的子任务。不同的协作进程可以完成这些较小的子任务。因此,所需的任务可以更快、更高效地完成。
3. 计算加速
协作进程可用于同时完成单个任务的子任务。通过允许更快地完成任务,它提高了计算速度。但是,只有在系统包含多个处理单元的情况下才可能实现。
4. 方便性
用户需要执行多个任务,如打印,编译,编辑等。如果这些活动可以通过协作进程来管理,那将更加方便。
协作进程的并发执行需要系统能够使进程之间进行通信并同步其动作。
协作进程的方法
协作进程可以通过共享数据或消息与彼此协调。以下是方法:
1. 共享协作
进程可以通过共享数据(包括变量,内存,数据库等)进行协作。关键部分提供数据完整性,并且写入是互斥的,以避免不一致的数据。
这里,你看到一个展示合作通过共享的示意图。在这个示意图中,进程P1和P2可以通过共享数据(如文件、数据库、变量、内存等)来进行合作。
2. 通过通信进行合作
合作的进程可以通过消息进行合作。如果每个进程都等待另一个进程的消息来执行任务,可能会导致死锁。如果一个进程没有接收到任何消息,可能会导致饥饿。
在这里,您看到了一个显示通过通信进行合作的图表。在该图表中,进程P1和P2可以通过使用消息进行通信来合作。
示例:生产者-消费者问题
让我们以两个合作进程的例子来说明。这被称为生产者-消费者问题,涉及到两个进程:生产者和消费者。
生产者进程
它生成消费者要消费的信息。
消费者进程
它消费生产者生成的信息。
两个进程同时运行。如果没有要消费的内容,消费者会等待。
有一个生产者和一个消费者;生产者创建项目并将其存储在缓冲区中,而消费者则消费它。例如,打印软件生成打印机驱动程序消费的字符。编译器可以生成汇编代码,汇编器可以使用它们。此外,汇编器可能会产生由加载器使用的目标模块。
生产者进程
while(true)
{
produce an item &
while(counter = = buffer-size);
buffer[int] = next produced;
in = (in+1) % buffer- size;
counter ++;
}
消费者流程
While(true)
{
while (counter = = 0);
next consumed = buffer[out];
out= (out+1) % buffer size;
counter--;
}
在这里,
- 生产者使用in变量来确定缓冲区中的下一个空槽。
- 消费者使用out变量来确定项的位置。
- 计数器由生产者和消费者用来确定缓冲区中已填充的槽的数量。
共享资源
有两个共享资源:
- 缓冲区
- 计数器
当生产者和消费者没有按时执行时,会发生不一致情况。如果生产者和消费者都在没有任何控制的情况下并发执行,由两者使用的计数器的值将是不正确的。这些进程共享以下变量:
var n;
type item = .....;
var Buffer : array [0,n-1] of item;
In, out:0..n-1;
默认情况下,变量in和out都设置为 0 。 共享缓冲区包含两个逻辑指针in和out,它们被实现为一个循环数组。In变量指向缓冲区的下一个空闲位置,而Out变量指向缓冲区的第一个满位置。当 in=out 时,缓冲区为空;当 in+1 mode n=out 时,缓冲区被填充。