分布式操作系统进程同步分析
- 格式:docx
- 大小:18.86 KB
- 文档页数:7
操作系统实验二实验报告一、实验目的本次操作系统实验二的主要目的是深入理解和掌握进程管理的相关概念和技术,包括进程的创建、执行、同步和通信。
通过实际编程和实验操作,提高对操作系统原理的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程环境为 Visual Studio 2019。
三、实验内容及步骤(一)进程创建实验1、首先,创建一个新的 C++项目。
2、在项目中,使用 Windows API 函数`CreateProcess`来创建一个新的进程。
3、为新进程指定可执行文件的路径、命令行参数、进程属性等。
4、编写代码来等待新进程的结束,并获取其退出代码。
(二)进程同步实验1、设计一个生产者消费者问题的模型。
2、使用信号量来实现生产者和消费者进程之间的同步。
3、生产者进程不断生成数据并放入共享缓冲区,当缓冲区已满时等待。
4、消费者进程从共享缓冲区中取出数据进行处理,当缓冲区为空时等待。
(三)进程通信实验1、选择使用管道来实现进程之间的通信。
2、创建一个匿名管道,父进程和子进程分别读写管道的两端。
3、父进程向管道写入数据,子进程从管道读取数据并进行处理。
四、实验结果及分析(一)进程创建实验结果成功创建了新的进程,并能够获取到其退出代码。
通过观察进程的创建和执行过程,加深了对进程概念的理解。
(二)进程同步实验结果通过使用信号量,生产者和消费者进程能够正确地进行同步,避免了缓冲区的溢出和数据的丢失。
分析结果表明,信号量机制有效地解决了进程之间的资源竞争和协调问题。
(三)进程通信实验结果通过管道实现了父进程和子进程之间的数据通信。
数据能够准确地在进程之间传递,验证了管道通信的有效性。
五、遇到的问题及解决方法(一)在进程创建实验中,遇到了参数设置不正确导致进程创建失败的问题。
通过仔细查阅文档和调试,最终正确设置了参数,成功创建了进程。
(二)在进程同步实验中,出现了信号量使用不当导致死锁的情况。
进程间同步的几种方法进程间同步是指两个或多个进程之间进行协调,以确保它们能够正确地执行。
这是多任务操作系统中的重要问题,因为进程之间共享资源,包括内存、文件和网络连接等。
进程同步的关键是确保一组进程在处理共享资源时,能够避免发生竞态条件(Race Condition)和死锁(Deadlock)。
竞态条件指多个进程同时访问共享资源,导致不正确的结果。
死锁指多个进程互相等待,导致它们都无法继续执行。
1. 互斥锁互斥锁是最常见的同步方法之一,它被用来保护共享资源,确保同一时刻只有一个进程可以访问它。
当一个进程获取了锁,其他进程必须等待,直到锁被释放。
在 POSIX 系统中,互斥锁可以通过 pthread_mutex_t 数据类型实现。
我们可以使用pthread_mutex_init() 函数初始化锁,使用 pthread_mutex_lock() 函数获取锁,使用pthread_mutex_unlock() 函数释放锁。
下面是一个例子,展示了如何使用互斥锁同步两个进程对共享变量的访问:```c#include <pthread.h>#include <stdio.h>int count = 0;pthread_mutex_t lock;void *increment(void *arg) {for (int i = 0; i < 1000000; i++) {pthread_mutex_lock(&lock); // 获取锁count++;pthread_mutex_unlock(&lock); // 释放锁}return NULL;}在上面的例子中,我们创建了两个线程,它们分别对共享变量 count 进行了一百万次的递增操作。
我们使用了互斥锁来保护 count 变量,确保同一时刻只有一个线程可以访问它。
2. 信号量3. 条件变量条件变量可以被用来支持更高级的同步机制,如互斥锁和信号量。
分布式系统架构中的数据一致性问题与解决方案在当今互联网时代,分布式系统架构被广泛应用于各个领域,尤其是大型网站、云计算和物联网等。
然而,分布式系统面临的一个核心挑战就是数据一致性问题。
本文将探讨分布式系统中数据一致性问题的原因,并介绍一些常见的解决方案。
一、数据一致性问题的原因1. 网络延迟:在分布式环境下,系统中的不同节点之间通过网络进行通信。
由于网络延迟等原因,数据在不同节点之间的同步存在一定的延迟,容易导致数据一致性问题。
2. 节点故障:分布式系统中的节点数量通常较多,节点之间可能存在软件或硬件故障。
节点故障会导致数据同步失败,进而引发数据不一致的问题。
3. 并发操作:分布式系统中的节点通常是并发运行的,多个操作同时对同一份数据进行读写操作,容易导致数据不一致的情况发生。
二、数据一致性问题的解决方案1. 强一致性强一致性要求系统中的所有节点在任意时刻都能够访问到一致的数据副本。
为了实现强一致性,可以采用以下方法:(1)原子操作:将多个操作包装成原子性的操作,要么全部执行成功,要么全部执行失败。
例如,可以使用分布式事务来保证数据一致性。
(2)主从复制:将数据分为主节点和从节点,主节点负责处理写操作,从节点负责复制主节点的数据并处理读操作。
主节点和从节点之间通过同步协议保持数据一致。
(3)多数投票:在系统中的多个节点中,若有超过半数的节点达成一致意见,则视为数据同步成功。
通过多数投票来保证数据的一致性。
2. 弱一致性弱一致性允许系统在某一时间点上出现数据不一致的情况,但最终数据会达到一致。
为了实现弱一致性,可以采用以下方法:(1)最终一致性:系统允许一段时间内的数据不一致,但最终会通过一定的机制使得数据最终达到一致。
例如,可以使用版本向量或向量时钟来记录和追踪数据的变更。
(2)基于时间戳:为每个操作添加时间戳,并根据时间戳进行数据的读写操作。
通过时间戳来解决数据冲突和同步的问题。
(3)可扩展性设计:通过设计合理的分布式算法和架构,将大规模的数据分片存储,并保持各个分片的数据一致性。
分布式系统中的数据一致性问题与解决方案随着互联网和移动互联网的迅猛发展,分布式系统的应用越来越普遍,如今的互联网应用大多数都采用了分布式系统技术。
分布式系统的优势在于可以将同一个应用分配到不同的服务器上,从而实现负载均衡和提高系统的可用性、可扩展性和性能等。
但是,分布式系统也带来了很多问题,其中数据一致性问题是最为突出的。
数据一致性问题是由于分布式系统中的数据存在多副本,不同副本的数据更新可能不同步导致的。
简单来说,就是在分布式系统中数据的读写操作不是原子操作,可能会因为网络延迟、硬件故障等原因造成数据不一致的情况。
例如,一个用户在A机器上更新了数据,而B机器上的数据副本还没有及时更新,此时如果其他用户在B机器上读取该数据就会出现错误。
要解决分布式系统中的数据一致性问题,通常有以下几种方案:1. 强一致性方案强一致性方案是指,在分布式系统中,所有的数据副本都必须保持一致,即同一时刻读取到所有数据副本的内容是相同的。
这样做的好处是程序员不必关心数据的一致性问题,但是强一致性方案对分布式系统的计算能力、网络延迟、存储能力等有较高要求,同时也会带来较高的成本。
2. 弱一致性方案弱一致性方案是指,在分布式系统中允许不同副本数据之间出现一定的延迟和不一致,但最终会达到一致状态,即一定时间内数据的可见性是不确定的。
这种方案对于分布式系统的计算和存储要求相对较低,能够有效提升系统的性能和并发度,但是需要针对具体应用场景做出量化的数据可见性处理。
3. 提高硬件可靠性提高硬件可靠性是指在分布式系统中采用冗余设计。
例如,保证每个节点都有多份数据副本,即可保障即使出现某个节点的错误,一般情况下也不会影响分布式系统的整体运作。
4. 副本之间进行同步在分布式系统中,各个数据副本之间必须通过某种方法进行同步。
典型的同步方案包括主从复制、群集复制、异步复制和同步复制等,根据具体的应用场景、性能要求和数据可见性等选择合适的同步方案。
实验三进程同步一、实验目的:1.了解进程和线程的同步方法,学会运用进程和线程同步方法来解决实际问题;2.了解windows系统下Win32 API或Pthread信号量机制的使用方法;二、实验预备内容:1.对书上所说基于信号量的有限缓冲的生产者-消费者问题;2.对于信号量的概念有大概的了解,知道如何用信号量的wiat()和signal()函数如何取消应用程序进入临界区的忙等;三、实验环境说明:此实验在Win7(32位) CodeBlocks环境下实现,采用WinAPI的信号量机制。
四、实验内容:设计一个程序解决有限缓冲问题,其中的生产者与消费者进程如下图所示。
在Bounded-Buffer Problem(6.6.1节)中使用了三个信号量:empty (记录有多少空位)、full(记录有多少满位)以及mutex(二进制信号量或互斥信号量,以保护对缓冲区插入与删除的操作)。
对于本项目,empty和full将采用标准计数信号量,而mutex将采用二进制信号量。
生产者与消费者作为独立线程,在empty、full、mutex的同步前提下,对缓冲区进行插入与删除。
本项目可采用Pthread或Win32 API。
(本实验采用Win32 API)五、程序设计说明:1.全局变量:定义缓冲区数组及其环形队列表达方式,定义mutex、empty、full 三个信号量。
empty记录缓冲区有多少个空位;full记录缓冲区有多少个满位;mutex作为互斥信号量,保护对缓冲区插入或删除的操作。
具体定义如下:定义生产者、消费者线程结构和包含的信息:(由于题目中没有要求,因此只定义了编号一个变量)2.缓冲区:缓冲区是一个元数据类型为buffer_item(可通过typedef定义)的固定大小的数组,按环形队列处理。
buffer_item的定义及缓冲区大小可保存在头文件中:A.insert_item():先判断缓冲区是否已满,不满则向缓冲区中插入元素;B.remove_item()先判断缓冲区是否为空,不空则从缓冲区中删除元素;3.生产者线程:生产者线程交替执行如下两个阶段:睡眠一段随机事件,向缓冲中插入一个随机数。
分布式操作系统的定义在当今数字化的时代,计算机技术不断发展,操作系统作为计算机系统的核心软件,也在不断演进和创新。
其中,分布式操作系统就是一种具有重要意义和广泛应用前景的操作系统类型。
要理解分布式操作系统,首先得明白什么是“分布式”。
简单来说,“分布式”就是将一个大的任务或者系统分解成多个小的部分,然后将这些小部分分布在不同的地理位置或者计算节点上,通过网络进行协同工作,以实现共同的目标。
那么分布式操作系统,就是管理和控制这些分布在不同节点上的计算资源,使得它们能够像一个统一的系统一样协同工作,为用户提供服务。
它不再像传统的单机操作系统那样只管理一台计算机的资源,而是要面对众多分散的计算机或者计算节点。
想象一下,有一个大型的企业,它在不同的城市甚至不同的国家都有分支机构,每个分支机构都有自己的计算机和服务器。
如果没有分布式操作系统,要让这些分散的计算资源协同工作,实现数据共享、任务分配和资源优化利用,将会是一件极其困难的事情。
而分布式操作系统的出现,就解决了这个问题。
分布式操作系统具有几个显著的特点。
首先,它具有透明性。
这意味着用户在使用分布式系统时,感觉不到系统中的资源是分布在不同的地方的。
就好像你在使用一个超级强大的单一计算机,而不是一堆分散的计算机。
比如,当你存储文件或者运行程序时,你不需要关心数据到底存储在哪个节点上,系统会自动为你处理这些细节。
其次,分布式操作系统具有可靠性和容错性。
由于系统中的资源分布在多个节点上,如果某个节点出现故障,系统可以自动将任务重新分配到其他正常的节点上,从而保证整个系统的正常运行。
这就好比是一个团队,如果有一个成员生病了,其他人可以顶替他的工作,不至于让整个团队的任务停滞。
再者,分布式操作系统具有可扩展性。
随着企业或者组织的发展,计算需求不断增加,可以很容易地将新的计算节点加入到系统中,而不需要对整个系统进行大规模的改造。
从功能上来说,分布式操作系统主要负责资源管理、任务分配、进程通信和同步等工作。
进程同步与互斥总结
进程同步和互斥是操作系统中非常重要的概念,它们都是为了保证多个进程能够在正确的时间顺序和正确的方式下运行。
进程同步是指多个进程之间协调执行的过程,而互斥是指多个进程之间竞争有限资源的过程。
以下是关于进程同步与互斥的一些总结:
1. 进程同步方式:
- 信号量:通过对共享资源的访问进行限制,实现多个进程之间的同步。
- 互斥锁:通过对共享资源的访问进行互斥,实现多个进程之间的同步。
- 条件变量:通过对进程状态的检查,实现多个进程之间的同步。
2. 进程互斥方式:
- 临界区:多个进程同时访问共享资源时,只允许一个进程访问。
- 互斥量:多个进程同时访问共享资源时,通过加锁和解锁来实现互斥。
- 读写锁:多个进程同时访问共享资源时,允许多个进程同时读取,但只允许一个进程写入。
3. 进程同步与互斥的优缺点:
- 信号量:优点是可以同时处理多个进程,缺点是容易出现死锁。
- 互斥锁:优点是简单易用,缺点是只能处理两个进程之间的同步。
- 条件变量:优点是可以检查进程状态,缺点是只能处理两个进
程之间的同步。
- 临界区:优点是简单易用,缺点是只能处理两个进程之间的同步。
- 互斥量:优点是可以同时处理多个进程,缺点是容易出现死锁。
- 读写锁:优点是可以允许多个进程同时读取,缺点是会出现写入延迟的问题。
综上所述,进程同步与互斥是操作系统中非常重要的概念,需要根据具体的场景选择适合的同步方式或互斥方式来保证多个进程之
间的协调执行和有限资源的竞争。
进程同步问题总结进程同步问题主要涉及到并发进程之间的协作和同步,以实现多进程的协同工作。
以下是进程同步问题的主要总结:1.进程同步的概念:进程同步是一种协调多个进程运行顺序的机制。
它使得进程能够在正确的时间点上,按照一定的顺序进行交互和协作。
2.进程同步的必要性:在多进程环境中,如果不同进程的执行顺序不协调,就可能导致数据不一致、竞争条件等问题。
进程同步可以解决这些问题,保证多进程环境下的正确性和可靠性。
3.进程同步的主要方法:a) 信号量(Semaphore):信号量是一种计数器,用于控制多个进程对共享资源的访问。
信号量的值表示当前可用的共享资源数量。
通过设置信号量的初始值和使用P、V操作(或称为wait和post操作),可以实现进程的同步和互斥。
b) 互斥锁(Mutex):互斥锁是一种同步机制,用于防止多个进程同时访问共享资源。
当一个进程获得锁时,其他进程将被阻塞,直到锁被释放。
c) 条件变量(Condition):条件变量用于实现进程间的条件等待。
当一个进程需要等待某个条件成立时,它会使用条件变量的wait操作阻塞自己。
当另一个进程改变了条件并通知等待的进程时,被阻塞的进程将被唤醒。
d) 事件(Event):事件是一种同步机制,用于通知其他进程某个事件已经发生。
事件通常分为信号事件和广播事件。
信号事件只通知一个进程,而广播事件通知所有等待该事件的进程。
4.死锁问题:在进程同步过程中,如果多个进程互相等待对方释放资源,就会产生死锁问题。
避免死锁的方法包括:避免循环等待、按顺序申请资源、设置超时时间等。
5.进程同步的应用:进程同步广泛应用于操作系统、并发程序设计、网络通信等领域。
例如,在操作系统中,进程同步可以用于实现进程调度、任务管理、文件系统等重要功能。
在并发程序设计中,进程同步可以用于实现多线程的协同工作、数据访问控制等功能。
在网络通信中,进程同步可以用于实现数据传输、远程过程调用等功能。
分布式系统中数据同步算法的研究与优化1. 前言分布式系统在现代的大型网络中广泛应用,它可以通过多台计算机分别处理一项任务,实现高效的运转。
但是,不同的计算机之间需要相互协调,需要进行数据的同步,才能协同完成一个完整的任务。
因此,数据同步算法在分布式系统中具有重要的地位。
本文将介绍数据同步算法在分布式系统中的研究现状和优化策略。
2. 数据同步算法的研究现状2.1 主流数据同步算法主流的数据同步算法有以下几种:(1)基于时间戳的算法这种算法的核心思想是,保证任意两台计算机所保存的数据在相同时间下都是一样的。
在时间戳算法中,每台计算机都维护着一个全局唯一的时间戳,数据的更新和同步都依靠着时间戳进行管理。
在更新数据时,每个数据项都会被添加一个时间戳,这样其他计算机在接收到这个数据时,只有该时间戳比自己上一次接收到的时间戳晚,才会执行数据同步操作。
(2)基于锁的算法基于锁的算法是利用锁机制来保证数据的同步,每次只有获得锁的用户才能更新数据,其他用户必须等待。
当释放锁时,其他用户就可以获得锁,进行数据的更新操作。
这样的算法可以保证数据的一致性,但是对于高并发的情况会导致锁冲突,降低系统性能。
(3)基于版本号的算法基于版本号的算法又叫做乐观锁算法,它通过版本号来判断数据是否已经被更新,从而保持数据的一致性。
在数据更新时,系统会为每个新的数据项添加一个版本号,其他用户在更新该数据时必须检查版本号是否一致,如果版本号不一致,则说明该数据已经被其他用户更新,当前用户不允许进行数据更新操作。
2.2 数据同步算法的局限性尽管以上算法具有一定的优势,但是它们在应对一些特定场景下依然存在很大的局限性,例如:(1)网路延迟的问题由于分布式系统中的数据传输需要用到网络,而网络上的数据传输有其固有的延迟,这就可能导致数据的不一致。
例如,当有两台计算机同时对一个数据项进行更新,由于网络延迟,两台计算机无法及时地获取对方的更新操作,从而造成数据的不一致。
分布式操作系统进程
同步分析
杨利辛2015022497
2015 10 15
在分布式操作系统中,为实现进程的同步,首先要对系统中发生的事件进行排序,还要有良好的分布式同步算法。
本文对分布式操作系统中的一些常见算法进行了分析,从而解析才能使进程在分布式操作系统中更加正确有效地协同工作。
在分布式系统中,处于不同物理位置的若干进程通过传递消息相互通信,进行协同工作完成同一任务。
工作过程中,进程产生了大量的事件和消息,这些事件和消息在时间上的先后顺序对工作正确有效的完成往往是有影响的。
由于进程所处的物理位置不同带来的时钟差异如各地时钟值的差异和时钟运行精度的差
异等)和网络传输延时等方面的原因,一个进程所看到的系统内事件和消息的先后顺序很可能与它们的实际顺序是不一致的,这样就带来了问题
布式系统都要求系统内的事件和消息的产生时间是精确的,甚至有些系统的任务结果是否正确直接有赖于这些精确的时间值,比如大型分布式数据库系统、电子商务和证券交易等金融业服务系统、分布式文件系统等。
在这些系统中,各进程间的同步就必须达到基于物理时钟同步的程度。
以证券系统为例,如果客户机的时钟与服务器的时钟不同步,那么客户按照自己的时钟所提出的服务请求将会被服务器提早或推迟执行,这可能会给客户带来巨大的损失。
这时,客户的服务请求是否被顺序公平的响应已失去了意义。
在单机条件下,诸进程运行于同一个处理机和内存环境中,进程通信十分简单。
进程之间可以借助于“共享存储器”进行直接通信。
而在多机条件下,相互合作的进程可能在不同的处理机上运行,进程间的通信涉及处理机的通信问题。
在松散耦合系统中,进程间通信还可能要通过较长的通信信道,甚至网络。
因此,在多机条件下,广泛采用间接通信方式,即进程间是通过消息进行通信的。
在分布式操作系统中,为了实现进程的同步,首先要对系统中发生的事件进行排序,还要有良好的分布式同步算法。
首先,看事件排序问题。
在单处理机系统及紧密耦合的多处理机系统中,由于共有一种时钟又共享存储器,确定两个事件的先后次序比较容易。
而在分布式系统中,既无共用时钟,又无共享存储器,自然也就难于确定两个事件发生的先后次序了。
这里所说的排序,既包括要确定两个事件的偏序,也要包括所有事件的全序。
Lamport于1978年提出的一个算法。
该方法建立在以下基础上:(1)事件之间存在的偏序;
(2)为每一个进程设置一个逻辑时钟。
所谓逻辑时钟,是指能为本地启动的所有活动,赋予一个编号的机构,他可以用计数器来实现。
在系统中,每一个进程都拥有自己的逻辑时钟c。
在一个系统的逻辑时钟系统,应满足条件:
对于任何活动a(ini)和b(inj),如果a->b,则相应的逻辑时钟
c(i,a)<b(j,b)。
其中i,j表示处于不同物理位置的进程。
为了满足上述条件,必须遵循以下规则:
第一,根据活动发生的先后,赋予每个活动唯一的逻辑时钟值。
第二,若活动a是进程i发送的一条消息m,消息m中应包含一个时间邮
戳T(m)=c(i,a);当接受进程j在收
到消息时,如果其逻辑时钟c(j,b)<c(i,a),则应当重置c(j,b)大于或等于c(j,b)。
这里我们对第二个规则作些说明。
由于每个进程都拥有自己的逻辑时钟,这些时钟的运行并非同步,因此可能出现这种情况:一个进程i发送的消息中所含的逻辑时钟c(m)=100,而接收进程j在收到此消息时的逻辑时钟
c(j)=96,这显然违背了全序的要求,因为发送消息事件A和接收事件B之间存在着A->B的关系。
因而提出了第二项规则,用于实现逻辑时钟的同步。
根据这个规则,应该调整进程j的时钟,使c(j)>=c(m),例如c(j)=c(m)+1=101。
其次,看同步算法。
在所有的同步算法中,都包含以下四项假设:
(1)每个分布式系统具有N个节点,每个节点有唯一的编号,可以从1到N。
每个节点中仅有一个进程提出访问共享资源的请求。
(2)按序传送信息。
即发送进程按序发送消息,接收进程也按相同顺序接收消息。
(3)每个消息能在有限的时间内被正确地传送到目标进程。
(4)在处理机间能实现直接通信,即每个进程能把消息直接发送到指定的进程,不需要通过中转处理机。
在同步算法中,相对比较著名的算法还有Ricart and Agrawla算法和Mackawa(Square-Root)算法等。
1、Ricart and Agrawla算法
Ricart等提出的分布式同步算法,同样基于Lamport的事件排序,但又做了些修改,使每次访问共享变量时,仅需发送2(N-1)个消息。
下面是对
Ricart and Agrawla算法的描述。
(1)当进程Pi要求访问某个资源时,它发送一个Request(Ti,i)消息给所有其他进程。
(2)当进程Pj收到Request(Ti,i)消息后,执行如下操作:●若进程Pj 正处在临界区中,则推迟向进程Pi发出Reply响应;●若进程Pj当前并不要求访问临界资源,则立即返回一个有时间邮戳的Reply消息;
●若进程Pj也要求访问临界资源,而在消息Request(Ti,i)中的邮戳时间早于(Tj,i),同样立即返回一个有时
间邮戳的Reply消息;否则,Pj保留Pi发来的消息Request(Ti,i),并推迟发出Reply响应。
(3)当进程Pi收到所有其他进程发来的响应时,便可访问该资源。
(4)当进程释放该资源后,仅向所有推迟发来Reply消息的进程发送Reply消息。
该算法能够获得较好的性能:能够实现诸进程对共享资源的互斥访问;能够保证不发生死锁,因为在进程--资源图中,不会出现环路;不会出现饥饿现象,因
为对共享资源的访问是按照邮戳时间排序的,即按照FCFS原则服务的;每次对共享资源访问时,只要求发2(N-1)个消息。
下图说明了进程在访问共享资源时的状态转换当然这个算法也有一定的问题:第一,每个要求访问共享资源的进程,必须知道所有进程的名字,因此,一旦有新进程进入系统,它就将通知系统中所有进程。
第二,如果系统中有一个进程失败,则必然会使发出Request消息的进程无法收到全部响应,因此,系统还应该具备这样的功能,即一旦某个进程失效,系统能将该进程的名字通知其他进程。
2、令牌传送法
为实现进程互斥,在系统中可设置令牌(token),表示存取权力。
令牌本身
是一种特殊格式的报文,通常只有一个字节的长度,它不断地在由进程组成的逻辑环(logical ring)中循环。
环中的每一个进程只有唯一的前驱者(prodecessor)和唯一的后记者(successor)。
当环路中的令牌循环到某个进程并被接收时,如果该进程希望进入临界区,它便保持该令牌,进入临界区。
一旦它推出临界区,再把令牌传送给后继进程。
如果接收到令牌的进程并不要求进入临界区,便直接将令牌传送给后继进程。
由于逻辑环中只有一个令牌,因此也就实现了进程的互斥。
使用令牌时,必须满足以下两点要求:
(1)逻辑环应该具有及时发现环路中某进程失效或退出,以及通信链路故障的能力。
一旦发现上述情况,应立即撤消该进程,或重构逻辑环。
(2)必须保证逻辑环中,在任何时候都有一个令牌在循环,一旦发现令牌丢失,应立即选定一个进程产生新令牌。
利用令牌传送法实现互斥,所需要的消息数目是不定的。
因为,不管是否有进程要求进入其临界区,令牌总是在逻辑环中循环,当逻辑环中所有进程都要求进入临界区时,平均每个进程访问临界区只需要一个消息。
但如果在令牌循环一
周的时间内,只有一个进程要求进入临界区,则等效地需要N个消息(N是逻辑环中进程数)。
即使无任何进程要进入临界区,仍需不断的传输令牌。
另一方面,在令牌传送法中,存在着自然的优先级关系,即上游站具有更高的优先级,它能够优先进入临界区。
就好象FCFS队列一样,环路中的进程可依次进入自己的临界区,因而不会出现饥饿现象。
进程同步是分布式系统尤其是松耦合分布式系统中一个非常重要的问题,对系统的工作效率和工作精度等性能指标有着至关重要的影响。
因此,必须在系统中采用某种机制来实现进程间的同步。
不同的系统对进程之间同步程度的要求是不相同的,某些分布式系统中,要求进程之间达到物理时钟上的同步,才能正确有效地协同工作。
目前,无论是在国际上还是在国内, 有关分布式系统的理论和实践都是处在探索、研究和发展阶段。
但分布式系统是系统结构的总趋势。
因此,如何借助于现有的计算机科学研究成果,把常用的机种组成分布式系统,将是一个具有重大实用意义的课题。