zoukankan      html  css  js  c++  java
  • 操作系统----进程同步互斥1-10

    ------------------------------------------《进程同步互斥问题》------------------------------------------

    进程异步性:各进程并发的执行,以独立的不可预知的进度向前推进。

    异步性使得进程可能不是按照预期的想法进行,提出了进程同步机制。比如下面这个图

    同步就是直接制约关系

    进程互斥:一段时间内只允许一个进程使用得资源成为互斥资源,

    当对资源进行访问时,必须互斥进行,成为间接制约关系。

     

     --------------------------------------------------------------------------------------------------------------------------

     

    单标志法:

    当前用标志的进程一直不进入临界区,后面的就得不到权限,违背了空闲等待原则。

    双标志先检查法:

    进入临界区之前先看一看别人有没有用的,没有的话把自己的标志设置为1然后进入临界区使用资源。先检查后上锁。

    问题就是:

    意思就是调度使得两个进程都被设置为1,导致两个进程同时进入临界区。

    双标志后检查法:

    就是把栓标志检查法的上锁标志放在检查之前,先上锁后检查。

    但是由于调度使得两个进程同时上锁,这时候就是谁也用不上。

     

     Peterson算法:

    双标志后检查法中或造成谁也不让谁,增加标示量,标示能否让别的进程抢在自己面前进入临界区。

     A谦让,B也谦让,B的为最后一句,A使用完之后让B用。

    未遵循让权等待原则。

     

    搞清楚进入区,然后让两个并发进行,看看结果有啥。

     

    中断屏蔽方法:

    多处理机时候,有可能多个处理机处理同一个临界区造成错误。

    开关中断权限特别大,不能随意让用户使用。只能有操作系统内核来操作。

    TS指令不能被中断:硬件实现,将一个指令上锁,不满足让权等待原则

    Swap指令:硬件实现,

     

    --------------------------------------------------------《信号量机制》-----------------------------------------

     

     

    整形信号量:

     

    原语是由关中断、开中断实现的。

     P:wait S-=1

    V:signal S+=1

    整形信号量:不满足让权等待会发生忙等。

     

    记录型信号量:不会发生忙等

    记录性信号量:

    在signal的时候检查一下信号量是不是负数,如果是负数就执行一个唤醒操作。一直唤醒直到标志量>=0。

    记录型信号量在P之后发现标志小于0,就会让当前进程进入自我阻塞状态,当前进程主动释放CPU,实现了让权等待原则,不会出现忙等状态。

    记录型信号量在V之后发现标志小于0,标明依然有进程在等待该资源,此时调用wakeup唤醒等待对列中的第一个资源,从阻塞态转化为就绪态。

    -----------------------------------信号量机制实现进程互斥--------------------------------

     PV成对出现, 

     

     

     信号量实现前驱关系:

    对应上面的同步,只能先V使得S++,然后才能进行下一步P操作。

     

    -----------------------------------------------《第二波》-------------------------------------------------

     生产者消费者问题:

    两个同步关系:当缓存区为空的时候,消费者需要等待生产者生产,当换股长宁区为空的时候,生产者需要等待消费者消费。

    一个互斥关系:互斥的使用临界区资源。

    实现互斥的PV操作应该放在同步的锁之后。

     

     

    当同步在互斥之后,就会发生生产者先P(mutex),然后P(empty}的时候发生堵塞,此时生产者等待消费者消费,但是消费者得不到权限,被生产者占有,所以造成死锁。此时的empty为0.

    同样的,另一种情况是消费者的。此时mutex为0.

    两个v操作可以互换位置。

     

    通常不会把使用产品放到PV操作中,虽然影响不大,但是代码量增多,影响同步效率。

     

    先同步后互斥。

    实现同步:前v后p。

    多生产者多消费着:生产和消费的种类有多个。

    同步:抽象为一个时间发生另一个事件之前。

    读者写着问题:

    只有互斥条件,需要多个条件,哲学家进餐文题。

    哲学家进餐:

    1.一次性最多只有n-1个人进餐,这样肯定有一根筷子剩下来。

    2.奇数位置的抢左边,偶数位置的抢右边,这样两个人一定会有一个人阻塞状态,从而避免死锁。

    3.只有两个筷子都拿起来的时候才能进行,否则就会被阻塞,其他的也都会被阻塞。知道当前的他所需要的筷子都被拿起来。 

  • 相关阅读:
    java基础语法
    MySQL5.7常用命令
    wireshark抓包分析---TCP/IP协议
    MySQL安全管理
    MySQL触发器
    MySQL存储过程和游标
    mysql实现远程登录
    Java中遍历Map对象的4种方法
    SSM-CRUD
    SSM整合-配置文件
  • 原文地址:https://www.cnblogs.com/0123wtdd/p/10910737.html
Copyright © 2011-2022 走看看