• 操作系统--进程的互斥与同步


    操作系统--进程的互斥与同步

    进程互斥

    进程互斥:在多个程序中,有两个进程不可以同时进行(例如读,写操作)。

    竞争资源(临界资源)

    • 当并发进程竞争使用同一资源时,他们之间就会发生冲突。如果操作系统将资源分配给其中的某一个进程使用,另一个进程就必须等待,直到申请的资源可用时,由操作系统分配给他们。

    • 如果竞争资源的进程太多,这些进程还必须等待在一个队列中,如就绪队列,阻塞队列等。

    • 一种极端的情况是,被阻塞进程永远得不到申请的资源,而死锁。

    采用互斥方式,使用临界资源

    资源的互斥,进程使用上述这类资源的时候,只能有一个进程对资源进行处理。下面是临界区的使用图和注解。

                                               


    进程同步

    多个进程常常需要共同修改某些共享变量,表格,文件数据库等,协作完成一些功能。这个时候,就需要用到进程之间的同步。
    我们把异步环境下的一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。


    进程同步和互斥的解决方法

    互斥与同步的解决方法--软件方法

    控制p0,p1互斥的进入临界区。

    while循环为进入区应该做的事情。当不符合条件的时候,进行do{nothing}操作。



    使用软件解决方法,有一个公认的比较好的算法,为Dekker算法。下面是Dekker算法介绍。

    Dekker算法介绍:

           

    上面是Dekker算法的伪代码,还有p0进程的执行流程图。


    互斥与同步的解决方法--硬件方法

    硬件方法包括屏蔽中断和专用机器指令。

    屏蔽中断:

    由于进程切换需要依赖中断来实现,如果屏蔽中断,则不会出现进程切换。

    因此,为了实现对临界资源的互斥使用,可以在进程进入临界区之前,屏蔽中断。当进程退出临界区时,打开系统中断。这样就实现了同步和互斥的问题的解决。

    专用机器指令:

    (指令系统是计算机硬件的语言系统,也叫机器语言)

    利用一些专用机器指令也能实现互斥,机器指令在一个指令周期内执行,不会受到其他指令的干扰,也不会被中断。

    下面就是一个使用机器指令的例子:

                 

    (左边为机器指令方法,右边为实现代码)


    互斥与同步的解决方法--信号量


    信号量方法,就是用一个信号量来控制进程之间的使用。(就像是交通中的红路灯(信号量)与汽车之间的关系和作用)

         ​信号量的类型(count):

        ​     互斥信号量:用于申请或者释放资源的使用权,常初始化为1.

        ​    ​ 资源信号量:用于申请或者归还资源,可以初始化为大于1的正整数,表示系统中可用资源的个数。(比如说,我有多个显示屏,那么就可以使用count表示显示屏的个数。)


         信号量的操作:wait和signal(操作系统中,用系统调用的形式来提供wait和signal原语)

    s.conut为为信号量

    wait为申请资源   (优先于signal)

    signal为释放资源 (滞后于wait)

    下面是wait,signal操作的伪代码

            

    信号量的使用例子:



    根据上面的信号量,我们可以总结出信号量的物理意义



    互斥与同步的解决方法--管程 

    管程是一种在程序设计级控制进程互斥与同步的机制,具有信号量的功能,且更容易使用和控制。

    管城只要用于面向对象程序设计。


    互斥与同步的解决方法--通讯机制

    消息一般格式:


    消息传递同步操作原语

    两个进程之间的通讯,需要一些操作。我们使用操作系统提供的原语来完成这些操作。

    send原语:发送消息

    receive原语:接受消息,如果没有消息可以接受,那么则等待。


    常用的进程通讯

    1. 基于共享存储区的方法

    2. 邮箱的方式

    分别介绍:

    基于共享存储区的方式:

    通讯的双方是基于共享存储区来通讯的。这个共享数据区属于每个相互通讯的进程的组成部分。然后通讯之间向里面存储数据,提取数据。


    邮箱方式: 



    只要保证邮箱中,只有一个消息,那么就可以实现消息之间的互斥这样,就保证了进程之间的互斥。





  • 相关阅读:
    POJ——T2186 Popular Cows || 洛谷——P2341 [HAOI2006]受欢迎的牛
    Tarjan缩点【模板】
    shell(1):网络配置、BATH环境和通配符
    STL
    J
    H
    G
    模板整理(二)
    B
    0-1背包问题
  • 原文地址:https://www.cnblogs.com/AbeDay/p/5026913.html
Copyright © 2020-2023  润新知