精华内容
下载资源
问答
  • 操作系统——进程同步与互斥

    千次阅读 2019-10-21 22:13:19
    文章目录进程同步与互斥简介进程间合作进程间合作的问题竞争条件原子操作临界区相关的几个概念忙等待的互斥基于硬件的同步解决办法:屏蔽中断基于软件的同步解决方法严格轮换法Peterson解法N线程的软件方法基于软件...

    进程同步与互斥

    简介

    多线程并发会导致资源竞争。

    同步即协调多线程对共享数据的访问,保证任何时刻都只能有一个线程执行临界区代码。

    互斥是解决进程同步的方式。

    进程间合作

    独立进程是指一个进程在运行过程中不会与其他进程进行交互的进程。

    但是,进程在运行的过程中不可避免的要进行进程间合作。

    进程合作的优势:

    • 共享资源
      • 一台电脑,多个用户
      • 一个银行存储余额,多台ATM机
      • 嵌入式系统(机器人控制:手臂和手的协调)
    • 加速
      • I / O操作和计算可重叠
      • 多处理机——将程序分成多个部分执行
    • 模块快
      • 将大程序分解成小程序
        • 如编译系统。
      • 视系统易于扩展

    进程间合作的问题

    进程间合作要避免不确定性和不可重现性。由于进程调度的不确定性,因此进程的一个操作可能被打断。

    进程间通信要解决三个问题:

    1. 一个进程如何将信息传递给另一个进程
    2. 确保多个进程在关键活动中不会交叉,即进程互斥问题。
    3. 保证正确的访问顺序,即进程同步问题。

    竞争条件

    竞争条件是说多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序。

    案例:

    • 通过调用函数fork来创建一个进程。
      • new_pid = next_pid++;
      • 这一条语句翻译成汇编代码会是四句,因此要把他们当成一个原子操作去执行。
    • 两个程序并发执行访问并更改一个变量x。

    原子操作

    原子操作是指一次不存在任何中断或者失败的执行。

    • 该执行成功结束
    • 或者根本没有执行
    • 并且不应该出现任何部分执行的状态

    但是实际上操作往往不是原子的

    • 有些看上去是原子操作,但是实际上不是,如x++,实际上此条语句由三条汇编语言组成。
    • 有时甚至连单条机器指令都不是原子的,如Pipiline、super-scalar、out-of-order、page fault等。

    操作系统需要利用同步机制在进程并发执行的同时保证一些操作是原子操作。

    临界区相关的几个概念

    临界区是指多个程序访问临界资源的一段代码。也可以说是进程访问临界资源的一段需要互斥的代码。

    1. 在进入临界区前检查是否可进入临界区。
    2. 若可以进入,则设置相应标志表示正在访问临界区。
    3. 在访问完成之后将标志恢复为可访问临界区。
    4. 然后去执行非临界区代码。

    要避免竞争条件,即要找出某个途径来阻止多个进程同时读写共享数据,提出一种解决方案为互斥,即以某种手段保证当一个程序在使用一个共享爱那个文件或变量时,其他进程不能做同样的操作。

    互斥是指当一个进程处于临界区并访问共享资源时,没有其他进程会处于临界区并访问任何相同的共享资源。

    死锁是指多个进程相互等待完成特定任务二最终无法将自身任务进行下去。

    饥饿是指一个可执行的进程被调度器持续忽略,以至于虽然处于可执行状态却不被执行。

    避免竞争条件即使临界区中只能有一个进程。

    一个好的解决竞争条件的方案需要满足下列四个条件:

    1. 任何两个进程不能同时处于临界区
    2. 不应对CPU的速度和数量做任何假设
    3. 临界区外执行的进程不得阻塞其他进程
    4. 不得使进程无限期等待进入临界区
    5. 不能进入临界区的进程应该释放CPU资源(可选)。

    忙等待的互斥

    连续测试一个变量直到某个值出现为止称为忙等待,用于忙等待的锁称为自旋锁

    下列几种方式都可以保证任意两个进程不同时处于临界区。

    基于硬件的同步解决办法:屏蔽中断

    单处理器系统中,最简单的方法是使每个进程刚进入临界区后就立即屏蔽所有中断,并在就要离开之前再打开中断。屏蔽中断后,时钟中断也会被屏蔽,而CPU只有发生时钟中断或其他中断时才会进行进程切换,因此在屏蔽中断之后就不会被切换到其他进程。

    但是这种方式有一个问题:若此进程不打开中断的话其他进程就都无法执行。

    而且若是处于多处理器系统中,其他的CPU也可以将进程调度,从而还是无法避免多个进程同时访问临界区的问题。

    因此,屏蔽中断对用户进程不是一种合适的通用互斥机制。

    总结如下:

    • 硬件将中断处理延迟到中断被启用之后
    • 现代计算机体系结构都提供指令来实现禁用中断
      • 首先保存当前CPU状态
      • 然后禁用中断,访问临界区
      • 最后恢复CPU状态

    缺点:

    • 禁用中断之后,进程无法被停止。
      • 整个系统都会为之停下来
      • 可能导致其他进程处于饥饿状态
    • 临界区可能很长
      • 无法确定响应中断所需的时间

    基于软件的同步解决方法

    通过共享一些共有变量来同步进程的行为。

    严格轮换法

    在这里插入图片描述

    turn用来表示哪一个进程进入临界区,假设只有两个进程,进程0执行a代码,进程1执行b代码,此时考虑两种情况:

    1. 一个进程连续两次进入临界区,第一次进入临界区时发现turn是0,因此进入,在执行完临界区代码之后将turn的值设置为1,那么他在下次进入临界区之前发现turn不是0,因此一直循环等待,但此时临界区中是没有进程在执行的。
    2. 进程0先被调度执行,此时turn的值为0,因此进程0进入临界区执行代码,在它执行完临界区代码退出后,将turn的值更改为1,此时进程1被调度进入CPU执行,发现此时turn的值为1,因此执行临界区的代码,当临界区代码执行完毕之后将要更改turn的值时,CPU调度进程0进入CPU执行,但是此时turn的值还是为1,因此进程0不能执行临界区代码,但是此时临界区却没有进程在执行,因为违反了上面的第三条规则:为处于临界区的进程不得阻塞其他进程。

    由此可见,此种方式也不合适。

    Peterson解法

    在这里插入图片描述

    此算法可以解决两个进程的同步问题。

    N线程的软件方法

    进程Pi要等待从turn到i-1的进程都退出临界区后访问临界区。

    进程Pi退出时将turn给下一个想要进入的进程Pj。

    基于软件解决办法的分析

    • 复杂
      • 需要两个进程之间共享数据项
    • 需要忙等待
      • 浪费CPU时间

    更高级的抽象方法

    简介

    硬件提供了一些同步原语

    • 中断禁用,原子操作指令等

    操作系统提供更高级的编程抽象来监护进程同步

    • 如:锁、信号量
    • 用硬件原语来创建。

    原子操作指令

    现代CPU体系结构都提供一些特殊的原子操作指令。

    测试和置位(Test-and-set)指令

    • 从内存单元中读取值
    • 测试该值是否为1,然后返回真与假
    • 内存单元值设置为1

    交换(exchange)指令

    • 交换内存中的两个值。

    锁变量

    锁是一个抽象的数据结构

    • 一个二进制变量(锁定/解锁)
    • Lock::Acquire()
    • Lock::Release()

    使用锁来控制临界区的访问:当进程进入临界区之前先判断锁变量的值,若有锁的话就等待,否则进入临界区并且更改锁变量的值,然后再退出临界区时将锁变量的值再次修改。

    但是这又回到了最开始的问题:读锁变量和修改锁变量时两个操作,在第一个进程读取锁变量时发现可以进入,然后CPU调度第二个进程进入CPU进行执行,此时第一个进程还未将锁变量进行修改,因此第二个进程也发现可以进入,因此更改了锁变量进入临界区,此时又被切换至第一个进程,第一个进程认为此时临界区中没有进程,因此也进入了临界区,所以还是不能解决竞争条件的问题。

    使用TS指令实现自旋锁

    //忙等待,此种方式为自旋锁方式
    class Lock {
    	int value = 0;
    }
    Lock::Acquire() { //若锁被释放,则TS指令读取0并将值设置为1,否则,TS指令读取1并将值设置为1
    	while(test-and-set(value))
    		;
    }
    Lock::Release() {
    	value = 0;
    }
    
    //无忙等待,此种方式为等待队列方式,即阻塞式方法。
    class Lock {
        int value = 0;
        WaitQueue q;
    }
    Lock::Acquire() {
        while(test-and-set(value)) {
            //将当前进程加入等待队列
            add this PCB to wait queue q
            //执行调度
            schedule();
        }
    }
    Lock::Release() {
        value = 0;
        //从等待队列中移除一个进程p,并唤醒他去执行。
        remove one process p from q;
        wakeup(p);
    }
    

    基于原子操作指令锁的特征

    优点:

    • 适用于单处理器或者共享主存的多处理器任意数量的进程同步机制
    • 简单并且容易验证
    • 支持多临界区

    缺点:

    • 忙等待锁会消耗处理器时间
    • 可能导致饥饿
      • 进程离开临界区时有多个进程在等待
    • 死锁
      • 拥有临界区的低优先级进程
      • 请求访问临界区的高优先级进程获得处理器并等待临界区(忙等待的情况)

    参考资料

    清华大学—操作系统原理
    现代操作系统

    展开全文
  • 进程同步与互斥

    2020-06-01 22:53:38
    进程同步概念:亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作。 进程互斥...

    1.概念

    进程同步概念:亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作。

    进程互斥概念:对临界资源的访问,需要互斥地进行。即同一个时间段内只能允许一个进程访问该资源。

    进程互斥的四个区:

    进入区:检查是否可进入临界区,若可进入,需要“上锁”。

    临界区:访问临界资源的那段代码。

    退出区:负责解锁。

    剩余区:其余代码部分。

    进程互斥需要遵循的原则有:

    空闲让进:临界区空闲时,应允许一个进程访问。

    忙则等待:临界区正在被访问时,其它试图访问的进程需要等待。

    有限等待:要在有限时间内进入临界区,保证不会饥饿。

    让权等待:进不了临界区的进程,要释放处理机,防止忙等。

    2.进程同步与互斥的软件实现方法

    1)单标志法:两个进程在访问完临界区后会把使用的权限转交给另一个进程,也就是说每个进程进入临界区的权限只能被另一个临界区赋予。
    不满足空闲让进的原则。

    2)双标志先检查法:设置一个布尔型数组flag[],数组中各个元素用来标记各进程想进入临界区的意愿,比如“flag[0] = true”意味着0号进程P0现在想要进入临界区。
    不满足忙则等待的原则。

    3)双标志后检查法:双标志先检查法得改版,前一个算法的问题是先检查后上锁,但是这两个操作又无法一气呵成,因此导致了两个进程同时进入临界区的问题。因此,人们又想到了先“上锁”,后检查的方法,来避免上述问题。但有可能导致两个进程都无法进入临界区的问题。
    解决了忙则等待的原则,但是违背了有限等待和空闲让进原则。

    4)Peterson算法:双标志后检查法中,两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。Peterson想到了一种方法,如果双方都争着想进入临界区,那可以让进程尝试“孔融让梨”,主动让对方先使用临界区。
    结合单标和双标的算法,但是不满足让权等待的条件。

    2.进程同步与互斥的硬件实现方法

    1.中断屏蔽法

    2.TestAndSet指令方法

    3.Swap指令方法

    硬件实现方法
    优点:
    适用于任意数目的进程,而不管是单处理机还是多处理机,简单,容易验证其正确性。可以支持进程内有多个临界区,只需为每个临界区设立一个布尔值。
    缺点:
    进程等待进入临界区时要消耗大量时间,不可以实现让权等待。从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,从而导致饥饿现象。

    展开全文
  • 进程同步与互斥概念原理

    千次阅读 2018-07-17 11:56:56
    进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。 临界资源 在操作系统中,...

    进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。

    临界资源

    • 在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量和数据等(如果这类资源不被看成临界资源加以保护,那么很有可能造成丢数据的问题)。

    • 对于临界资源的访问,必须是互斥进行。也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。而进程内访问临界资源的代码被成为临界区。

      对于临界区的访问过程分为四个部分:

      1.进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞

      2.临界区:在临界区做操作

      3.退出区:清除临界区被占用的标志

      4.剩余区:进程与临界区不相关部分的代码

    进程同步

    进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。

    比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。而当进程A产生信息放入缓冲区时,进程B才会被唤醒。概念如图1所示。

    这里写图片描述

    进程互斥

    进程互斥是进程之间的间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。

    比如进程B需要访问打印机,但此时进程A占有了打印机,进程B会被阻塞,直到进程A释放了打印机资源,进程B才可以继续执行。如图所示。
    这里写图片描述

    实现临界区互斥的基本方法

    1) 软件方法
    Dekker算法和peterson算法
    2) 硬件实现方法
    通过硬件实现临界区最简单的办法就是关CPU的中断。从计算机原理我们知道,CPU进行进程切换是需要通过中断来进行。如果屏蔽了中断那么就可以保证当前进程顺利的将临界区代码执行完,从而实现了互斥。这个办法的步骤就是:屏蔽中断–执行临界区–开中断。但这样做并不好,这大大限制了处理器交替执行任务的能力。并且将关中断的权限交给用户代码,那么如果用户代码屏蔽了中断后不再开,那系统岂不是跪了?
    还有硬件的指令实现方式,这个方式和接下来要说的信号量方式如出一辙。但是通过硬件来实现,这里就不细说了。

    信号量实现方式

    这也是我们比较熟悉P V操作。通过设置一个表示资源个数的信号量S,通过对信号量S的P和V操作来实现进程的的互斥。

    P和V操作分别来自荷兰语Passeren和Vrijgeven,分别表示占有和释放。P V操作是操作系统的原语,意味着具有原子性。

    P操作首先减少信号量,表示有一个进程将占用或等待资源,然后检测S是否小于0,如果小于0则阻塞,如果大于0则占有资源进行执行。

    V操作是和P操作相反的操作,首先增加信号量,表示占用或等待资源的进程减少了1个。然后检测S是否小于0,如果小于0则唤醒等待使用S资源的其它进程。

    经典的利用信号量实现同步的问题

    生产者–消费者问题
    问题描述:
    生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。本作业要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。
    这里生产者和消费者是既同步又互斥的关系,首先只有生产者生产了,消费着才能消费,这里是同步的关系。但他们对于临界区的访问又是互斥的关系。因此需要三个信号量empty和full用于同步缓冲区,而mut变量用于在访问缓冲区时是互斥的。

    读者–写者问题
    问题描述:
    一个数据文件或记录,统称数据对象,可被多个进程共享,其中有些进程只要求读称为”读者”,而另一些进程要求写或修改称为”写者”。
    规定:允许多个读者同时读一个共享对象,但禁止读者、写者同时访问一个共享对象,也禁止多个写者访问一个共享对象,否则将违反Bernstein并发执行条件。
    通过描述可以分析,这里的读者和写者是互斥的,而写者和写者也是互斥的,但读者之间并不互斥。
    此我们可以设置3个变量,一个用来统计读者的数量,另外两个分别用于对读者数量读写的互斥,读者和读者写者和写者的互斥

    用于同步的信号量一定是位于不同的进程中,具有互斥的两个信号量一定是位于同一个进程中

    展开全文
  • 文章目录进程同步与互斥、信号量机制一、进程同步、进程互斥概念1.1 进程同步1.2 进程互斥二、进程互斥的实现方法2.1 进程互斥的软件实现方法2.2 进程互斥的硬件实现方法三、信号量机制*3.1 信号量机制的概念3.2 ...

    进程同步与互斥、信号量机制、管程



    Java、大数据开发学习要点(持续更新中…)


    一、进程同步、进程互斥的概念

    1.1 进程同步

      由于进程具有异步性,也就是说各个并发的进程以各个独立且不可预知的速度向前推进。当我们需要进程按照某种特定的顺序执行时(例如之前所说的管道通信,向管道写数据和从管道读数据的进程是并发执行的,但我们必须保证写数据先执行,读数据进程等待写数据进程完成后再执行),需要依靠操作系统提供的进程同步机制来完成。

    1.2 进程互斥

      进程的并发需要共享的支持(并发的进程可能需要共享一些系统资源)。资源共享分为互斥共享方式同时共享方式
      我们将一个时间段内只允许一个进程使用的资源称为临界资源(如物理设备,部分变量、数据、内存缓冲区等)。对临界资源的访问,必须互斥进行(即一个进程访问临界资源时,另一个进程想要访问临界必须要等待)。
      对临界资源的访问宏观上分为以下步骤:
    在这里插入图片描述  对临界资源的互斥访问需要遵循以下原则

    1. 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
    2. 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
    3. 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)。
    4. 让权等待:当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

    二、进程互斥的实现方法

    2.1 进程互斥的软件实现方法

    • 单标志法:设定一个turn标志(允许访问的进程号),当一个进程在访问完临界区后会将使用临界区的权限转交给另一个进程(即每个进程进入临界区的权限只能被另一个进程赋予)。因此存在违背空闲让进原则的问题。
    • 双标志先检查法:设置一个布尔型数组flag[n],数组中各个元素用来标记各个进程想要进入临界区的意愿。每个进程在进入临界区前都检查是否有其他进程想要进入临界区,没有的话就将自己对应的flag[i]修改为true,开始访问临界区。但在并发的情况下,由于进程切换原因,可能导致两个进程同时进入临界区,违背了忙则等待的原则(进入区检查和上锁不是原子操作)。
    • 双标志后检查法:与先检查法类似,只是将上锁提前到了检查前,这样可能导致多个线程都无法进入临界区。违背了空闲让进有限等待原则
    • Peterson算法
        Peterson算法的关键思想是,让进程争抢进入临界区的问题转换成进程主动让其他进程先使用的问题。同样定义了布尔数组来表示进入意愿,也定义了turn标志表示优先让哪个进程进入。达到了多个进程都有进入临界区的意愿时,进程间的“孔融让梨”的效果。但仍然没有遵循让权等待的原则。
      Peterson算法思想

    2.2 进程互斥的硬件实现方法

    • 中断屏蔽方法:之前所提到的在内核态下使用开/关中断指令实现进程互斥访问临界区。问题在于不适用于多处理机,并且只适用于操作系统内核进程。
    • TestAndSet(TS指令或TSL指令):定义了一个布尔型的共享变量lock来表示当前临界区是否被加锁。下面是实现的原理讲解(不是真的实现过程,TestAndSet是硬件实现的):
      TestAndSet
      缺点仍然是不满足让权等待原则,无法进入临界区的进程占用处理机执行TSL指令。
    • Swap指令:类似TSL指令,同操作硬件,只是实现方式不一样,且同不满足让权等待原则。

    三、信号量机制*

    3.1 信号量机制的概念

      信号量本质是一个变量(整数或者更复杂的记录型变量),信号量一般用来表示系统中某种资源的数量。用户进程使用操作系统提供的(wait和signal原语,P、V操作)来对信号量进行操作,从而实现进程互斥和同步。

    • 整型信号量:用一个整数型变量作为信号量,用于表示系统中某种资源的数量。与软件实现中的双标志先检查法类似,只是信号量是通过原语进程实现的,是原子操作。但还是无法解决让权等待的问题
    • 记录型信号量:增加了一个等待队列,使得无法获取资源的线程能够被阻塞,等待资源充足后被唤醒,来解决让权等待问题。
      记录型信号量
      注意:原语操作中先将信号量的值改变再判断。

    3.2 信号量机制实现进程互斥与同步

      临界区可以看作一种特殊的系统资源,用互斥信号量mutex=1来表示。在临界区前进行P(mutex),在临界区后执行V(mutex),来实现基于信号量的进程互斥
      由于操作系统的异步性,进程是异步执行的。但有的时候我们就希望进程的执行有一定的顺序,也就是进程同步问题。具体实现是设置一个同步信号量S=0。若在某一线程执行到指定位置处先进行一个V(S)操作(此时S=1),在另一进程需要同步的代码前执行一个P(S)操作,S变回0,且不执行block原语,而是执行接下来的代码;若某个线程先执行了P(S)操作,S=-1,没有可用资源,这个进程会阻塞自己,当其他进程执行到了V(S)后,S=0,代表有进程阻塞在阻塞队列中,会执行wakeup原语唤醒阻塞进程。总结下就是,实现同步,前V后P

    3.3 生产者与消费者问题

      问题描述:如何使用信号量实现的互斥、同步操作来实现生产者消费者模型?
      首先,为什么说要用信号量实现的互斥和同步呢?因为缓冲区是临界资源,各进程必须是互斥访问的;并且消费者消费数据必须在生产者生产数据后进行,缓冲区满后需要先消费再生产,是需要同步的。
    生产者消费者进程模型实现
    注意:由于P操作可能使得进程进入阻塞状态,实现互斥的P操作一定要放在实现同步的P操作后,否则会出现死锁!

    区别于进程同步,补充线程同步的方法:
      线程同步是两个或多个共享关键资源的线程的并发执行。应该同步线程以避免关键的资源使用冲突。操作系统一般有下面三种线程同步的方式:

    • 互斥量(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制。
    • 信号量(Semphares) :它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
    • 事件(Event) :Wait/Notify,通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较。

    四、管程(monitor)

    4.1 管程的定义与基本特性

      管程是一种特殊软件模块,有以下部分组成(类似于面向对象中的类):

    • 局部于管程的共享数据结构
    • 对该数据结构进行的一组过程(方法)。
    • 对共享数据结构进行初始化
    • 管程的名字

      管程基本特征

    • 局部于管程的数据只能被局部于管程的过程访问
    • 一个进程只有通过调用管程内的过程才能防问管程的共享数据
    • 每次仅允许一个进程在管程内执行某个内部过程

      由上面的总结可以看到,编译语言去实现管程,是实现一个数据私有方法公有且加锁的一个类。Java中synchronized的实现就是类似于管程的实现


    参考:《王道考研操作系统》
    地址:https://www.bilibili.com/video/BV1YE411D7nH

    展开全文
  • 进程同步与互斥笔记

    千次阅读 2017-03-16 23:36:19
    1、进程之间的两种相互制约关系(1)间接相互制约关系(互斥关系)同处于一个系统中的进程,通常都共享着某种资源,如共享CPU、共享I/O设备等,所谓间接相互制约即源于这种资源共享,使系统中本来没有关系的进程因...
  • 2.理解生产者消费者模型,了解其它典型的同步互斥模型,如哲学家就餐、读者-写者模型等。 3.学习使用Windows中基本的同步对象,掌握相关API的使用方法。 4.了解Windows中多线程的并发执行机制,实现进程的同步...
  • 进程同步与互斥基础

    千次阅读 2013-11-02 15:07:53
    同步:为了完成某个任务而建立的两个或多个进程,这些进程为了需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。进程间的制约关系就是源于它们之间的相互合作。 互斥:当一个进程进入临界区...
  • 进程同步互斥

    2021-09-07 11:04:47
    一、进程同步互斥概念 二、进程互斥的软件实现方法 三、进程互斥的硬件实现方法 四、信号量机制 可以解决进程同步、互斥问题 用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而实现进程...
  • 什么是进程同步 进程互斥的原则 进程互斥的软件实现方法 1、单标志法 2、双标志先检查法 3、双标志后检查法 4、Peterson 算法 进程互斥的硬件实现方法 1、中断屏蔽方法 2、TestAndSetLock 指令 TSL和中断屏蔽的区别 ...
  • 进程间相互作用 相关进程和无关进程 时间有关的错误 ...经典的进程同步问题 简单生产者—消费者问题 多个生产者—消费者问题 读者—写者问题 同步与互斥机制的综合应用 管程 管程的提出 管程的概念及...
  • 1.进程同步与互斥的区别? 互斥:某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。互斥无法限制访问者对资源的访问顺序即访问时无序的。如:接学家就餐问题,每个人手中只有一个筷子。 同步:基于...
  • 互斥与同步概念 在多道程序环境下,系统中可能有许多并发的进程,在这些进程之间存在以下两种关系:间接相互制约关系、直接相互制约关系。 间接相互制约关系 多个进程彼此无关,它们并不知道其他进程的存在。由...
  • 进程同步与互斥&生产消费者原理一. 进程互斥与同步 进程互斥与同步机制的主要任务是:对多个相关进程在执行次序上进行协调,使并发执行的诸进程间能按照一定的规则(或时序)共享系统资源,并能很好的相互...
  • 浅谈进程同步互斥概念

    千次阅读 2018-04-14 15:17:43
    简介 进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。 临界资源 在操作系统中...
  • 六、进程同步互斥 1、进程同步互斥原则 2、进程互斥的软件实现方法 3、进程互斥的硬件实现方法
  • 文章目录什么是进程同步什么是进程互斥进程同步实现方式进程互斥的实现方式 什么是进程同步 知识点回顾:进程是具有异步性的特征。 异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。 读进程和写...
  • 2.3.1 进程同步与互斥

    千次阅读 多人点赞 2020-03-18 13:36:54
    为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步概念进程同步是为了解决进程的异步问题。 一个简单的例子来理解这个概念。 例如,让系统计算1 + 2x3,假设系统产生两个进程: 一个是加法进程...
  • 进程同步与互斥的区别

    千次阅读 2017-02-24 18:08:10
    并发进程的执行会产生相互制约的关系:一种是进程之间竞争使用临界资源,只能让他们逐个使用,这种现象称为互斥,是一种竞争关系。另一种是进程之间协同完成任务,在关键点上等待另一进程发来的消息,以便协同一致,...
  • 进程同步与进程互斥概念 进程同步 因为进程具有异步性的特征,即并发执行的进程是以各自独立的、不可预知的速度向前推进。而进程同步就是希望能保证并发执行进程时,进程中指令执行的顺序 同步亦称直接制约关系...
  • 进程同步互斥

    2018-03-27 15:57:31
    进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。而互斥和同步之间存在联系所以,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,106
精华内容 18,842
关键字:

进程同步与互斥的概念