操作系统(一)—— 进程同步

前言

下一篇章打算讲解 AQS ,在去熟悉 AQS 原理之前,我想我们得知道一个事物是因何而产生,它出现的动机;AQS 作为一种高级的同步机制,讨论 AQS 则避免不了谈及操作系统以及 Java 实现的其他同步机制,正是因为其他同步机制存在一些缺陷或是限制才会有 AQS;由于同步机制的篇幅并不短,因此单独开一文进行阐述。

概念介绍

临界区

Consider a system consisting of n processes {P0, P1, ..., Pn−1}. Each process has a segment of code, called a critical section, in which the process may be accessing — and updating — data that is shared with at least one other process.

当多个进程访问(包含线程,此文以进程来讲解,后续只说进程)共享资源时,这些进程访问共享资源的代码就称作临界区。临界区的关键是在同一时刻只能有一个进程执行临界区。

临界资源

在同一时刻只能允许一个进程访问的共享资源称作临界资源。同一时刻只能允许一个进程访问,即是因为有多个进程同时访问共享资源会造成错误,如多个进程调度打印机,多个进程需要有序执行,当一个进程执行完毕下一个线程才能执行,否则打出来的内容就串了;

进程之间的制约

  1. 直接制约:当一个进程访问临界资源结束后,另一个进程依赖于上一个进程的计算结果,例如做 count++ 操作,如果没有次序依赖保证,加出来的结果就可能是错误的。
  2. 间接制约:即上面举的打印机的例子,即使两个线程之间没有数据依赖关系,但是并不能同时执行,否则会出现错误。

互斥

互斥即间接制约,线程访问共享资源相互排斥,互斥强调的是抢占

同步

同步即直接制约,同步强调的是协作

同步和互斥通常成对出现,但是很明显,同步也实现了互斥,通常意义上我们说的同步即涵盖了同步和互斥,下文则只说同步,就不说同步互斥。

进程同步工具

为何需要进程同步?

多进程协作下,多个进程共享逻辑空间,可以访问到共享的资源,在并发访问的情况下会出现数据的不一致,所以需要引入同步机制对进程访问做顺序的控制。

Mutex

Mutex 又称互斥锁,互斥锁提供一个状态变量、加锁解锁操作、等待队列。进程在进入临界区之前先进行加锁操作,且变更锁的状态表明锁不可用,当其他进程想要进入临界区的时候同样要进行加锁操作,但因锁不可用所以加锁失败,需要等待获得锁的线程释放锁之后才能加锁成功,如此便保证了进程互斥的进入临界区。
等待队列不是必须的,可以使用自旋替代,即当线程获取锁失败的时候进行空转等待锁释放,这有个好处是可以避免两次上下文切换,但是由于空转没有释放 CPU ,影响其他进程处理任务,所以通常互斥锁都会提供一个等待队列,等待是广泛意义上说的等待,线程可以处于 wait 状态也可以是 block 状态。

Semaphore

Semaphore 即信号量,信号量是根据资源数量对进程进行状态管理的一种机制,信号量在狭义上可以指这个机制中的整型数,信号量提供一个大于零的整型数和两个操作。两个操作是 wait() 和 signal(), 在 Dijkstra 提出这个概念的时候这两个操作也叫做 P 操作和 V 操作。信号量机制的工作原理是初始化一个整数为可以访问的共享资源的数量,当进程需要访问临界资源的时候先进行 P 操作,表明占据了一个资源,当使用完毕后进行 V 操作释放资源,P 操作会对整数减 1,V 操作对整数加 1,如果该整数为 0,那么进程就无法访问资源。
信号量分为两种:

  • 互斥信号量, 信号量的值为 0 或 1,也叫二进制信号量
  • 计数信号量,信号量使用一个较大的范围,介于 0~n 之间

Monitor

Monitor 在操作系统中也被译作管程,管程是高级操作。Semaphore 和 Mutex 都是低级操作,为操作系统层面的实现,通常用来构建更高级的同步工具。信号量和互斥锁的使用都比较复杂,使用不当很容易造成错误。管程即是为了解决信号量这种状态和操作分散且由应用程序员控制的问题,管程的思想是将数据、变量、操作封装到一个模块,可以理解为对信号量的操作和数据的封装,避免信号量中PV操作配对错误的情况。管程通过限制同一时刻只能有一个进程(线程)进入管程来达到互斥的目的。管程在 Java 中的实现以 HotSpot 为例是 ObjectMonitior.cpp,具体应用体现在 Synchronized 关键字,关于 Monitor 的详情可以见多线程与高并发(一)—— 自顶向下理解Synchronized实现原理

参考资料

[1] 《Operating System Concepts (Abraham Silberschatz, Greg Gagne etc.)》

posted @ 2022-07-24 15:27  onAcorner  阅读(108)  评论(0编辑  收藏  举报