进程同步与互斥

什么是进程同步

答:进程同步指的是,由于进程并发执行具有异步性(即各自以独立地、不可预知的速度向前推进),但是某些情况下又需要进程之间进行配合和协调来完成一项工作(存在执行的顺序),因此操作系统需要提供一种机制来实现这一功能,即进程同步

例:

双标志先检查法存在的主要问题:违反忙则等待原则。

  • 原因在于:进入区的检查上锁两个处理不是一气呵成的(不是原子性)。如果检查通过后,在访问临界区之前发生进程切换,则会造成多个进程同时访问临界区。

双标志后检查法

  • 算法思想:双标志先检查法的改进版。通过先上锁,后检查来避免先检查法的缺陷。

  • 存在的主要问题:违背了有限等待空闲让进原则。会因各进程都无法长期访问临界资源而产生饥饿现象。

Peterson算法

  • 算法思想:主动让对方先使用临界区。

  • Peterson算法存在的主要问题:违背了让权等待原则(当进程无法进入临界区时,应该立即释放处理机)。 Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进忙则等待有限等待三个原则。但是依然不够好。

进程互斥的硬件实现方法

中断屏蔽方法

利用开/关中断指令实现。关中断后,无法发生中断切换进程,则不存在两个进程同时访问某个临界区。

优点:简单、高效

缺点:

  1. 不适合多处理机(关中断只对某个处理机管用)
  2. 只适用于操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态,这组指令如果能让用户随意使用非常危险)
  3. 自己想的一条缺点:关中断是无差别攻击,使得别的许多没有与当前进程竞争临界区的进程也无法获得处理机,降低了操作系统的灵活性。

TestAndSet(TS指令/TSL指令)

简称TS指令,也有些地方称为TestAndSetLock指令,或者TSL指令。TSL指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。以下是用C语言描述的逻辑

优点:实现简单,把“上锁”和“检查“通过硬件的方式变成原子操作;适用于多处理机环境。

缺点:仍然不满足让权等待原则(无法进入临界区时释放处理机)。 原因:暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,从而导致忙等

Swap指令(XCHG指令)

Swap指令,又叫XCHG指令,是用硬件实现的,执行的过程中不允许被中断。以下是C语言描述的逻辑

逻辑上和TSL一样,优缺点和TSL也一样,不满足让权等待

信 量机制

1965年,荷兰学者Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法–信 量机制

用户进程可以通过操作系统提供的一对原语(原语:无法中断、连续执行的一组操作)来对信 量进行操作,从而很方便地实现了进程互斥、进程同步。

信 量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信 量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信 量。

一对原语:wait(S)和signal(S),信 量为S。 wait、signal原语简称为P、V操作(来自荷兰语proberen和verhogen)。

整型信 量

用一个整数型的变量作为信 量,用来标识系统中某种资源的数量。

与普通整型变量的区别:对信 量的操作只有三种,初始化、P操作、V操作

e.g. 某计算机系统中有一台打印机

检查和上锁一气呵成,避免了并发、异步导致的问题。

存在的问题:不满足“让权等待”,会发生“忙等”

记录型信 量

整形信 量的缺陷是存在“忙等”问题,因此人们又提出了“记录型信 量”,即用记录型数据结构标识的信 量。

//记录型信 量的定义typedef struct{    int value;	//剩余资源数    struct process *L;	//等待队列}semaphore;//某进程需要使用资源时,通过wait原语申请void wait(semaphore S){    S.value

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐